我对以下使用 ASIO 和 NAudio 库的 C# 代码有一点问题。
我尝试从吉他中获取声音并直接在扬声器中播放它的声音。到目前为止它有效,但声音非常失真。我在这里读到了一种解决问题的方法是:
Marshal.Copy(buf, 0, e.OutputBuffers[i], e.SamplesPerBuffer * 4);
但是,如果我这样做,缓冲区的大小会大 4 倍,因此代码将无法编译。
我已经用 asio4all 和 MAUDIO 卡试过了;这对他们俩来说都是同样的问题。
public partial class MainWindow : Window
{
AsioOut ASIODriver;
BufferedWaveProvider buffer;
public MainWindow()
{
String[] drivernames = AsioOut.GetDriverNames();
ASIODriver = new AsioOut(drivernames[0]);
buffer = new BufferedWaveProvider(new WaveFormat ());
ASIODriver.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(ASIODriver_AudioAvailable);
ASIODriver.InitRecordAndPlayback(buffer,2,44100);
//ASIODriver.InputChannelOffset = 1;
ASIODriver.Play();
}
private void ASIODriver_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
byte[] buf = new byte[e.SamplesPerBuffer];
for (int i = 0; i < e.InputBuffers.Length; i++)
{
Marshal.Copy(e.InputBuffers[i], buf, 0, e.SamplesPerBuffer);
Marshal.Copy(buf, 0, e.OutputBuffers[i], e.SamplesPerBuffer);
}
e.WrittenToOutputBuffers = true;
}
}