[英]How to get number of Frames(or Samples) per sec or ms in a audio (.wav or .mp3) file?
我一直在观察scipy.io.wavfile
下的音频文件
根据文件属性,其帧速44100 per sec or hz
,总帧数为9745238
,音频持续时间为220 secs
,但应为220.9804535147392
并具有2
通道。
读取文件后,它按预期返回了我9745238 X 2
的16bit signed int
矩阵
其中1列是通道1数据,而2列是相应的9745238帧的通道2数据
所以我的问题是,是否有任何鲁棒的方法每秒或毫秒找到这些值(连续1、2个通道,即每一行或矩阵)?
有什么猜想吗?
编辑1
我在这里提到了一个非常直观的讨论
我想我所需要的只是比特率 ,即bitrate = sampleRate * bitDepth
但是我如何获得比特深度是sample size / sample width
还是其他?
因此,我想要每秒的位数,经过研究后,我发现我需要每一位的速率 ,即bit rate ,当然位深就是每个样本的位数(这是常数)。
要了解这一点,如果我们使用wave
模块来打印文件的第一帧,我们会得到如下内容。
b'\x00\x00\x00\x00'
如您所见,它是一个16bit-unicoded
字符串,并使用numpy
将其转换为16bit signed int
。
像np.fromstring(wav.readframes(1), np.int16)
它会给您[0 0] ,即第一帧中每个通道的8位。
并且由于frameRate为44100
,因此每个向量的bitrate = frame_rate (44100) * bitDepth (16)
。 [0 0],然后将此值乘以通道数( 在我的情况下为2 )以得到有关位的答案。
编辑1
采样率和帧率是两个不同的东西,一个帧由采样数组成,而sample_width是每个采样的大小。
例如。 将音频_
作为示例表示,并具有3
通道, 4
帧,则它将以类似的方式表示。
[_ _ _] [_ _ _] [_ _ _] [_ _ _]
如果您使用scipy
库查看矩阵, scipy
使用_
而不是_
来表示其值将根据解码后的字符串,并用另一种方式表示该语句,我们可以说矩阵中的每个元素都是一个样本。
所以有在音频总12个样品,并且如果我们假设该歌曲的持续时间为, 1 sec
,则frame_rate
将是4hz
和sample_rate
将是12hz
。
有关更多信息,您可以参考这些讨论中的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.