我们的应用需要知道它加载的音频文件的样本数。我们使用的库可以可靠地确定采样率,但不能确定样本数。我们是否可以从文件大小和采样率计算样本数量?
答案 0 :(得分:5)
什么标记说。不,通常你需要解释标题。但是,如果每个样本的格式,通道数和位数是已知的,并且对于所有文件都相同,理论上可以从文件大小计算它。
WAV是一种简单的格式,不幸的是,多年来大小硬件和软件开发人员的格式出现了许多奇怪的变化。如果文件来自现代主流波形编辑器,通常可以指望格式为犹太格式。因此,如果通过从WaveLab或类似方法导出样本来标准化样本,则可以保存为头文件解释器编写(小)代码。
最容易阅读的.wav格式说明是here。 StripWav是一个标准化样本的小程序;还有一个更强大的命令行工具:sox。 Sox支持批处理作业,因此它比使用波形编辑器更好 - 假设.wav文件集是给定的而不是“动态”。
所以:如果你可以通过sox批处理作业一劳永逸地标准化它们,那么它应该是可能的。我已经多次使用这种格式描述和Sox效果很好,祝你好运:)
答案 1 :(得分:4)
假设WAV文件是PCM,您可以使用数据块的大小来计算它。每个样本的字节数就是每个样本的比特数除以8。每个样本的位数将出现在WAVEFORMAT结构中。这可用于准确获取样本数。
答案 2 :(得分:1)
在PCM wav格式中,标头包含称为blockalign的信息,表示单个样本占用的字节数。
通常,如果您有一个没有附加元数据的标准RIFF PCM wav文件(通常情况下)。 blockalign是偏移量为32的2字节整数(从wav文件开始的第33到第34个字节)。并且名为datasize的数据的文件大小是偏移量为40的4字节整数(第41到44个字节构成了wav文件的开头)。
现在datasize / blockalign就是你想要的。
<强> PS 强>
如果你有一个更复杂的wav格式,如果它的RIFF,格式信息和数据被放入不同的&#34;块&#34; (以及你可能不需要的其他一些块),以及上面讨论的偏移可能不正确,那么你应该看看块。在您的情况下,您需要找到fmt和数据块。
每个块以一个4字节的ASCII编码数据开始,称为FOURCC,&#39; fmt&#39;表示该块包含格式信息和&#39;数据&#39;表示数据块。在FOURCC之后是一个4字节整数,告诉后面的块的大小(以字节为单位)(FOURCC和这4个字节不计数)。
参考文献: