我正在寻找一种方法来找出 python 中音频文件(.wav)的持续时间。到目前为止我已经了解了 pythonwave
图书馆,mutagen
, pymedia
, pymad
我无法获取 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 通道波形文件的代码:
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 秒。所以我相信帧数不受通道数的影响,并且上面的公式是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)