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 calling acmStreamOpen」変換例外が常に発生します。ご覧のとおり、ターゲットの波形でビットレートが低いことを除いて、録音された WAV ファイルとまったく同じ形式 (拡張エンコーディング、44100 など) を使用しています。

MemoryStream に含まれる Wav ファイルからビットレート変換を行う正しいコードは何ですか? 私の目標は、320KBPS のファイルを取得することです。

4

1 に答える 1

1

特定のサンプル レート、ビット深度、およびチャネル数の場合、PCM オーディオのビットレートは常に同じです (これら 3 つの値を掛け合わせて計算されます)。ビットレートを下げたい場合は、これら 3 つのうちの 1 つを変更する必要があります (ステレオからモノラルに変更できない場合は、サンプル レートを下げるのがおそらく最適なオプションです)。

実際には、MP3、WMA、AAC などの形式にエンコードして、好みのビットレートを選択できるようにすることを検討する必要があります。

于 2013-05-23T22:42:10.157 に答える