使用任务并行库编写wav&同时播放?

时间:2013-09-08 04:58:18

标签: c# asp.net .net task-parallel-library naudio

我正在尝试使用NAudio编写一个可以录制.wav文件的应用程序。同时播放。我有一个事件可以抓住所有传入的音频:

void asioOut_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
        {
            if (s == null)
            {
                s = myList.AcceptSocket();
            }

                var samples = e.GetAsInterleavedSamples();
        }

事件内部是一种记录传入音频的方法:

writer.WriteSamples(samples, 0, samples.Length);

另一种将音频发送回放的方法

sendData(samples);

我尝试并行设置每个任务,但每个任务在事件结束时完成运行。

if (writeWav == null && sendFloatData == null)
             {
                    writeWav = new Task(() => writer.WriteSamples(samples, 0, samples.Length));
                    sendFloatData = new Task(() => sendData(samples));
                    writeWav.Start();
                    sendFloatData.Start();
             }

如何设置此项以便每次事件触发时,每个任务都会单独继续?

1 个答案:

答案 0 :(得分:1)

要同时录制和播放,只需将录制的缓冲区直接写入WaveFileWriter(正如您所做)并将其放入您正在播放的BufferedWaveProvider中。只需使BufferedWaveProvider的WaveFormat IEEE浮点数,它就可以正常工作。根本不需要创建任何任务。