#codec #opus #ogg #encoder #web #target

已删除 ogg-opus-wasm

适用于 WASM 的 Ogg Opus 解码器/编码器

3 个不稳定版本

0.1.3 2023 年 10 月 4 日
0.1.2 2023 年 10 月 4 日
0.0.1 2023 年 10 月 4 日

#26#ogg

MIT 许可证

23KB
342

Ogg Opus

Rust 中的 Ogg Opus 编码器,适用于 WASM。

WASM 问题 ...

我们目前正在调查此问题。

Uncaught TypeError: Failed to resolve module specifier "env". Relative references must start with either "/", "./", or "../".

Ogg Opus 原始仓库

用法

cargo add ogg-opus-wasm
wasm-pack build --target web

示例

编码

此示例使用 wav crate,您可以将它添加到您的 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 所支持的任何采样率(8k Hz、12k Hz、24k Hz 和 64k Hz),但仅测试了 16k Hz
  • 编码的比特率设置为 24k(因为 Lily 的限制)
  • 音频的开始和结束附近仍存在一些不准确(无法确定是由于编码器还是解码器)
  • 高级解码和编码功能(可修复流、fec 等)

依赖项

~4MB
~78K SLoC