1

生のオーディオ データ ストリームをそのWAVEFORMATEXTENSIBLE構造体と共にキャプチャしました。 WAVEFORMATEXTENSIBLEは次の図に示されています。

WAVEFORMATEXTENSIBLE 構造体

wavファイルの基準に従って、rawビットをwavファイルに書き込んでみました。私がすることは:

  1. 「リフ」と書きます。

  2. DWORD を書き込みます。(ファイルサイズ - sizeof("RIFF") - sizeof(DWORD))。

=== WaveFormat チャンク ===

  1. 「WAVEfmt」と書く

  2. DWORD を書き込みます。(WAVEFORMATEXTENSIBLE 構造体のサイズ)

  3. WAVEFORMATEXTENSIBLE 構造体を記述します。

=== ファクトチャンク ===

  1. 「事実」を書く

  2. DWORD を書き込みます。( 4 )

  3. DWORD を書き込みます。(ストリーム内のサンプル数。 sizeof(rawdata)*8/wBitsPerSample である必要があります)。

=== データチャンク ===

  1. 「データ」と書く

  2. DWORD (生データのサイズ) を書き込む

  3. 生データを書き込みます。

上記の手順で wav ファイルを取得した後、wav ファイルをメディア プレーヤーで再生しました。音はありません。Audacity で再生すると歪んだ音が聞こえます。それが正しいオーディオであることがわかりますが、音はノイズで歪む。

生データはこちら

生成したwavファイルはこちら

同じ方法を使用してIEEE-floatデータをwavファイルに変換すると、問題なく動作するため、非常に混乱します。

4

2 に答える 2

0

私はこれを理解しました.IAudioRenderClientのgetbuffer releasebufferサイクルは、IAudioClientのinitializeメソッドに渡されたものと同じ形式の生データを入れているようです.

私の場合、IAudioClient の GetMixFormat は、initialize メソッドに渡される形式とは異なります。GetMixFormat は、デバイスがサポートする形式を取得すると思います。

IAudioClient は、初期化された形式から mixformat への変換を完了している必要があります。初期化メソッドをインターセプトし、フォーマットを取得すると、魅力的に機能します。

于 2012-12-13T13:20:49.117 に答える