到目前为止,我写道:
private AsioOut ASIODriver;
private BufferedWaveProvider buffer;
String[] drivernames = AsioOut.GetDriverNames();
ASIODriver = new AsioOut(drivernames[1]);
buffer = new BufferedWaveProvider(new WaveFormat(sampleRate, 16, 2));
ASIODriver.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(ASIODriver_AudioAvailable);
ASIODriver.InitRecordAndPlayback(buffer, 2, sampleRate);
ASIODriver.Play();
private void ASIODriver_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
byte[] buf = new byte[e.SamplesPerBuffer * 4];
for (int i = 0; i < e.InputBuffers.Length; i++)
{
Marshal.Copy(e.InputBuffers[i], buf, 0, e.SamplesPerBuffer * 4);
Marshal.Copy(buf, 0, e.OutputBuffers[i], e.SamplesPerBuffer * 4);
if (recorderOn && i == 1)
{
recorder.addInputToStream(buf);
}
}
}
这部分用于使用 ASIO 捕捉和播放吉他的声音。到目前为止没有问题。
public void addInputToStream(byte[] buffer)
{
byte[] sample = new byte[buffer.Length / 4];
if (waveWriter == null) waveWriter = new WaveFileWriter(@"C:\Temp\Test0001.wav", new WaveFormat(44100, 16, 1));
for (int i = 0; i < buffer.Length; i = i + 4)
{
sample[i/4] = (byte)Convert.ToSingle(buffer[i] + buffer[i + 1] + buffer[i + 2] + buffer[i + 3]);
}
waveWriter.Write(sample, 0, sample.Length);
}
问题出现在方法addInputToStream
中,声音很好地放在了.wav文件中,但文件中有很多“音频寄生虫”。很烦人。i
我在调用该方法时尝试将变量更改为未使用Convert.ToSingle
但结果相同。
我怀疑 of 有问题WaveFormat
,waveWriter
但我不知道我错过了什么。你们中的任何人都有线索吗?