如何在Python中在一个USB设备上播放音频,同时在另一个设备上录制音频?

2024-06-28 15:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个程序,在Focusrite Scarlett 6i6上播放音频,同时在Picoscope 2205AMSO上记录另一个波形。要在Focusrite上播放音频,我使用sounddevice库:

sounddevice.play(noise, blocking=True)

要记录其他波形,我使用picoscope示波器库:

ps.runBlock()
ps.waitReady()
dataA = ps.getDataV('A', nSamples, returnOverflow=False)

但是,这两条语句不会同时运行,因为它们正在阻塞。如果我从sounddevice.play函数调用中删除“blocking=True”参数,那么它将永远不会播放音频。有没有一种方法可以让我既录制又播放而不被阻挡


Tags: 程序trueplay记录blocking音频ps示波器
1条回答
网友
1楼 · 发布于 2024-06-28 15:18:46

通过使用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))

相关问题 更多 >