Как воспроизвести звук на одном устройстве USB и одновременно записывать звук на другом в формате Python? - PullRequest
0 голосов
/ 06 февраля 2020

Я пишу программу на Python для воспроизведения звука на Focusrite Scarlett 6i6 при одновременной записи другого сигнала на Picoscope 2205AMSO. Для воспроизведения звука на Focusrite я использую библиотеку sounddevice:

sounddevice.play(noise, blocking=True)

Для записи другого сигнала я использую библиотеку пикоскопа:

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

Однако эти два утверждения не будет работать одновременно, потому что они блокируют. Если я уберу аргумент blocking = True из вызова функции sounddevice.play, он никогда не будет воспроизводить звук. Есть ли способ, как я могу записывать и играть без блокировки?

1 Ответ

0 голосов
/ 07 февраля 2020

Мне удалось запустить обе функции одновременно с помощью библиотеки 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...