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

问题描述 投票:0回答:1

我一直在观察scipy.io.wavfile下的音频文件

它具有44100 per sec or hz的帧率和总帧数是9745238,音频的持续时间是文件属性的220 secs但它应该是220.9804535147392并且有2通道。

在阅读文件后,它按照预期返回了9745238 X 216bit signed int矩阵

其中1列是通道1数据,2列是各个9745238帧的通道2数据

所以我的问题是有没有强大的方法每秒或毫秒找到这些值(连续1,2通道,即每行或矩阵)?

任何猜测?

编辑1

我已经提到了一个非常直观的讨论here

而我想我所需要的只是比特率bitrate = sampleRate * bitDepth但我怎么能得到位深度是sample size / sample width或别的东西。

python numpy audio
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.