我一直在观察 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
.有关更多信息,您可以引用这些讨论中的答案。
关于python - 如何在音频(.wav 或 .mp3)文件中获取每秒或 ms 的帧数(或样本数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865690/