gpt4 book ai didi

python - 获取 .wav 文件长度或持续时间

转载 作者:IT老高 更新时间:2023-10-28 22:20:13 25 4
gpt4 key购买 nike

我正在寻找一种在 python 中找出音频文件 (.wav) 持续时间的方法。到目前为止,我查看了 python wave 库、mutagenpymediapymad 我无法获得wav 文件的持续时间。 Pymad 给了我持续时间,但不一致。

提前致谢。

最佳答案

持续时间等于帧数除以帧率(每秒帧数):

import wave
import contextlib
fname = '/tmp/test.wav'
with contextlib.closing(wave.open(fname,'r')) as f:
frames = f.getnframes()
rate = f.getframerate()
duration = frames / float(rate)
print(duration)

关于@edwards 的评论,这里有一些代码可以生成一个 2 channel 的波形文件:

import math
import wave
import struct
FILENAME = "/tmp/test.wav"
freq = 440.0
data_size = 40000
frate = 1000.0
amp = 64000.0
nchannels = 2
sampwidth = 2
framerate = int(frate)
nframes = data_size
comptype = "NONE"
compname = "not compressed"
data = [(math.sin(2 * math.pi * freq * (x / frate)),
math.cos(2 * math.pi * freq * (x / frate))) for x in range(data_size)]
try:
wav_file = wave.open(FILENAME, 'w')
wav_file.setparams(
(nchannels, sampwidth, framerate, nframes, comptype, compname))
for values in data:
for v in values:
wav_file.writeframes(struct.pack('h', int(v * amp / 2)))
finally:
wav_file.close()

如果您在音频播放器中播放生成的文件,您会发现持续时间为 40 秒。如果您运行上面的代码,它还会计算持续时间为 40 秒。所以我相信帧数不受 channel 数的影响,上面的公式是正确的。

关于python - 获取 .wav 文件长度或持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com