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 录制播放和保存(仅限噪音)的主要内容,如果未能解决你的问题,请参考以下文章

NAudio Asio 录制和播放

NAudio Asio 同时录制和播放

Naudio Asio 在多个通道上同时录制和播放

NAudio:使用 ASIO 录制音频并用吉他输出

C# NAudio:录制的文件无法播放

如何使用 NAudio 和 ASIO 直接读取输入缓冲区和播放?