3

カスタム コーデックを使用して録音された WAV ファイルがあります。コーデックはマシンにインストールされており、WAV ファイルは Windows Media Player を使用してマシンで正常に再生されます。NAudio ルーチンを使用して、C# コードを介して WAV ファイルを再生しようとしています。カスタム形式の値は奇妙に見えますが、WAV ファイルのヘッダーを分析して入念にチェックしました。ファイルを再生するために私が思いついた最高の C# コードを次に示します。

WaveFormat wfOKI = WaveFormat.CreateCustomFormat(WaveFormatEncoding.DialogicOkiAdpcm, 8000, 1, 3000, 48, 3);
WaveStream wsRaw = new WaveFileReader(txtFileName.Text);
wsRaw = WaveFormatConversionStream.CreatePcmStream(wsRaw);    // Line A
wsRaw = new BlockAlignReductionStream(wsRaw);                 // Line B
WaveStream wsOKI = new RawSourceWaveStream(wsRaw, wfOKI);

WaveOut woCall = new WaveOut();
woCall.Init(wsOKI);    // <-- This line gives an error.
woCall.Play();

while (woCall.PlaybackState == PlaybackState.Playing)
{
    System.Threading.Thread.Sleep(300);
}

Init() により、次のエラーが発生します: タイプ 'NAudio.MmException' の未処理の例外が NAudio.dll で発生しました。追加情報: WaveBadFormat 呼び出し waveOutOpen。

コードは、カスタム コーデックで WAV を再生するための正しい戦略ですか? A行とB行のコメントアウト/インの4つの組み合わせすべてを試しました(エラーメッセージに違いはありません)。

Windows 7 64 ビット、Visual Studio 2010 プロフェッショナル (プロジェクトは x86 に設定)、および NAudio のバージョン 1.6 を使用しています。私は NAudio を初めて使用しますが、「標準」の WAV (つまり、カスタム コーデックを使用しないファイル) を再生する行を数行取得しました。

4

1 に答える 1

3

WAV ファイルを持っている場合は、RawSourceWaveStream. 変換されたストリームを直接再生できます。

var wsRaw = new WaveFileReader(txtFileName.Text);
wsRaw = WaveFormatConversionStream.CreatePcmStream(wsRaw);
WaveOut woCall = new WaveOut();
woCall.Init(wsRaw);
woCall.Play();

また、WaveOut を使用している場合は、thread.sleep を呼び出して終了を待つべきではありません。GUI を備えたアプリケーションからこれを使用していない場合は、代わりに WaveOutEvent を試してください。

于 2012-10-31T12:31:17.610 に答える