From 8798922502bdc52cfcbd7a63fa9f503e442172a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Veres-Szentkir=C3=A1lyi?= Date: Mon, 17 Jun 2013 13:03:08 +0200 Subject: [PATCH] added proper command line interface --- run.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ sstv.py | 8 -------- 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 run.py diff --git a/run.py b/run.py new file mode 100644 index 0000000..f4da7f2 --- /dev/null +++ b/run.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +from __future__ import print_function +from PIL import Image +from argparse import ArgumentParser +from sys import stderr +import color, grayscale + +SSTV_MODULES = [color, grayscale] + +def main(): + module_map = build_module_map() + parser = ArgumentParser( + description='Converts an image to an SSTV modulated WAV file.') + parser.add_argument('img_file', metavar='image.png', + help='input image file name') + parser.add_argument('wav_file', metavar='output.wav', + help='output WAV file name') + parser.add_argument('--mode', dest='mode', default='MartinM1', choices=module_map, + help='image mode (default: Martin M1)') + parser.add_argument('--rate', dest='rate', type=int, default=48000, + help='sampling rate (default: 48000)') + parser.add_argument('--bits', dest='bits', type=int, default=16, + help='bits per sample (default: 16)') + args = parser.parse_args() + image = Image.open(args.img_file) + mode = module_map[args.mode] + if not all(i >= m for i, m in zip(image.size, (mode.WIDTH, mode.HEIGHT))): + print(('Image must be at least {m.WIDTH} x {m.HEIGHT} pixels ' + 'for mode {m.__name__}').format(m=mode), file=stderr) + raise SystemExit(1) + s = mode(image, args.rate, args.bits) + s.write_wav(args.wav_file) + +def build_module_map(): + module_map = {} + for module in SSTV_MODULES: + for mode in module.MODES: + module_map[mode.__name__] = mode + return module_map + + +if __name__ == '__main__': + main() diff --git a/sstv.py b/sstv.py index 9c0127b..a41f1e6 100644 --- a/sstv.py +++ b/sstv.py @@ -93,11 +93,3 @@ class SSTV(object): def byte_to_freq(value): return FREQ_BLACK + FREQ_RANGE * value / 255 - - -if __name__ == '__main__': - from PIL import Image - from grayscale import Robot8BW - image = Image.open('160x120bw.png') - s = Robot8BW(image, 48000, 16) - s.write_wav('test.wav')