用于生成慢扫描电视传输的 Python 类
项目描述
纯 Python 中的 SSTV 生成器
PySSTV 从 PIL 可以打开的任何图像(PNG、JPEG、GIF 等)生成 SSTV 调制的 WAV 文件。例如,这些 WAV 文件可以由连接到短波收音机的任何音频播放器播放。
我的主要动机是在实践中了解 SSTV 的内部结构,因此性能远非最佳。我尝试保持代码可读性,并且只执行不会使代码库复杂化的优化。
命令行使用
$ python -m pysstv -h
usage: __main__.py [-h]
[--mode {MartinM1,MartinM2,ScottieS1,ScottieS2,Robot36,PasokonP3,PasokonP5,PasokonP7,PD90,PD120,PD160,PD180,PD240,PD290,Robot8BW,Robot24BW}]
[--rate RATE] [--bits BITS] [--vox] [--fskid FSKID]
[--chan CHAN]
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
--mode {MartinM1,MartinM2,ScottieS1,ScottieS2,Robot36,PasokonP3,PasokonP5,PasokonP7,PD90,PD120D160,PD180,PD240,Robot8BW,Robot24BW}
image mode (default: Martin M1)
--rate RATE sampling rate (default: 48000)
--bits BITS bits per sample (default: 16)
--vox add VOX tones at the beginning
--fskid FSKID add FSKID at the end
--chan CHAN number of channels (default: mono)
Python 接口
模块中的SSTV
类sstv
实现了与 SSTV 相关的基本功能,以及其他模块的类,例如grayscale
和
color
扩展它。大多数实例实现以下方法:
__init__
将 PIL 图像、每秒样本数和每个样本的位数作为参数,但不执行任何硬计算gen_freq_bits
生成描述正弦波段的元组,频率以赫兹为单位,持续时间以毫秒为单位gen_values
生成介于-1和+1之间的样本,根据构建时给出的每秒样本数进行采样gen_samples
生成离散样本,根据构建期间给出的每个样本值的比特数执行量化write_wav
将整个图像写入 Microsoft WAV 文件
以上方法都建立在上面的方法之上,例如write_wav
调用gen_samples
,而后者调用gen_values
,所以通常只调用第一个和最后一个,也许最后两个应该直接调用,为了完整起见,这里只是列出了其他的。让流程更容易理解。
执照
整个项目在 MIT 许可下可用。
有用的链接
- 仅接收“对应方”:https ://github.com/windytan/slowrx
- 免费 SSTV 手册:http ://www.sstv-handbook.com/
- C 中的机器人 36 编码器/解码器:https ://github.com/xdsopl/robot36/
依赖项
- Python 3.5 或更高版本
- Python 映像库(Debian/Ubuntu 软件包
python-imaging
:)