質問

HEXエディターとオーディオファイルのサポートが必要です。.WAVファイルにサンプルの数を取得するための式を把握するのに苦労しています。

.wavesのサンプルの数を教えてくれるStripwavをダウンロードしましたが、まだ式を理解することはできません。

これら2つの.Wavsをダウンロードして、16進エディタで開いて、サンプルの数を取得するための式を教えてください。

あなたが私のためにこれを親切にしているなら、それぞれのサンプルの数を教えてください。

http://sinewavemultimedia.com/1wav.wavhttp://sinewavemultimedia.com/2wav.wav

ここに私が2つのプログラムを持っている問題があります、

1つはWAVデータを読み取り、もう1つはここにnumsamplesがデータであることを示しています

RIFF 'WAVE' (wave file)
        <fmt > (format description)
                PCM format
                2 channel
                44100 frames per sec
                176400 bytes per sec
                4 bytes per frame
                16 bits per sample
        <data> (waveform data - 92252 bytes)

しかし、他のプログラムは、Numsamplesがそうであると言います

23,063 samples

/*******アップデート*********/もう1つ、2つのファイルで計算をしましたこれは正しいです

92,296 bytes and num samples is 23,063` 

しかし、このもう1つは正しく出ていないのは2メグを超えています。私は44バイトを制したばかりで、ここで間違っていますか?これがファイルサイズです

2,473,696 bytes 

しかし、正しいnumsamplesはそうです

 617,400
役に立ちましたか?

解決

WAVファイル内のサンプルの数を決定するための単純な式はありません。いわゆる「標準的な」WAVファイルは、44バイトのヘッダーに続いて実際のサンプルデータが続きます。したがって、ファイルがサンプルごとに2バイトを使用していることがわかっている場合、サンプルの数はバイトのファイルのサイズ、マイナス44(ヘッダー用)に等しく、次に2で割っています(あたり2バイトあたり2バイトがあるためサンプル)。

残念ながら、すべてのWAVファイルがこのような「標準的」であるわけではありません。 WAVファイルはRIFF形式を使用するため、WAVファイルを解析する適切な方法は、ファイルを検索してさまざまなチャンクを見つけることです。

これがサンプルです(これを行う必要がある言語はわかりません):

http://msdn.microsoft.com/en-us/library/MS712835

他のヒント

ウェーブ形式

あなたは読む必要があります fmt サンプルあたりのチャネル数とビット数を決定するヘッダー、次にのサイズを読み取ります data チャンクオーディオにはデータの数のデータがいくつあるかを判断します。それで:

NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)

a WAVE's format chunk (fmt)として指定された「サンプルフレームあたりのバイト」があります wBlockAlign.
そう: framesTotal = data.ck_size / fmt.wBlockAlign;
samplesTotal = framesTotal * wChannels;
したがって、 samplesTotal===FramesTotal IIF wChannels === 1!!

上記の回答がどのようにエレガントに回避したかに注意してください。キー方程式(およびそれらに基づいた回答)が間違っていることを説明するために説明します。
仕様は、各12bpsサンプルを単語に入れることを説明しています。

  note: t=point in time, chan = channel
+---------------------------+---------------------------+-----
|         frame 1           |         frame 2           |  etc
+-------------+-------------+-------------+-------------+-----
| chan 1 @ t1 | chan 2 @ t1 | chan 1 @ t2 | chan 2 @ t2 |  etc
+------+------+------+------+------+------+------+------+-----
| byte | byte | byte | byte | byte | byte | byte | byte |  etc
+------+------+------+------+------+------+------+------+-----

だから..サンプルフレームはいくつのバイトを持っていますか(BlockAlign)2倍の12bpsの波の場合、仕様に応じて波がありますか?
u003Csarcasm> CEIL(wChannels * bps / 8) = 3バイト..u003C/sarcasm>
明らかに正しい方程式は次のとおりです。 wBlockAlign=wChannels*CEIL(bps/8)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top