merge audio script into amodem script.

This commit is contained in:
Roman Zeyde
2014-09-03 08:36:26 +03:00
parent 5663d0c9be
commit a2a527c1d1
2 changed files with 52 additions and 56 deletions

View File

@@ -11,11 +11,12 @@ import logging
format = '%(asctime)s %(levelname)-10s %(message)-100s %(filename)s:%(lineno)d'
logging.basicConfig(level=logging.DEBUG, format=format)
import amodem.recv
import amodem.send
import amodem.wave
from amodem import recv
from amodem import send
from amodem import wave
import argparse
from functools import partial
def FileType(mode, process=None):
def opener(fname):
@@ -24,8 +25,8 @@ def FileType(mode, process=None):
fname = '-'
if fname is None:
if 'r' in mode: return process(stdout=amodem.wave.sp.PIPE).stdout
if 'w' in mode: return process(stdin=amodem.wave.sp.PIPE).stdin
if 'r' in mode: return process(stdout=wave.sp.PIPE).stdout
if 'w' in mode: return process(stdin=wave.sp.PIPE).stdin
if fname == '-':
if 'r' in mode: return _stdin
@@ -38,41 +39,70 @@ def FileType(mode, process=None):
def main():
p = argparse.ArgumentParser()
sub = p.add_subparsers()
subparsers = p.add_subparsers()
send = sub.add_parser('send')
send.add_argument('-i', '--input', help='input file (use "-" for stdin).')
send.add_argument('-o', '--output', help='output file (use "-" for stdout).'
# Modulator
sender = subparsers.add_parser('send', help='modulate binary data into audio signal.')
sender.add_argument('-i', '--input', help='input file (use "-" for stdin).')
sender.add_argument('-o', '--output', help='output file (use "-" for stdout).'
' if not specified, `aplay` tool will be used.')
send.add_argument('--silence-start', type=float, default=1.0,
sender.add_argument('--silence-start', type=float, default=1.0,
help='seconds of silence before transmission starts')
send.add_argument('--silence-stop', type=float, default=1.0,
sender.add_argument('--silence-stop', type=float, default=1.0,
help='seconds of silence after transmission stops')
send.set_defaults(main=amodem.send.main,
sender.set_defaults(main=send.main,
input_type=FileType('rb'),
output_type=FileType('wb', amodem.wave.play)
output_type=FileType('wb', wave.play)
)
recv = sub.add_parser('recv')
recv.add_argument('-i', '--input', help='input file (use "-" for stdin).'
# Demodulator
receiver = subparsers.add_parser('recv', help='demodulate audio signal into binary data.')
receiver.add_argument('-i', '--input', help='input file (use "-" for stdin).'
' if not specified, `arecord` tool will be used.')
recv.add_argument('-o', '--output', help='output file (use "-" for stdout).')
recv.add_argument('--skip', type=int, default=128,
receiver.add_argument('-o', '--output', help='output file (use "-" for stdout).')
receiver.add_argument('--skip', type=int, default=128,
help='skip initial N samples, due to spurious spikes')
recv.add_argument('--plot', dest='plt', action='store_true', default=False,
receiver.add_argument('--plot', dest='plt', action='store_true', default=False,
help='plot results using pylab module')
recv.set_defaults(main=amodem.recv.main,
input_type=FileType('rb', amodem.wave.record),
receiver.set_defaults(main=recv.main,
input_type=FileType('rb', wave.record),
output_type=FileType('wb')
)
# Audio recording tool
fmt = 'a raw audio file (16 bits at {:.1f} kHz)'.format(wave.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(main=partial(run, process=wave.record))
# Audio playing tool
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(main=partial(run, process=wave.play))
# Parsing and execution
args = p.parse_args()
args.input = args.input_type(args.input)
args.output = args.output_type(args.output)
if hasattr(args, 'input_type'):
args.input = args.input_type(args.input)
if hasattr(args, 'output_type'):
args.output = args.output_type(args.output)
args.main(args)
def run(args, process):
p = process(fname=args.filename)
exitcode = 0
try:
exitcode = p.wait()
except KeyboardInterrupt:
p.kill()
exitcode = p.wait()
sys.exit(exitcode)
if __name__ == '__main__':
main()

View File

@@ -1,34 +0,0 @@
#!/usr/bin/env python
import logging
logging.basicConfig(level=logging.DEBUG, format='%(message)s')
from amodem import wave
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
fmt = 'a raw audio file (16 bits at {:.1f} kHz)'.format(wave.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=wave.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=wave.play)
args = parser.parse_args()
p = args.func(fname=args.filename)
import sys
exitcode = 0
try:
exitcode = p.wait()
except KeyboardInterrupt:
p.kill()
exitcode = p.wait()
sys.exit(exitcode)