Подсказка при записи звука с использованием C# «Использовать WavelnEvent для записи в фоновом потоке» - PullRequest
0 голосов
/ 07 мая 2020

Когда я записывал звук, я получил исключение «Использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...