14 个版本
0.3.0 | 2020 年 9 月 28 日 |
---|---|
0.2.2 | 2020 年 8 月 22 日 |
0.2.1 | 2019 年 4 月 11 日 |
0.1.9 | 2019 年 4 月 9 日 |
0.1.7 | 2019 年 3 月 25 日 |
#668 在 音频
120KB
2K SLoC
X3 Rust 无损音频压缩
X3 是一个简单有效的针对低熵声音的无损音频压缩器。它基于 Shorten 并具有一些 FLAC 的功能,但专门设计用于水下声音记录标签和浮标。它的速度比 FLAC 快得多,但压缩率不如 FLAC。名称来源于它通常实现的压缩因子,即 3 倍。该算法在 《美国声学协会杂志》133:1387-1398, 2013 的论文中描述。
该仓库是从 原始作者 的 Matlab 代码移植到 Rust 的。
代码使用
编码和解码 .wav <-> .x3a
use x3::encodefile::wav_to_x3a;
use x3::decodefile::x3a_to_wav;
// Convert .wav to .x3a
wav_to_x3a("/path/to/input_file.x3a", "/path/to/output_file.wav").unwrap();
// Convert .x3a to .wav
x3a_to_wav("/path/to/input_file.wav", "/path/to/output_file.x3a").unwrap();
编码一组 wav 数据
let wav: Vec<i16> = /* you need to add your wav data */;
// Can only handle signed 16 bit data with one channel.
let params = x3::Parameters::default();
let sample_rate = 44100;
let num_samples = wav.len();
// Create the channel data
let first_channel = x3::Channel::new(0, &wav, sample_rate, params);
// Create the output data
let x3_len = num_samples * 2;
let mut x3_out = vec![0u8; x3_len];
let bp = &mut BitPacker::new(&mut x3_out); // Packer where x3 compressed data is stored.
encoder::encode(&[&first_channel], bp).unwrap();
// Get the bytes
let x3_bytes = bp.as_bytes().unwrap();
命令行使用
构建软件包将创建 x3
二进制可执行文件。您可以转换文件到/从 x3a/wav。
示例
# Convert from x3a to wav
./x3 --input /path/to/file.x3a --output /path/to/file.wav
# Convert from wav to x3a
./x3 --input /path/to/file.wav --output /path/to/file.x3a
待办事项
以下项目需要工作
- 如果解码帧存在问题,则通知用户。
- 错误处理可以更好。
- 添加多通道功能 - 目前我们只能处理单声道。
- 显式使用
#![no_std]
选项用于嵌入式设备。 - 性能,它目前比 flac 编码器慢。
- 编码文件时不太高效。它将预先分配所有内存。
- 分离读取和解码。提前读取帧,可能以不同的方式。
许可证
Rust 实现的 X3 无损音频压缩协议。
版权 (C) 2019 Simon M. Werner [email protected]
本程序是自由软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它;许可证的版本可以是第3版,或者(根据您的选择)任何更高版本。
本程序的分发是希望它有用,但没有任何保证;甚至没有关于其商业性或针对特定用途的适用性的隐含保证。有关更多详情,请参阅GNU通用公共许可证。
您应该已随本程序收到GNU通用公共许可证的一份副本;如果没有,请参阅https://www.gnu.org/licenses。
依赖关系
~3.5MB
~51K SLoC