This crate provides high level bindings to [libmysofa
] API allows to read
HRTF
filters from SOFA
files (Spatially Oriented Format for Acoustics).
The [render
] module implements uniformly partitioned convolution algorithm
for rendering HRTF filters.
```rust
use sofar::reader::{OpenOptions, Filter}; use sofar::render::Renderer;
// Open sofa file, resample HRTF data if needed to 44100 let sofa = OpenOptions::new() .samplerate(44100.0) .open("my/sofa/file.sofa") .unwrap();
let filtlen = sofa.filterlen(); let mut filter = Filter::new(filt_len);
// Get filter at poistion sofa.filter(0.0, 1.0, 0.0, &mut filter);
let mut render = Renderer::builder(filtlen) .withsamplerate(44100.0) .withpartition_len(64) .build() .unwrap();
render.set_filter(&filter);
let input = vec![0.0; 256]; let mut left = vec![0.0; 256]; let mut right = vec![0.0; 256];
// read_input()
render.process_block(&input, &mut left, &mut right).unwrap(); ```
You can run cpal
renderer example like this:
``` shell
cargo run --example renderer --
```
This project is licensed under either of
at your option.