3

この関数を実行すると、「NoDriver calling acmFormatSuggest」という例外が発生します。

private static WaveChannel32 OpenMp3Stream(string fileName)
    {
        WaveChannel32 inputStream;
        WaveStream mp3Reader = new Mp3FileReader(fileName);
        WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);
        WaveStream blockAlignedStream = new BlockAlignReductionStream(pcmStream);
        inputStream = new WaveChannel32(blockAlignedStream);
        return inputStream;
    }

この行で:

WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);

NAudio.dll のプラットフォームを (x86 から x64 に、またはその逆に) 変更しようとしましたが、役に立ちませんでした。

MemoryStream からMP3ファイルを再生する別の方法はありますか、またはこのエラーを修正するにはどうすればよいですか?

4

3 に答える 3

2

このコードは、システムに存在するMP3をデコードできるACMコーデックに依存しています。どのOSを使用していますか?また、ACMコーデックは通常32ビットであるため、x64で実行すると、使用可能なコーデックがないことを意味します。

NAudioは、代わりにDMO MP3デコーダーを使用する可能性も提供します。これは、XPでは使用できませんが、ほとんどの新しいバージョンのWindowsに存在するようです。

最後に、MP3FileReaderにPCM変換が組み込まれている最新のNAudioソースコードを使用することをお勧めします。つまり、Readを呼び出してPCMを取り出すことができます。

于 2011-03-30T09:47:45.337 に答える
0

x86 用の NAudioDemo をコンパイルし、利用可能な ACM コーデックのリストを確認します。私の知る限り、リストに表示されていない場合、NAudio は Fraunhofer プロフェッショナル ACM コーデックを使用しています。以前に LAME ACM をインストールしようとしましたが、効果がありませんでした。fraunhofer コーデックが必要でした。

また、x64 バージョンの Windows では、ACM レジストリ キーが

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Drivers32]

それよりも

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32]

Mark の優れた NAudioDemo ツールを使用して、ACM がシステムに正しく登録されていることを確認できます。

于 2012-04-07T05:31:00.517 に答える
-1

このスレッドには、あなたに役立ついくつかの解決策が含まれています: C# を使用してストリームからオーディオを再生する

于 2011-03-25T14:00:36.147 に答える