【发布时间】:2017-09-24 21:44:13
【问题描述】:
我在 C# 中为我的音频编辑器项目使用 NAudio 库。我正在使用 wasapi 同时播放多个 wav 文件。
bool useEventSync = false;
AudioClientShareMode share = AudioClientShareMode.Shared;
wasapiOut = new WasapiOut(share, useEventSync, 50);
wasapiOut.Volume = 1.0f;
reader = new AudioFileReader(filename);
wasapiOut.Init(reader);
wasapiOut.Play();
我的所有用户控件上都有这个“播放”按钮,所以我可以播放多个 wav 文件。还有另一个按钮使用 AsioOut 在扬声器上实时播放麦克风输入,换句话说,您可以立即通过扬声器听到您所说的内容。
bufferke = new BufferedWaveProvider(new WaveFormat(44100,16,2));
string[]driverek=AsioOut.GetDriverNames();
asioOut = new AsioOut(driverek[0]);
asioOut.InputChannelOffset = 0;
asioOut.InitRecordAndPlayback(bufferke, 2, 44100);
asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(asioout_AudioAvailable);
asioOut.Play();
还有 asioout_AudioAvailable:
private void asioout_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
byte[] OutputBuffer = new byte[e.SamplesPerBuffer * 4];
for (int i = 0; i < e.InputBuffers.Length; i++)
{
Marshal.Copy(e.InputBuffers[i], OutputBuffer, 0, e.SamplesPerBuffer * 4);
Marshal.Copy(OutputBuffer, 0, e.OutputBuffers[i], e.SamplesPerBuffer * 4);
}
e.WrittenToOutputBuffers = true;
}
问题是我不能同时播放 wav 文件和使用我的 asio 监控按钮。基本上,当我播放 wav 文件时,asio 监控按钮只会停止它们。我做错了什么?
【问题讨论】: