#convert-images #image #audio #audio-samples #encoder #robot36 #sstv

robot36-encoder

使用Robot 36编码将图像转换为音频的库

4 个版本

0.2.1 2022年8月5日
0.2.0 2022年8月5日
0.1.1 2019年5月13日
0.1.0 2019年5月13日

#393 in 多媒体

MIT 许可证

19KB
291

Robot36-encoder

这是一个使用Robot 36编码将图像转换为音频样本的简单编码器。它基于Ahmet的C实现。您可以使用他的解码器来解码此图像。

它作为库使用,因此您可以在Rust项目中使用它。您将Robot36Image编码为一个迭代器,其中包含代表每个音频样本的i16。然后您可以使用此样本写入音频文件或直接写入音频输出。有一个可选功能 image,可以启用以将DynamicImage 转换为Robot36Image。

请注意,在下一个版本中可能会发生破坏性变化!

使用Hound的示例

use robot36_encoder::{Encoder, Robot36Image};
use std::env;

/** Simple exmaple.
 * encode-image /path/to/image-input.png /path/to/audio-output.wav
*/
fn main() {
    let args: Vec<String> = env::args().collect();
    let image = image::open(args[1].to_string()).unwrap();
    let encoder = Encoder::new(
        Robot36Image::from_image(image.resize(320, 240, image::imageops::FilterType::Lanczos3))
            .unwrap(),
        48000,
    );
    let samples = encoder.encode();
    let spec = hound::WavSpec {
        channels: 1,
        sample_rate: 48000,
        bits_per_sample: 16,
        sample_format: hound::SampleFormat::Int,
    };
    let mut writer = hound::WavWriter::create(args[2].to_string(), spec).unwrap();
    for sample in samples {
        writer.write_sample(sample).unwrap();
    }
}

依赖项

~0.5–4MB
~34K SLoC