added option for multiple channels

This commit is contained in:
András Veres-Szentkirályi 2013-06-24 17:05:21 +02:00
parent 9a2743cb64
commit 4ce9d15b39
2 changed files with 9 additions and 2 deletions

View file

@ -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)

View file

@ -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()