在持续时间y内产生频率为x的音调,并在音调期间保持执行其他代码

时间:2019-04-03 19:46:22

标签: python multithreading automation fft

总体而言,我正在尝试实现的是FFT分析的数据记录自动化。现在,我正在使用音频发生器生成恒定的音频,然后记录系统的输出。录制完成后,声音会停止。对整个频域重复此操作。之后,将通过各种分析步骤(例如FFT)处理所有数据。所有这些都是在Python3中完成的

在此过程中,我一直试图使无聊的东西自动化,我想进行手动频率扫描。

我需要的是在持续时间y内产生频率x的音调。启用提示音后,我需要执行代码才能继续进行录音。

到目前为止,在搜索中我发现了winsound。但是,winsound.beep不能与winsound的异步选项一起使用,我想避免使用记录的信号。现在我没主意了。有没有人可以帮助我?

示例代码:

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

1 个答案:

答案 0 :(得分:0)

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