音频文件中的样本如何对齐?
Posted
技术标签:
【中文标题】音频文件中的样本如何对齐?【英文标题】:How samples are aligned in the audio file? 【发布时间】:2020-11-26 15:36:23 【问题描述】:我试图更好地了解音频文件中的样本是如何对齐的。
假设我们有一个带有sampling rate = 3
的2s
音频文件。
我认为有三种可能的方法来对齐这些样本。看看下图,你能告诉我哪个是正确的吗?
另外,这是所有音频文件的标准还是不同格式有不同的规则?
干杯!
【问题讨论】:
【参考方案1】:音频中的采样率通常会告诉您一秒钟内有多少个样本,一个称为赫兹的单位。严格来说,正确答案是 (1),因为您在一秒钟内有 3 个样本。假设没有延迟,PCM 和其他格式规定音频从0
开始。下一个“周期”(下一秒)也从零开始,原理与时钟相同。
要获得音频的总长度(评论中的以下问题),您只需使用number of samples / rate
。使用 soxi 的 30 年代 WAV 示例,这是社区中用于声音处理的规范工具之一:
Input File : 'book_00396_chp_0024_reader_11416_5_door_Freesound_validated_380721_0-door_Freesound_validated_381380_0-9IfN8dUgGaQ_snr10_fileid_1138.wav'
Channels : 1
Sample Rate : 16000
Precision : 16-bit
Duration : 00:00:30.00 = 480000 samples ~ 2250 CDDA sectors
File Size : 960k
Bit Rate : 256k
Sample Encoding: 16-bit Signed Integer PCM
480000 samples / (16000 samples / seconds) = 30 seconds
完全正确。引用手册,持续时间是“相当于样本数除以采样率。”
【讨论】:
谢谢卢卡斯。这确实有道理,但如果 #1 是正确的,那么我该如何测量音频的持续时间?是number_of_samples / rate
吗?如果是这样,这意味着最后一个样本不在音频的确切末尾。它是否正确?那么计算样本时间的公式是什么?这是正确的吗:time = sample_idx / (rate + 1)
(样本从 0 开始索引)。
@msmialko 公式number_of_samples / rate
是正确的,单位为samples / (samples / seconds) = seconds
,假设速率为Hz
。根据定义,最后一个样本是音频的结尾 - 为什么不是?
如果持续时间的公式如您所说,那么示例#3不是样本的正确对齐方式吗?在示例 #1 中,最后一个样本实际上在 2 秒标记之前。总共有 6 个样本,以 3Hz 频率记录。这不应该意味着最后一个样本正好是 2s 吗?
2s
标记是新周期的开始,同样0s
是开始。如果在示例 #1 中有一个位于 2s
的样本,则意味着 who 样本的长度超过 2 秒。三者的正式长度是相同的。请记住,在此推理中,您尝试将连续测量框架(时间以秒为单位)应用于离散测量,这可能会导致解释问题(由于不连续性)。
我想考虑每个样本的“持续时间”是准确的,可以定义为1 / frequency
。在我们的示例中,它是1/3 sec
,它是样本之间的时间。因此总的音频时长可以定义为last_sample_timestamp + sample_duration
。我的直觉是它是正确的,因为在最后一个样本之后波被内插到0
,并且也需要时间。以上是关于音频文件中的样本如何对齐?的主要内容,如果未能解决你的问题,请参考以下文章