重复循环直到功能输入更改

时间:2019-05-10 10:46:58

标签: python loops audio

我有一段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”赋予一个新的不同值。

现在它会无限期地重复。

1 个答案:

答案 0 :(得分:0)

惰性方法将是一个全局变量,但这将是一种不好的方法。更好的方法是将蜂鸣器放入一个带有变量的类中,该变量可以保存在初始化期间暂停的值,然后在调用它时检查蜂鸣器的值。