我正在尝试使用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();
}
如何设置此项以便每次事件触发时,每个任务都会单独继续?
答案 0 :(得分:1)
要同时录制和播放,只需将录制的缓冲区直接写入WaveFileWriter(正如您所做)并将其放入您正在播放的BufferedWaveProvider中。只需使BufferedWaveProvider的WaveFormat IEEE浮点数,它就可以正常工作。根本不需要创建任何任务。