6 releases (3 breaking)
0.4.2 | Aug 31, 2024 |
---|---|
0.4.1 | Jun 27, 2024 |
0.4.0 | Oct 20, 2023 |
0.3.0 | Oct 17, 2023 |
0.1.0 | Oct 15, 2023 |
#276 in Audio
181 downloads per month
Used in 2 crates
(via termusic-playback)
330KB
256 lines
soundtouch
A safe utility wrapper around the SoundTouch C++ audio library. The API is very similar to the original C++ API.
Most of the documentation is copied from the SoundTouch repository.
High Level Example
use soundtouch::{SoundTouch, Setting};
let mut soundtouch = SoundTouch::new();
soundtouch
.set_channels(2)
.set_sample_rate(44100)
.set_tempo(1.10)
// Recommended setting to speed up processing
.set_setting(Setting::UseQuickseek, 1);
// use actual audio samples here
let samples = vec![0.0; 44100 * 2];
let output_samples = soundtouch.generate_audio(&samples);
// do something with output_samples
Low Level Example
use soundtouch::{SoundTouch, Setting};
let mut soundtouch = SoundTouch::new();
soundtouch
.set_channels(2)
.set_sample_rate(44100)
.set_tempo(1.10)
// Recommended setting to speed up processing
.set_setting(Setting::UseQuickseek, 1);
// use actual audio samples here
let mut samples = vec![0.0; 44100 * 2];
const BUF_SIZE: usize = 6720;
let mut new_samples: [f32; BUF_SIZE] = [0.0; BUF_SIZE];
let mut output_samples: Vec<f32> = Vec::with_capacity(samples.len());
soundtouch.put_samples(&samples, samples.len() / 2);
let mut n_samples = 1;
while n_samples != 0 {
n_samples = soundtouch.receive_samples(
new_samples.as_mut_slice(),
BUF_SIZE / 2
);
output_samples.extend_from_slice(&new_samples);
}
soundtouch.flush();
// do something with output_samples
Both examples should produce the same output.
Dependencies
~1–3MB
~52K SLoC