如何连续改变正弦声音的频率?
发布于 2021-01-29 16:47:55
我Pygame
用来在窗口中渲染一个Sprite,我想播放一个正弦声音,其频率取决于y
该Sprite的位置。我不希望信号相位不连续。实现此目标的最佳方法是什么?
关注者
0
被浏览
46
1 个回答
-
我想出了这个解决方案。更改
freq
为newfreq
,然后更改阶段,如下所示:newphase = 2*np.pi*t*(freq- newfreq)+phase
import pyaudio import numpy as np from time import time CHANNELS = 2 RATE = 44100 TT = time() freq = 100 newfreq = 100 phase = 0 def callback(in_data, frame_count, time_info, status): global TT,phase,freq,newfreq if newfreq != freq: phase = 2*np.pi*TT*(freq-newfreq)+phase freq=newfreq left = (np.sin(phase+2*np.pi*freq*(TT+np.arange(frame_count)/float(RATE)))) data = np.zeros((left.shape[0]*2,),np.float32) data[::2] = left data[1::2] = left TT+=frame_count/float(RATE) return (data, pyaudio.paContinue) p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paFloat32, channels=CHANNELS, rate=RATE, output=True, stream_callback=callback) stream.start_stream() start = time() try: while 1: now = time() if now-start>1/24.: newfreq=200+np.sin(2*np.pi*1/20.*now)*100 #update the frequency This will depend on y on the future print newfreq start=now finally: stream.stop_stream() stream.close() p.terminate()