forked from auracaster/pyalsaaudio
Add echo (seed for loopback.py)
This commit is contained in:
40
echo.py
Normal file
40
echo.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/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()
|
||||||
Reference in New Issue
Block a user