【发布时间】:2015-08-22 15:38:21
【问题描述】:
每次发送或接收数据包时,我都会使用 scapy 和 pyaudio 播放一小段正弦波,声音的频率指示发件人地址。
sniff(prn = makeSound)
在此代码中,makeSound 函数获取一个数据包,对其进行剖析,并根据发送者地址播放声音。
据我所知,pyaudio 有阻塞或回调模式。在这两种模式下,我都不能同时播放多个声音。
我需要一种方法来开始一个音符,并让它立即开始混合到音频流中,不管有多少正弦波已经在播放。
【问题讨论】:
-
你不能在不同的线程中触发它们吗?
-
对于这样的事情,手动线程似乎有点矫枉过正。是否有一些示例代码显示我将如何做到这一点?
-
如果线程看起来工作量太大,那么 Timer() 怎么样
-
糟糕!我认为这是 wxpython 特有的!
-
我最终做的是使用
os.system('play --no-show-progress --null --channels 1 synth %s sine %f &' % ( 0.1, srcHz))。最后的“&”允许外壳是非阻塞的。这当然非常笨拙,但它确实有效。根据 Rolf of Saxony 的建议,我可能会将其升级为 in-python 线程。