3个版本

0.1.2 2021年5月18日
0.1.1 2021年5月18日
0.1.0 2021年5月18日

#671 in 音频

每月 38次下载

MIT许可

22KB
398 代码行

Ogg Opus

Rust中的Ogg Opus解码/编码器

用法

添加到您的 cargo.toml

ogg-opus = "^0.1"

最低Rust版本

由于我们使用了 const generics,最低的Rust版本是 Rust 1.51

示例

编码

此示例使用了 wav 包,您可以通过将其添加到您的 cargo.toml 文件中来实现

wav = "^1.0"
let mut f = File::open("my_file.wav").unwrap();
let (_, b) = wav::read(&mut f).unwrap();
let audio = b.try_into_sixteen().unwrap();
let opus = ogg_opus::encode::<16000, 1>(&audio).unwrap();

解码

从文件读取

let mut f = File::open("my_file.ogg").unwrap();
let (raw, header) = ogg_opus::decode::<_,16000>(f).unwrap();

从Vec读取

use std::io::Cursor;

// Let's say this vec contains Ogg Opus data
let opus: Vec<u8> = Vec::new();
let (raw, header) = ogg_opus::decode::<_,16000>(Cursor::new(opus)).unwrap();

什么工作,什么不工作

  • 仅支持原始部分的 i16(16位整数)。
  • 支持单声道和立体声,但仅测试了单声道。
  • 测试未覆盖超过立体声的更多通道,可能会损坏。
  • 支持解码和编码Opus支持的所有采样率(8kHz、12kHz、24kHz和64kHz),但仅测试了16kHz
  • 编码的比特率设置为24k(因为Lily的限制)
  • 音频的开始和结束位置仍然存在一些不准确(无法确定是由于编码器还是解码器造成的)
  • 高级解码和编码功能(可修复流、fec等)

依赖项

~4MB
~73K SLoC