需要有关十六进制编辑器和音频文件的帮助。我无法确定公式以获取.wav文件中的样本数。
我下载了StripWav,它告诉我.waves中的样本数量,但仍无法弄清楚公式。
请你下载这两个.wavs,在十六进制编辑器中打开它们,并告诉我获取样本数量的公式。
如果你这样对我这么好,请告诉我每个.wav的样本数量,这样我就能确保公式正确。
http://sinewavemultimedia.com/1wav.wav http://sinewavemultimedia.com/2wav.wav
这是一个问题,我有两个程序,
一个读取wav数据,另一个显示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
/ * ** * ** * 更新的 * ** * ** * ** / 还有一件事我用2个文件进行了计算 这个是正确的
92,296 bytes and num samples is 23,063`
但是另外一个没有正确出来它超过2兆我刚刚减去了44个字节我在这里做错了吗?这是文件大小
2,473,696 bytes
但正确的numsamples是
617,400
答案 0 :(得分:1)
确定WAV文件中的样本数没有简单的公式。所谓的“规范”WAV文件包含一个44字节的标题,后跟实际的样本数据。因此,如果您知道该文件每个样本使用2个字节,则样本数等于文件大小(以字节为单位)减去44(对于标题),然后除以2(因为每个字节有2个字节)样品)。
不幸的是,并非所有的WAV文件都像这样“规范”。 WAV文件使用RIFF格式,因此解析WAV文件的正确方法是搜索文件并找到各种块。
以下是一个示例(不确定您需要使用哪种语言):
答案 1 :(得分:1)
您必须读取fmt
标头以确定每个样本的通道数和位数,然后读取data
块的大小以确定音频中有多少字节数据。然后:
NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)
答案 2 :(得分:0)
WAVE
format chunk
(fmt
)每个样本框都有&#39;字节&#39;指定为wBlockAlign
。
所以:framesTotal = data.ck_size / fmt.wBlockAlign;
和samplesTotal = framesTotal * wChannels;
因此,samplesTotal===FramesTotal IIF wChannels === 1
!!
请注意上述答案如何优雅地避免解释关键方程式规范(以及基于它们的答案)是错误的: 考虑flor例子,每秒2通道12比特波 该规范解释了我们将每个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 +------+------+------+------+------+------+------+------+-----
那么.. 2ch 12bps波的样本帧(BlockAlign
)有多少字节符合规范?
&LT;讽刺&GT; CEIL(wChannels * bps / 8)
= 3个字节..&lt; / sarcasm&gt;
显然,正确的等式是:wBlockAlign=wChannels*CEIL(bps/8)