Генерация и тона с частотой x для продолжительности y и выполнения другого кода во время тона - PullRequest
0 голосов
/ 03 апреля 2019

На высоком уровне я пытаюсь достичь автоматизации записи данных для анализа БПФ.Прямо сейчас я генерирую постоянный тон, используя генератор тона, а затем записываю выходные данные моей системы.Когда запись закончена, тон останавливается.Повторите это для всей частотной области.После этого все данные обрабатываются с помощью различных этапов анализа (например, БПФ).Все это сделано в Python3

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

Что мне для этого нужночто-то, чтобы генерировать тон частоты х для продолжительности у.Когда тональный сигнал включен, мне нужно продолжить выполнение кода для записи.

В своих поисках до сих пор я нашел winsound.Однако winsound.beep не работает с асинхронной опцией winsound, и я бы хотел избежать работы с записанными сигналами.Прямо сейчас у меня нет идей.Кто-нибудь может мне помочь?

Пример кода:

import winsound
winsound.Beep(500,1000)
print('this is not simultaneously printed with the sound playing')

1 Ответ

0 голосов
/ 08 апреля 2019

@ furas Спасибо за отзыв, с вашим предложением использовать многопоточность. Мне удалось проверить работоспособность концепции.Я предоставляю здесь обратную связь и мой основной код на случай, если кто-нибудь еще столкнется с этим вопросом.импорт потоков импорт время импорта журнал импорта winsound

logging.basicConfig(level=logging.DEBUG,
                    format='(%(threadName)-10s) %(message)s',
                    )

def makeTone(freq,dur):
    logging.debug('Starting Sound with f=%sHz for t=%ss',freq,dur)
    winsound.Beep(freq,dur)

    logging.debug('Sound stopped')

def recorder():
    logging.debug('Startrecording')
    time.sleep(3)
    logging.debug('Stoprecording')

frequency = 500 #Hz
duration = 5000 #ms
makeTone = threading.Thread(name='makeTone', target=makeTone,args=(frequency, duration))
recorder = threading.Thread(name='recorder', target=recorder)

makeTone.start()
recorder.start()
...