繁体   English   中英

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

[英]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 216bit 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将是4hzsample_rate将是12hz

有关更多信息,您可以参考这些讨论中的答案。

  1. 声音堆栈交换
  2. theDontOvelookComments部分
  3. 这个也是

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM