gpt4 book ai didi

python - 如何连续改变正弦声音的频率?

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:08 25 4
gpt4 key购买 nike

我正在使用 Pygame 在窗口中渲染 Sprite,我想播放正弦声音,其频率取决于该 Sprite 的 y 位置。我不希望信号相位不连续。实现这一目标的最佳方法是什么?

最佳答案

我想到了这个解决方案。将 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()

关于python - 如何连续改变正弦声音的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31384138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com