【发布时间】:2016-02-25 22:16:41
【问题描述】:
我正在做一个项目,我想使用 .wav 文件的数据来驱动动画。我面临的问题主要是由于动画是 25fps 并且我在 .wav 文件中每秒有 44100 个样本,所以我分解为 44100/25 个样本。使用幅度很好,我创建了一个初始测试来尝试它并且它有效。这是代码
import wave
import struct
wav = wave.open('test.wav', 'rb')
rate = 44100
nframes = wav.getnframes()
data = wav.readframes(-1)
wav.close()
data_c = [data[offset::2] for offset in range(2)]
ch1 = struct.unpack('%ih' % nframes, data_c[0])
ch2 = struct.unpack('%ih' % nframes, data_c[1])
kf = []
for i in range(0, len(ch2), 44100/25):
cur1 = 0
cur2 = 0
for j in range(i, i+44100/25):
cur1+=ch2[j]
cur2+=ch1[j]
cur = (cur1+cur2) / 44100. / 25. / 2.
kf.append(cur)
min_v = min(kf)
max_v = max(kf)
if abs(max_v) > abs(min_v):
kf = [float(i)/max_v for i in kf]
else:
kf = [float(i)/min_v for i in kf]
现在我想获取每个单独关键帧的频谱,就像获取幅度一样,但我正在努力想办法做到这一点。我可以使用 FFT 获得整个文件的频谱,但这不是我想要的,因为理想情况下我希望对象根据不同的频率进行不同的运动。
【问题讨论】:
标签: python animation fft wave spectrum