# Sofar Sofa Reader and Renderer

Features

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.

Example

```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 -- libmysofa-sys/libmysofa/share/default.sofa

```

License

This project is licensed under either of

at your option.