5个版本 (3个破坏性更新)
0.4.1 | 2024年6月27日 |
---|---|
0.4.0 | 2023年10月20日 |
0.3.0 | 2023年10月17日 |
0.2.0 | 2023年10月16日 |
0.1.0 | 2023年10月15日 |
#270 in 音频
每月下载量 212次
在 2 个Crates中使用(通过 termusic-playback)
330KB
255 行
soundtouch
SoundTouch C++音频库的安全实用包装器。API与原始C++ API非常相似。
大部分文档来自SoundTouch仓库。
高级示例
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
低级示例
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
这两个示例应该产生相同的输出。
依赖关系
~1–3MB
~49K SLoC