0

我正在尝试使用 NAudio 将音频录制实现为 Wav 文件,但无法以编程方式更改 WasapiLoopbackCapture 类设置的默认比特率。

我正在将音频输出录制到 MemoryStream(下面的代码片段中的recordedStream)。但是,WasapiLoobpackCapture 设置的默认比特率不符合我的需要。

我想要一个 320KBPS 的比特率,我尝试使用 WaveFormatConversionStream 类以编程方式转换录制的文件,但我无法让它工作。

 WaveFormat targetFormat = WaveFormat.CreateCustomFormat(waveIn.WaveFormat.Encoding,
                                                                waveIn.WaveFormat.SampleRate, //SampleRate
                                                               waveIn.WaveFormat.Channels,     //Channels
                                                              320000,    //Average Bytes per Second
                                                               waveIn.WaveFormat.BlockAlign,     //Block Align
                                                                waveIn.WaveFormat.BitsPerSample);    //Bits per Sample   


        using (WaveStream inputStream = new RawSourceWaveStream(recordedStream, waveIn.WaveFormat))
        {
            try
            {
                using (var converter = new WaveFormatConversionStream(targetFormat, inputStream))
                {
                    // ...
                }
            }
            catch (Exception)
            {
                throw;
            }

            recordedStream.Dispose();
        }

我总是收到“AcmNotPossible 调用 acmStreamOpen”转换异常。如您所见,我使用与录制的 WAV 文件完全相同的格式(扩展编码、44100 等),除了目标波形中的比特率较低。

从 MemoryStream 中包含的 Wav 文件进行比特率转换的正确代码是什么?我的目标是获得一个 320KBPS 的文件。

4

1 回答 1

1

对于给定的采样率、位深度和通道数,PCM 音频始终具有相同的比特率(通过将这三个值相乘计算得出)。如果你想降低比特率,你必须改变这三个之一(降低采样率可能是最好的选择,除非你可以从立体声转到单声道)。

确实,您应该考虑编码为 MP3、WMA 或 AAC 等格式,这样您就可以选择自己喜欢的比特率。

于 2013-05-23T22:42:10.157 回答