Когда я записывал звук, я получил исключение «Использовать WavelnEvent для записи в фоновом потоке», и оно фактически не записывало звук. Я включил подпоток, который автоматически выполнял обнаружение сердцебиения в течение 6 секунд, но оценил данные, возвращаемые при обнаружении сердцебиения, чтобы определить, когда начинать запись. Но эта подсказка записи «Используйте WavelnEvent для записи в фоновом потоке».
/// <summary>
/// 开始录制音频
/// </summary>
public static void Start(string outrecdfile)
{
//麦克风采集,默认采集第一个麦克风
microphone = CaptureFactory.GetMicrophoneCapture(0);
//声卡数据采集
soundcard = CaptureFactory.GetSoundcardCapture();
//创建混音器
mixer = CaptureFactory.GetAudioMixter(microphone, soundcard, SoundcardMixMode.DoubleChannel, true);
//采集开始前,先初始化混音wav文件写入器
string createcatalog = AppDomain.CurrentDomain.BaseDirectory + "\\RecordFile\\";
mixedWav = new WavHelper(path, mixer.OutputSampleRate, (short)mixer.OutputChannelCount);
microphone.AudioDataCaptured += new SGDelegate<byte[]>(MicrophoneAudioDataCaptured);
soundcard.AudioDataCaptured += new SGDelegate<byte[]>(SoundcardAudioDataCaptured);
//注册采集到声音数据的事件,每当采集到声音数据,就通过该事件上报
mixer.AudioMixed += new SGDelegate<byte[]>(MixedAudioDataCaptured);
//开始采集
microphone.Start();
soundcard.Start();
}
public static void MicrophoneAudioDataCaptured(byte[] audioData)
{
if (microphoneWav != null)
{
microphoneWav.WriteAudioData(audioData);
}
}
public static void SoundcardAudioDataCaptured(byte[] audioData)
{
//写入声卡的wav文件中
if (soundcardWav != null)
{
soundcardWav.WriteAudioData(audioData);
}
}
private static void MixedAudioDataCaptured(byte[] audioData)
{
//写入混音后的wav文件中
if (mixedWav != null)
{
mixedWav.WriteAudioData(audioData);
}
}
Вызывается в дочернем потоке
AudioRecording.Start(outrecdfile);