我一直在观察scipy.io.wavfile
的帧速率为44100 per sec or hz
,总帧数为9745238
,音频的持续时间为220 secs
,但文件属性应为220.9804535147392
并且{ {1}}频道。
在阅读文件后,它按预期返回2
9745238 X 2
矩阵
其中1列是通道1数据,2列是各个9745238帧的通道2数据
所以我的问题是有没有强大的方法每秒或毫秒找到这些值(连续1,2通道,即每行或矩阵)?
任何猜测?
修改1
我提到了一个非常直观的讨论here
我猜我需要的是比特率,这是16bit signed int
但是我如何才能获得位深度是bitrate = sampleRate * bitDepth
还是别的。
答案 0 :(得分:0)
所以,我想要每秒的位数,经过一些研究后我发现我需要每位的速率,即比特率,当然位深度是每个样本的位数(不变)。
要理解这一点,如果我们使用wave
模块打印文件的第一帧,我们会得到类似的结果。
b'\x00\x00\x00\x00'
并且您可以看到它是16bit-unicoded
字符串,并在使用16bit signed int
将其转换为numpy
之后。
喜欢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
库来查看矩阵,那么将会有一些数字的值将根据解码的字符串而不是_
,并且以另一种方式放置语句我们可以说每个元素在矩阵中是一个样本。
因此音频中共有12个样本,如果我们假设歌曲的持续时间为1 sec
,则 frame_rate
将为4hz
, sample_rate
将为12hz
。
有关详细信息,请参阅这些讨论中的答案。