From 2d890339e2a6865f4c91f4b14e504b316cb53d41 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sun, 11 Jan 2015 18:01:39 +0200 Subject: [PATCH] recv: add audio dumping option (for debugging) --- amodem-cli | 5 ++++- amodem/recv.py | 15 ++++++++++++++- tests/test_transfer.py | 4 +++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/amodem-cli b/amodem-cli index 6b91778..d60dc19 100755 --- a/amodem-cli +++ b/amodem-cli @@ -124,13 +124,16 @@ def main(): '-o', '--output', help='output file (use "-" for stdout).') receiver.add_argument( '-c', '--calibrate', default=False, action='store_true') + receiver.add_argument( + '-d', '--dump', type=FileType('wb'), + help='Filename to save recorded audio') receiver.add_argument( '--plot', action='store_true', default=False, help='plot results using pylab module') receiver.set_defaults( main=lambda config, args: recv.main( config, src=args.src, dst=wrap(Decompressor, args.dst, args.zip), - pylab=args.pylab + pylab=args.pylab, dump_audio=args.dump ), calib=lambda config, args: calib.recv( config, src=args.src, verbose=args.verbose diff --git a/amodem/recv.py b/amodem/recv.py index d084729..405b723 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -214,7 +214,20 @@ class Receiver(object): self.plt.title(title) -def main(config, src, dst, pylab=None): +class Dumper(object): + def __init__(self, src, dst): + self.src = src + self.dst = dst + + def read(self, size): + data = self.src.read(size) + self.dst.write(data) + return data + + +def main(config, src, dst, dump_audio=None, pylab=None): + if dump_audio: + src = Dumper(src, dump_audio) reader = stream.Reader(src, data_type=common.loads) signal = itertools.chain.from_iterable(reader) diff --git a/tests/test_transfer.py b/tests/test_transfer.py index 8d16f63..e7f73f6 100644 --- a/tests/test_transfer.py +++ b/tests/test_transfer.py @@ -44,8 +44,10 @@ def run(size, chan=None, df=0, success=True): rx_audio = BytesIO(data) rx_data = BytesIO() - result = recv.main(config=config, src=rx_audio, dst=rx_data) + d = BytesIO() + result = recv.main(config=config, src=rx_audio, dst=rx_data, dump_audio=d) rx_data = rx_data.getvalue() + assert data.startswith(d.getvalue()) assert result == success if success: