.wavファイルとhexエディターでサンプルの数を見つける
-
28-10-2019 - |
質問
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ファイルを解析する適切な方法は、ファイルを検索してさまざまなチャンクを見つけることです。
これがサンプルです(これを行う必要がある言語はわかりません):
他のヒント
あなたは読む必要があります 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)