在python中实时改变正弦波的频率

时间:2017-04-15 12:19:53

标签: python audio signal-processing

我在旅途中有一个侧面项目,涉及实时改变音频信号的音调。音调是用正弦波产生的,我的问题是音调随着它的改变而跳跃。

如果您运行此代码,您将在开始更改时听到音调跳跃,并在达到目标频率(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()

我完全理解正弦波需要相移以阻止它在更新时滑动。

感谢。

0 个答案:

没有答案