ironpython
András Veres-Szentkirályi 2013-06-19 16:45:47 +02:00
rodzic 8e1f888fec
commit 8c283727a9
2 zmienionych plików z 19 dodań i 0 usunięć

4
run.py
Wyświetl plik

@ -27,6 +27,8 @@ def main():
help='bits per sample (default: 16)')
parser.add_argument('--vox', dest='vox', action='store_true',
help='add VOX tones at the beginning')
parser.add_argument('--fskid', dest='fskid',
help='add FSKID at the end')
args = parser.parse_args()
image = Image.open(args.img_file)
mode = module_map[args.mode]
@ -36,6 +38,8 @@ def main():
raise SystemExit(1)
s = mode(image, args.rate, args.bits)
s.vox_enabled = args.vox
if args.fskid:
s.add_fskid_text(args.fskid)
s.write_wav(args.wav_file)

15
sstv.py
Wyświetl plik

@ -4,6 +4,7 @@ from __future__ import division, with_statement
from math import sin, pi, floor
from random import random
from contextlib import closing
from itertools import imap
import struct
import wave
@ -14,10 +15,13 @@ FREQ_BLACK = 1500
FREQ_VIS_START = 1900
FREQ_WHITE = 2300
FREQ_RANGE = FREQ_WHITE - FREQ_BLACK
FREQ_FSKID_BIT1 = 1900
FREQ_FSKID_BIT0 = 2100
MSEC_VIS_START = 300
MSEC_VIS_SYNC = 10
MSEC_VIS_BIT = 30
MSEC_FSKID_BIT = 22
class SSTV(object):
@ -27,6 +31,7 @@ class SSTV(object):
self.samples_per_sec = samples_per_sec
self.bits = bits
self.vox_enabled = False
self.fskid_payload = ''
BITS_TO_STRUCT = {8: 'b', 16: 'h'}
@ -99,10 +104,20 @@ class SSTV(object):
yield FREQ_SYNC, MSEC_VIS_BIT # stop bit
for freq_tuple in self.gen_image_tuples():
yield freq_tuple
for fskid_byte in imap(ord, self.fskid_payload):
for _ in xrange(6):
bit = fskid_byte & 1
fskid_byte >>= 1
bit_freq = FREQ_FSKID_BIT1 if bit == 1 else FREQ_FSKID_BIT0
yield bit_freq, MSEC_FSKID_BIT
def gen_image_tuples(self):
return []
def add_fskid_text(self, text):
self.fskid_payload += '\x20\x2a{0}\x01'.format(
''.join(chr(ord(c) - 0x20) for c in text))
def horizontal_sync(self):
yield FREQ_SYNC, self.SYNC