我有一段Python代码可以生成连续的值流。我需要将这些值转换为蜂鸣器形式的音频反馈,其蜂鸣声之间的暂停时间与值流有关。
我还有另一段python代码,该代码会生成具有一定暂停时间的连续蜂鸣声(见下文)。
如何重复这段代码(即以相同的暂停持续时间重复相同的蜂鸣声),直到输入的暂停值发生变化,即直到我再次用“ pause”的新值调用该函数?
编辑-在评论员的建议下,我更新了代码以将其放入类中。如何使此类响应新输入?我希望获得一些帮助,因为我对上课不太满意。
import pyaudio
import numpy as np
import time
from threading import Thread
f = 440.0
duration = 0.25
volume=0.5
fs=44100
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=fs,
output=True)
class beeper(Thread):
def __init__(self, pause):
self.pause = pause
def beep(self, pause2):
samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)
print('1')
while True:
if pause2 == self.pause:
stream.write(volume*samples)
time.sleep(self.pause)
print('2')
else:
stream.write(volume*samples)
time.sleep(pause2)
self.pause = pause2
print('3')
def stop(self):
stream.stop_stream()
stream.close()
p.terminate()
我希望重复发出哔哔声,直到再次调用该函数,并为“ pause”赋予一个新的不同值。
现在它会无限期地重复。
答案 0 :(得分:0)
惰性方法将是一个全局变量,但这将是一种不好的方法。更好的方法是将蜂鸣器放入一个带有变量的类中,该变量可以保存在初始化期间暂停的值,然后在调用它时检查蜂鸣器的值。