From 4ce9d15b3950174d38f79200fe3af911c8c9c269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Veres-Szentkir=C3=A1lyi?= Date: Mon, 24 Jun 2013 17:05:21 +0200 Subject: [PATCH] added option for multiple channels --- pysstv/__main__.py | 4 ++++ pysstv/sstv.py | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pysstv/__main__.py b/pysstv/__main__.py index 17b0c2e..0b8fc6a 100644 --- a/pysstv/__main__.py +++ b/pysstv/__main__.py @@ -29,6 +29,8 @@ def main(): help='add VOX tones at the beginning') parser.add_argument('--fskid', dest='fskid', help='add FSKID at the end') + parser.add_argument('--chan', dest='chan', type=int, + help='number of channels (default: mono)') args = parser.parse_args() image = Image.open(args.img_file) mode = module_map[args.mode] @@ -40,6 +42,8 @@ def main(): s.vox_enabled = args.vox if args.fskid: s.add_fskid_text(args.fskid) + if args.chan: + s.nchannels = args.chan s.write_wav(args.wav_file) diff --git a/pysstv/sstv.py b/pysstv/sstv.py index c17e733..d30fec7 100644 --- a/pysstv/sstv.py +++ b/pysstv/sstv.py @@ -32,6 +32,7 @@ class SSTV(object): self.bits = bits self.vox_enabled = False self.fskid_payload = '' + self.nchannels = 1 BITS_TO_STRUCT = {8: 'b', 16: 'h'} @@ -40,7 +41,7 @@ class SSTV(object): fmt = '<' + self.BITS_TO_STRUCT[self.bits] data = ''.join(struct.pack(fmt, b) for b in self.gen_samples()) with closing(wave.open(filename, 'wb')) as wav: - wav.setnchannels(1) + wav.setnchannels(self.nchannels) wav.setsampwidth(self.bits // 8) wav.setframerate(self.samples_per_sec) wav.writeframes(data) @@ -56,9 +57,11 @@ class SSTV(object): amp = max_value / 2 lowest = -amp highest = amp - 1 + chans = range(self.nchannels) for value in self.gen_values(): sample = int(round(value * amp + alias * (random() - 0.5))) - yield max(min(highest, sample), lowest) + for chan in chans: + yield max(min(highest, sample), lowest) def gen_values(self): """generates samples between -1 and +1 from gen_freq_bits()