我一直在观察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
我已经提到了一个非常直观的讨论here
而我想我所需要的只是比特率bitrate = sampleRate * bitDepth
但我怎么能得到位深度是sample size / sample width
或别的东西。
所以,我想要每秒的比特数,并且在做了一些研究之后我发现我需要每个比特的比率,即比特率,当然比特深度是每个样本的比特数(这是恒定的)。
要理解这一点,如果我们使用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
。
有关更多信息,请参阅这些讨论中的答案。