NAudio Asio 录音回放和保存(仅限噪音)
NAudio Asio Record Playback and Save (noise only)
我正在尝试通过我的声卡传递从 MIDI 键盘和 Asio 获得的音频信号,将其保存并写入文件。我知道网站上有这方面的示例,我已经阅读了所有示例,但不幸的是,它们无法解决我的问题。
我的问题是录音的时候听的很清楚,但是当我打开录音的文件时,我听到的都是噪音。我已经苦苦挣扎了好几天,我找不到任何解决办法。任何帮助将不胜感激。这是我的代码:
void asioStartPlaying(object sender, EventArgs e)
{
var asioOut = new AsioOut(2);
BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 16, 1));
asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(asio_DataAvailable);
//asioOut.PlaybackStopped += new EventHandler<StoppedEventArgs>(asio_StoppedRecording);
asioOut.InitRecordAndPlayback(wavprov, 1, 0);
asioOut.Play();
AsioRecordPath = filepath.Text;
asioFile = new WaveFileWriter(GetAsioFileName(), wavprov.WaveFormat);
button1.Enabled = false;
}
void asio_DataAvailable(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);
}
asioFile.Write(buf, 0, e.SamplesPerBuffer * 4);
asioFile.Flush();
e.WrittenToOutputBuffers = true;
}
GetAsInterleavedSamples() 方法有帮助。它创建了一个浮点数组并在写入 'asioFile' 时使用该数组解决了这个问题。 Mark Heath 有一个很棒的博客,我经常访问它,我建议你去看看。 https://markheath.net/post/asio-recording-in-naudio
我正在尝试通过我的声卡传递从 MIDI 键盘和 Asio 获得的音频信号,将其保存并写入文件。我知道网站上有这方面的示例,我已经阅读了所有示例,但不幸的是,它们无法解决我的问题。
我的问题是录音的时候听的很清楚,但是当我打开录音的文件时,我听到的都是噪音。我已经苦苦挣扎了好几天,我找不到任何解决办法。任何帮助将不胜感激。这是我的代码:
void asioStartPlaying(object sender, EventArgs e)
{
var asioOut = new AsioOut(2);
BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 16, 1));
asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(asio_DataAvailable);
//asioOut.PlaybackStopped += new EventHandler<StoppedEventArgs>(asio_StoppedRecording);
asioOut.InitRecordAndPlayback(wavprov, 1, 0);
asioOut.Play();
AsioRecordPath = filepath.Text;
asioFile = new WaveFileWriter(GetAsioFileName(), wavprov.WaveFormat);
button1.Enabled = false;
}
void asio_DataAvailable(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);
}
asioFile.Write(buf, 0, e.SamplesPerBuffer * 4);
asioFile.Flush();
e.WrittenToOutputBuffers = true;
}
GetAsInterleavedSamples() 方法有帮助。它创建了一个浮点数组并在写入 'asioFile' 时使用该数组解决了这个问题。 Mark Heath 有一个很棒的博客,我经常访问它,我建议你去看看。 https://markheath.net/post/asio-recording-in-naudio