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

标签 python numpy audio

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

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

读取文件后它返回给我一个 9745238 X 2 16bit signed int 的矩阵正如预期的那样

其中 1 列是 channel 1 数据,2 列是相应 9745238 帧的 channel 2 数据

所以我的问题是有什么可靠的方法可以每秒或毫秒找到这些值(连续 1、2 个 channel ,即每一行或矩阵)?

有什么猜测吗?

编辑 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] 即第一帧中每个 channel 的 8 位。

由于 frameRate 是 44100 ,因此 bitrate = frame_rate (44100) * bitDepth (16)对于每个向量,例如。 [0 0],然后我们将这个值乘以 channel 数(在我的情况下为 2),以获得关于位的答案。

编辑 1

而采样率和帧率是两个不同的东西,一帧由样本数组成,sample_width 是每个样本的大小。

例如。考虑音频_作为示例表示并具有 3 channel ,4帧,那么它将被表示为这样的东西。
[_ _ _] [_ _ _] [_ _ _] [_ _ _]
如果您使用 scipy 查看矩阵然后库而不是 _将有一些数字,其值将根据解码的字符串,并且以另一种方式放置语句,我们可以说矩阵中的每个元素都是一个样本。

所以音频中总共有 12 个样本,如果我们假设歌曲的持续时间是,1 sec然后 frame_rate 将是 4hz sample_rate 将是 12hz .

有关更多信息,您可以引用这些讨论中的答案。
  • sound.stackexchange
  • theDontOvelookCommentsSection
  • this one too
  • 关于python - 如何在音频(.wav 或 .mp3)文件中获取每秒或 ms 的帧数(或样本数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865690/

    相关文章:

    java - 傻瓜式 TarsosDSP 音高分析

    Python删除文本行#1直到正则表达式

    python - Pandas read_hdf : how to get column names when using chunksize or iterator?

    python - pyaudio 改变调用回调函数的样本数

    python - 构造结构化数组时元组和列表有什么区别?

    python - 匹配两个二维数组的行并使用 numpy 获取行索引映射

    c# - 当线程被杀死时如何杀死播放循环?

    c# - 需要一个音频分析库来从音频文件创建实时反馈?

    python - GAE列表桶文件返回void

    python - 如何在python中递归复制目录并覆盖全部?