我在旅途中有一个侧面项目,涉及实时改变音频信号的音调。音调是用正弦波产生的,我的问题是音调随着它的改变而跳跃。
如果您运行此代码,您将在开始更改时听到音调跳跃,并在达到目标频率(500hz)时再次跳转。
#!/usr/bin/env python
# encoding: utf-8
import math
import wave
import array
import pyaudio
freq=450.0
data_size=20000
frate = 11025.0
amp = 8000.0
target_freq = freq
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(2), channels=2, rate=int(frate), output=True)
for x in range(data_size):
target_freq = 500 if x > 4000 else freq
if abs(target_freq - freq) <= 0.1:
delta = 0
elif target_freq < freq:
delta = -0.01
elif target_freq > freq:
delta = 0.01
freq = freq + delta if delta else target_freq
data = array.array('h')
v = int(math.sin(2*math.pi*(freq)*(x/frate))*amp/2)
data.append(v)
data.append(v)
stream.write(data.tostring())
stream.stop_stream()
stream.close()
p.terminate()
我完全理解正弦波需要相移以阻止它在更新时滑动。
感谢。