使用NAudio播放原始PCM(输出噪音但在Audacity中打开正常)

Rah*_*han 2 .net c# audio pcm naudio

我正在使用NAudio(1.7.1.17)WasapiLoopbackCapture工作正常,我可以使用以下格式在Audacity中打开保存的原始PCM:

原始PCM格式

调用面向.NET 4 x86的代码.该文件是10秒的记录总计[3,515,904字节].

捕获:

var device = WasapiLoopbackCapture.GetDefaultLoopbackCaptureDevice();

using (var capture = new WasapiLoopbackCapture(device))
{
    capture.ShareMode = AudioClientShareMode.Shared;
    capture.DataAvailable += WasapiCapture_DataAvailable;
    capture.RecordingStopped += WasapiCapture_RecordingStopped;

    // Verified that [capture.WaveFormat] is [44.1KHz, 32 bit 2 ch].

    capture.StartRecording();
    Thread.Sleep(TimeSpan.FromSeconds(10));
    capture.StopRecording();
}

private void WasapiCapture_DataAvailable (object sender, WaveInEventArgs e)
{
    // Write [e.BytesRecorded] number of bytes from [e.Buffer] to a file.
}

private void WasapiCapture_RecordingStopped (object sender, StoppedEventArgs e)
{
    // Verified that e.Exception was null.
}
Run Code Online (Sandbox Code Playgroud)

回放:

var file = new FileInfo(/* Same file that was just recorded. */);

using (var stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read))
{
    var waveOut = new WaveOut();
    var waveFormat = new WaveFormat(44100, 32, 2); // Same format.
    var rawSource = new RawSourceWaveStream(stream, waveFormat);
    waveOut.Init(rawSource);
    waveOut.Play();
}
Run Code Online (Sandbox Code Playgroud)

播放代码产生的噪音最多为一秒钟.我仔细检查了字节顺序,除了大小(理想情况下应该是[3,528,000字节])之外,一切看起来都很好.我不确定填充是否是这里的问题我需要能够在不知道的情况下传输这个原始PCM数据提前全尺寸.

但首先要做的事情.关于如何让NAudio播放这个文件的任何指示将不胜感激.

Mar*_*ath 5

您的WaveFormat编码需要是IEEE float而不是PCM(它当前是)

WaveFormat.CreateIeeeFloatWaveFormat(44100,2)
Run Code Online (Sandbox Code Playgroud)