2013-06-17 11:23:56 +00:00
|
|
|
SSTV generator in pure Python
|
|
|
|
=============================
|
|
|
|
|
2015-10-20 08:31:33 +00:00
|
|
|
[![Build Status](https://travis-ci.org/dnet/pySSTV.svg?branch=master)](https://travis-ci.org/dnet/pySSTV)
|
|
|
|
|
2013-06-17 11:23:56 +00:00
|
|
|
PySSTV generates SSTV modulated WAV files from any image that PIL can open
|
|
|
|
(PNG, JPEG, GIF, and many others). These WAV files then can be played by any
|
|
|
|
audio player connected to a shortwave radio for example.
|
|
|
|
|
|
|
|
My main motivation was to understand the internals of SSTV in practice, so
|
|
|
|
performance is far from optimal. I tried keeping the code readable, and only
|
|
|
|
performed such optimizations that wouldn't have complicated the codebase.
|
|
|
|
|
|
|
|
Command line usage
|
|
|
|
------------------
|
|
|
|
|
2013-06-24 12:32:59 +00:00
|
|
|
$ python -m pysstv -h
|
|
|
|
usage: __main__.py [-h]
|
2014-04-22 21:17:34 +00:00
|
|
|
[--mode {MartinM2,MartinM1,Robot24BW,ScottieS2,ScottieS1,Robot8BW,PasokonP3,PasokonP5,PasokonP7}]
|
2018-02-24 20:40:33 +00:00
|
|
|
[--rate RATE] [--bits BITS] [--vox] [--fskid FSKID]
|
|
|
|
[--chan CHAN]
|
2013-06-17 11:23:56 +00:00
|
|
|
image.png output.wav
|
|
|
|
|
|
|
|
Converts an image to an SSTV modulated WAV file.
|
|
|
|
|
|
|
|
positional arguments:
|
|
|
|
image.png input image file name
|
|
|
|
output.wav output WAV file name
|
|
|
|
|
|
|
|
optional arguments:
|
|
|
|
-h, --help show this help message and exit
|
2014-04-22 21:17:34 +00:00
|
|
|
--mode {MartinM2,MartinM1,Robot24BW,ScottieS2,ScottieS1,Robot8BW,PasokonP3,PasokonP5,PasokonP7}
|
2013-06-17 11:23:56 +00:00
|
|
|
image mode (default: Martin M1)
|
|
|
|
--rate RATE sampling rate (default: 48000)
|
|
|
|
--bits BITS bits per sample (default: 16)
|
2018-02-24 20:40:33 +00:00
|
|
|
--vox add VOX tones at the beginning
|
|
|
|
--fskid FSKID add FSKID at the end
|
|
|
|
--chan CHAN number of channels (default: mono)
|
2013-06-17 11:23:56 +00:00
|
|
|
|
|
|
|
Python interface
|
|
|
|
----------------
|
|
|
|
|
|
|
|
The `SSTV` class in the `sstv` module implements basic SSTV-related
|
|
|
|
functionality, and the classes of other modules such as `grayscale` and
|
|
|
|
`color` extend this. Most instances implement the following methods:
|
|
|
|
|
|
|
|
- `__init__` takes a PIL image, the samples per second, and the bits per
|
|
|
|
sample as a parameter, but doesn't perform any hard calculations
|
|
|
|
- `gen_freq_bits` generates tuples that describe a sine wave segment with
|
|
|
|
frequency in Hz and duration in ms
|
|
|
|
- `gen_values` generates samples between -1 and +1, performing sampling
|
|
|
|
according to the samples per second value given during construction
|
|
|
|
- `gen_samples` generates discrete samples, performing quantization
|
|
|
|
according to the bits per sample value given during construction
|
|
|
|
- `write_wav` writes the whole image to a Microsoft WAV file
|
|
|
|
|
|
|
|
The above methods all build upon those above them, for example `write_wav`
|
|
|
|
calls `gen_samples`, while latter calls `gen_values`, so typically, only
|
|
|
|
the first and the last, maybe the last two should be called directly, the
|
|
|
|
others are just listed here for the sake of completeness and to make the
|
|
|
|
flow easier to understand.
|
|
|
|
|
|
|
|
License
|
|
|
|
-------
|
|
|
|
|
|
|
|
The whole project is available under MIT license.
|
|
|
|
|
|
|
|
Useful links
|
|
|
|
------------
|
|
|
|
|
|
|
|
- receive-only "counterpart": https://github.com/windytan/slowrx
|
|
|
|
- free SSTV handbook: http://www.sstv-handbook.com/
|
2013-11-22 16:05:13 +00:00
|
|
|
- robot 36 encoder/decoder in C: https://github.com/xdsopl/robot36/
|
2013-06-17 11:23:56 +00:00
|
|
|
|
|
|
|
Dependencies
|
|
|
|
------------
|
|
|
|
|
2017-01-12 11:58:11 +00:00
|
|
|
- Python 2.7 (tested on 2.7.9; 2.6 might work, but test suite lacks support)
|
|
|
|
or 3.x (tested on 3.2, 3.3, 3.4 and 3.5)
|
2013-06-17 11:23:56 +00:00
|
|
|
- Python Imaging Library (Debian/Ubuntu package: `python-imaging`)
|