2

NAudio を使用して、可能な限り最高のコーデックでオーディオ WAV を圧縮する必要があります。WaveFormatConversionStream を使用し
"AcmNotPossible calling acmStreamOpen" ていますが、常にこのエラーが発生します。このエラーに関する多くの回答を読みましたが、解決策が見つかりません。

これが私のコードです。どこが間違っていますか?

すべてのヘルプは素晴らしく、歓迎されます:)

private void InvokeOnNewAudioData(byte[] data, AudioFormat audioFormat)
{
    WaveFormat waveFormat = new WaveFormat(audioFormat.NumberSamplesPerSec, audioFormat.NumberBitsPerSample, audioFormat.NumberChannels);

    WaveFormat targetFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Vorbis1,
                                                            22000, //SampleRate
                                                            audioFormat.NumberChannels,     //Channels
                                                            48000,    //Average Bytes per Second
                                                            2,     //Block Align
                                                            16);    //Bits per Sample   


    using (MemoryStream dataStream = new MemoryStream(data))
    {
        using (WaveStream inputStream = new RawSourceWaveStream(dataStream, waveFormat))
        {
            try
            {
                using (WaveFormatConversionStream converter = new WaveFormatConversionStream(targetFormat, inputStream))
                {

                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
4

1 に答える 1

2

これは、要求された変換を実行できる ACM コーデックがシステムにないことを意味します。NAudio に付属の NAudioDemo アプリを使用して、システムにインストールされているすべての ACM コーデックと、サポートされている入力および出力形式を調べることができます。Windows には確かに Vorbis ACM コーデックが付属していないため、コードが機能しない可能性があります。Vorbis ACM コーデックをインストールした場合でも、WaveFormat を正確に取得する必要があります。そうしないと、ACM not possible エラーが発生します。

いずれにせよ、 NVorbisに付属している NAudio サポートを使用することをお勧めします。

于 2012-12-19T15:52:54.660 に答える