# opusenc-rs
[](https://github.com/d-k-bo/opusenc-rs/actions?query=workflow%3ACI)
[](https://crates.io/crates/opusenc)
[](https://docs.rs/opusenc)
[](COPYING)
High-level bindings for
[libopusenc](https://opus-codec.org/docs/libopusenc_api-0.2/index.html).
## Example
```rust
let audio_data: Vec<i16> = {
let mut file = std::fs::File::open("/dev/urandom")?;
let mut buf = vec![0; 60 * 48_000 * 2 * 2];
file.read_exact(&mut buf)?;
buf.chunks_exact(2)
.map(|a| i16::from_ne_bytes([a[0], a[1]]))
.collect()
};
let mut encoder = Encoder::create_file(
"/tmp/noise.opus",
Comments::create()
.add(RecommendedTag::Title, "Random Noise")?
.add(RecommendedTag::Artist, "/dev/urandom")?,
48_000,
2,
MappingFamily::MonoStereo,
)?;
encoder.write(&audio_data)?;
encoder.drain()?;
```
## Encoder options
This crate provides a `encoder-options` feature which enables reading and changing encoder options.
**Warning:** Some of these options might not work with opusenc, may be unsafe or even cause UB.
They are intended to be used via C macros that don't work with Rust.
Make sure to check if the methods you use match their intended behaviour.
## License
This project is licensed under the BSD-3-Clause License.
See [COPYING](COPYING) for more information.