3

さらなる操作のために perl で WAV ファイルをデコードおよび再生しようとしています。形式に関する参考文献と興味深い q+a をいくつか見つけました。

オーディオ フレームには何が含まれますか? C++ での wav ファイルの読み取りエラー wav ファイル への音符の書き込み

「Cannonical WAVEファイルフォーマット」を知ったここに画像の説明を入力

しかし最後に、「標準」に従わない 2 つの異なる WAV ファイルをテストしています。Mplayer はデータの読み取りにまったく問題がなく、perl コードの回避策を見つけました。

sysread WAV, $riff, 12;
sysread WAV, $fmt,  24;

do{
    sysread WAV, $wtf, 2;

}while( unpack("A4",$wtf) ne "da" );
sysread WAV, $wtf, 2;

#94
sysread WAV, $data,  4;

それでも、それが実際にどのように機能するか、そして変数データが​​「サンプルあたりのビット数」フィールドと「データ」フィールドの間にあることは何ですか。

君たちありがとう!

(私はこのフォーラムにはまっています)

test2.wav

       v--------- riff --------------v--------- 
0000000 4952 4646 685e 0931 4157 4556 6d66 2074
        -------------- fmt --------------------
0000010 0028 0000 fffe 0006 bb80 0000 ca00 0008
        ---------v-----------------------------
0000020 000c 0010 0016 0010 060f 0000 0001 0000
        ---------------------------------------
0000030 0000 0010 0080 aa00 3800 719b 494c 5453
        ---------------------------------------
0000040 001a 0000 4e49 4f46 5349 5446 000e 0000
        ----------------------------------v----
0000050 614c 6676 3535 312e 2e39 3031 0034 6164
        ----v---------v
0000060 6174 6800 0931 0000 0000 0000 0000 0000
0000070 0000 0000 0000 0000 0000 0000 0000 0000

test.wav

       v--------- riff --------------v--------- 
0000000 4952 4646 7048 095b 4157 4556 6d66 2074
        -------------- fmt --------------------
0000010 0012 0000 0001 0002 ac44 0000 b110 0002
        ---------v-----------------------------
0000020 0004 0010 0000 494c 5453 001a 0000 4e49
        ---------------------------------------
0000030 4f46 5349 5446 000e 0000 614c 6676 3535
        -------------------v---------v---------v
0000040 312e 2e39 3031 0034 6164 6174 7000 095b       
0000050 0000 0000 0000 0000 0000 0000 0000 0000
4

1 に答える 1

3

AudioFormattest2.wavのフィールド0xfffeは、ヘッダーが であることを示しますWAVEFORMATEXTENSIBLE。これが発生した場合、ヘッダーの残りの部分を別の方法で解釈する必要があります。

AudioFormat   : 2
NumChannels   : 2
SampleRate    : 4
ByteRate      : 4
BlockAlign    : 2
BitsPerSample : 2
cbSize        : 2  - size of the rest of the chunk
ChannelMask   : 4
SubFormat     : 16 - GUID

詳細については、WAVEFORMATEXおよびのドキュメントを参照してください。WAVEFORMATEXTENSIBLE

于 2014-09-24T21:24:25.590 に答える