Повторяйте цикл, пока не изменится вход функции - PullRequest
0 голосов
/ 10 мая 2019

У меня есть фрагмент кода Python, который генерирует непрерывный поток значений. Мне нужно, чтобы эти значения были переведены в звуковую обратную связь в виде зуммера, продолжительность паузы между звуками которого связана с потоком значений.

У меня есть еще один фрагмент кода Python, который генерирует непрерывный звуковой сигнал с определенной продолжительностью паузы (см. Ниже).

Как я могу повторить этот фрагмент кода (то есть повторить один и тот же звуковой сигнал с той же продолжительностью паузы), пока значение паузы ввода не изменится, то есть до тех пор, пока я снова не вызову функцию с новым значением для «паузы»?

РЕДАКТИРОВАТЬ - после предложения комментатора я обновил код, чтобы поместить его в класс. Как сделать этот класс отзывчивым на новый ввод? Я хотел бы получить некоторую помощь, так как мне не очень удобно на занятиях.

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()

Я хочу, чтобы гудок повторялся до тех пор, пока функция снова не будет вызвана с новым и другим значением для «паузы».

Теперь он повторяется бесконечно.

1 Ответ

0 голосов
/ 10 мая 2019

Ленивый путь будет глобальной переменной, но это будет плохой путь. Лучшим способом было бы поместить бипер в класс с переменной, которая сохраняет значение для паузы во время инициализации, а затем проверить значение бипера во время его вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...