我正在用Python编写一个程序,以便在Focusrite Scarlett 6i6上播放音频,同时在Picoscope 2205AMSO上记录另一个波形。要在Focusrite上播放音频,我正在使用声音设备库:
sounddevice.play(noise, blocking=True)
要记录其他波形,我正在使用镜库:
ps.runBlock()
ps.waitReady()
dataA = ps.getDataV('A', nSamples, returnOverflow=False)
但是,由于这两个语句正在阻塞,因此它们不会同时运行。如果我从sounddevice.play函数调用中删除“ blocking = True”参数,则它将永远不会播放音频。有没有一种我可以同时录制和播放而不阻塞的方法?
答案 0 :(得分:0)
使用asyncio库,我可以使两个函数同时运行:
import asyncio
def record():
ps.runBlock()
ps.waitReady()
def play():
sounddevice.play(noise, blocking=True)
async def non_blocking(loop, executor):
await asyncio.wait(
fs={
loop.run_in_executor(executor, play),
loop.run_in_executor(executor, record),
},
return_when=asyncio.ALL_COMPLETED
)
loop = asyncio.get_event_loop()
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
loop.run_until_complete(non_blocking(loop, executor))