【问题标题】:How do I play audio on one USB device and record audio on another simultaneously in Python?如何在 Python 中在一个 USB 设备上播放音频并同时在另一个 USB 设备上录制音频?
【发布时间】:2020-05-22 21:49:04
【问题描述】:

我正在用 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”参数,那么它永远不会播放音频。有没有一种既可以录制又可以播放而不会阻塞的方法?

【问题讨论】:

  • 一点警告...我不确定您的用例是什么,但请记住,即使您确实设法启动,两台设备也不会随着时间的推移保持同步它们同时进行。

标签: python audio blocking python-sounddevice


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2021-11-14
    • 2012-03-22
    相关资源
    最近更新 更多