#audio-processing #music #audio-samples #audio-library

无std soundtouch

SoundTouch C++音频库的实用包装器

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 音频

Download history 42/week @ 2024-05-04 4/week @ 2024-05-11 6/week @ 2024-05-18 11/week @ 2024-05-25 13/week @ 2024-06-01 28/week @ 2024-06-08 44/week @ 2024-06-15 177/week @ 2024-06-22 14/week @ 2024-06-29 3/week @ 2024-07-06 4/week @ 2024-07-13 15/week @ 2024-07-20 59/week @ 2024-07-27 56/week @ 2024-08-03 16/week @ 2024-08-10 72/week @ 2024-08-17

每月下载量 212次
2 个Crates中使用(通过 termusic-playback

LGPL-2.1

330KB
255

soundtouch

Crates.io Documentation

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