如何在音频(.wav或.mp3)文件中获得每秒或每秒帧数(或样本数)?

时间:2017-12-18 09:47:06

标签: python numpy audio

我一直在观察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还是别的。

1 个答案:

答案 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

有关详细信息,请参阅这些讨论中的答案。

  1. sound.stackexchange
  2. theDontOvelookCommentsSection
  3. this one too