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