NAudio Asio 录制播放和保存(仅限噪音)
Posted
技术标签:
【中文标题】NAudio Asio 录制播放和保存(仅限噪音)【英文标题】:NAudio Asio Record Playback and Save (noise only) 【发布时间】:2020-09-09 13:28:17 【问题描述】:我正在尝试通过我的声卡传递从带有 Asio 的 MIDI 键盘获得的音频信号,将其保存并写入文件。我知道网站上有这样的示例,我已阅读所有示例,但不幸的是,它们无法解决我的问题。
我的问题是我在录制音频时听得很清楚,但是当我打开我录制的文件时,我听到的只是噪音。我苦苦挣扎了几天,找不到任何解决方案。任何帮助将不胜感激。这是我的代码:
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;
【问题讨论】:
【参考方案1】:GetAsInterleavedSamples() 方法有帮助。它创建一个浮点数组并在写入“asioFile”时使用该数组解决了这个问题。 Mark Heath 有一个我经常访问的很棒的博客,我说去看看。 https://markheath.net/post/asio-recording-in-naudio
【讨论】:
以上是关于NAudio Asio 录制播放和保存(仅限噪音)的主要内容,如果未能解决你的问题,请参考以下文章