#sound #resampling #sox #soxr

libsoxr

Wrapper for libsoxr (resampling library for sounds)

12 releases

0.2.9 Apr 12, 2023
0.2.8 Feb 1, 2022
0.2.7 May 23, 2021
0.2.5 Feb 24, 2021
0.1.6 Dec 24, 2020

#145 in Audio

Download history 388/week @ 2023-12-11 232/week @ 2023-12-18 166/week @ 2023-12-25 605/week @ 2024-01-01 296/week @ 2024-01-08 348/week @ 2024-01-15 553/week @ 2024-01-22 246/week @ 2024-01-29 135/week @ 2024-02-05 237/week @ 2024-02-12 119/week @ 2024-02-19 134/week @ 2024-02-26 69/week @ 2024-03-04 53/week @ 2024-03-11 45/week @ 2024-03-18 24/week @ 2024-03-25

193 downloads per month
Used in 3 crates (2 directly)

LGPL-2.0

1MB
737 lines

libsoxr-rs

This library is a thin wrapper for libsoxr which is a "High quality, one-dimensional sample-rate conversion library".

crates.io API documentation license

For direct access to the native libsoxr functions, you can use the libsoxr-sys crate. The documentation including examples can be found here.

This wrapper library is licensed the same as libsoxr itself: LGPLv2.


lib.rs:

libsoxr-rs

This library is a thin wrapper for libsoxr which is a "High quality, one-dimensional sample-rate conversion library".

For direct access to the libsoxr functions, you can use the libsoxr-sys crate.

This wrapper library is licensed the same as libsoxr itself: LGPLv2.

The documentation can be found here.

Install

add the following to your Cargo.toml:

[dependencies]
libsoxr = "0.2"

Example

// upscale factor 2, one channel with all the defaults
let soxr = Soxr::create(1.0, 2.0, 1, None, None, None).unwrap();

// source data, taken from 1-single-block.c of libsoxr examples.
let source: [f32; 48] = [0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0,
                         1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0,
                         0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0,
                         -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0];

// create room for 2*48 = 96 samples
let mut target: [f32; 96] = [0.0; 96];

// Two runs. First run will convert the source data into target.
// Last run with None is to inform resampler of end-of-input so it can clean up
soxr.process(Some(&source), &mut target).unwrap();
soxr.process::<f32,_>(None, &mut target[0..]).unwrap();

// just print the values in target
for s in target.iter() {
  print!("{:?}\t", s)
}

Dependencies