From bb336c157dce77413f42ea0bdfb6bdfde26ebb62 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Fri, 11 Jul 2014 10:39:24 +0300 Subject: [PATCH] use wave.py to play and record audio at test.sh --- test.sh | 20 +++++++++++++++----- wave.py | 28 ++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 7 deletions(-) mode change 100644 => 100755 wave.py diff --git a/test.sh b/test.sh index 660fb85..09f7f42 100755 --- a/test.sh +++ b/test.sh @@ -1,9 +1,19 @@ #!/bin/bash set -u -set -x set -e -dd if=/dev/urandom of=data.send bs=1024 count=128 -python send.py -python recv.py -python errors.py data.* #python show.py tx.int16 rx.int16 \ No newline at end of file +dd if=/dev/urandom of=data.send bs=1024 count=1 +./send.py + +./wave.py record rx.int16 & +PID=$! + +./wave.py play tx.int16 +sleep 1 +kill -INT $PID + +./recv.py +./errors.py data.* +if [ -z $? ]; then + ./show.py tx.int16 rx.int16 +fi \ No newline at end of file diff --git a/wave.py b/wave.py old mode 100644 new mode 100755 index b68a5ec..c5402ea --- a/wave.py +++ b/wave.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import os import signal import subprocess as sp @@ -6,15 +7,38 @@ import logging log = logging.getLogger(__name__) from common import Fs +Fs = int(Fs) def play(fname, **kwargs): - return launch('aplay', fname, '-q', '-f', 'S16_LE', '-c', '1', '-r', str(int(Fs)), **kwargs) + return launch('aplay', fname, '-q', '-f', 'S16_LE', '-c', '1', '-r', Fs, **kwargs) def record(fname, **kwargs): - return launch('arecord', fname, '-q', '-f', 'S16_LE', '-c', '1', '-r', str(int(Fs)), **kwargs) + return launch('arecord', fname, '-q', '-f', 'S16_LE', '-c', '1', '-r', Fs, **kwargs) def launch(*args, **kwargs): + args = map(str, args) log.debug('$ %s', ' '.join(args)) p = sp.Popen(args=args, **kwargs) p.stop = lambda: os.kill(p.pid, signal.SIGINT) return p + +if __name__ == '__main__': + import logging + logging.basicConfig(level=logging.DEBUG, format='%(message)s') + import argparse + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers() + fmt = 'a raw audio file (16 bits at {:.1f} kHz)'.format(Fs / 1e3) + recorder = subparsers.add_parser('record', help='record ' + fmt) + recorder.add_argument('filename', default='-', help='path to the audio file to record (otherwise, use stdout)') + recorder.set_defaults(func=record) + + player = subparsers.add_parser('play', help='play ' + fmt) + player.add_argument('filename', default='-', help='path to the audio file to play (otherwise, use stdin)') + player.set_defaults(func=play) + + args = parser.parse_args() + p = args.func(args.filename) + + import sys + sys.exit(p.wait())