Files
sw_pyalsaaudio/echo.py
2024-02-16 14:14:37 +01:00

40 lines
913 B
Python

#!/usr/bin/env python3
# -*- mode: python; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-
import alsaaudio
import select
def echo(inpcm, outpcm):
q = list()
# setup the synchronous event loop
# See https://docs.python.org/3/library/select.html#poll-objects for background
reactor = select.poll()
infd, inmask = inpcm.polldecriptors()
outfd, outmask = outpcm.polldescriptors()
write_started = False
def write():
data = q.pop()
written = outpcm.write(data)
if written < len(data):
q.insert(0, data[written:])
reactor.register(infd, inmask)
reactor.register(outfd, outmask)
while True:
events = reactor.poll()
for fd, event in events:
if event == select.POLLIN and fd == infd:
data = inpcm.read()
q.append(data)
if not write_started:
write()
write_started = True
elif event == select.POLLOUT and fd == outfd:
if not q:
return
write()