Skip to main content

Crate rs_voice_toolkit_audio

Crate rs_voice_toolkit_audio 

Source
Expand description

§Audio Processing Module - 音频处理模块

这个模块提供了完整的音频处理功能,包括格式转换、重采样、元数据提取等。 设计目标是提供简单易用的 API,同时保持高性能和可靠性。

§主要功能

§音频格式支持

  • WAV: 原生支持,包括各种 PCM 格式
  • MP3: 通过 FFmpeg 转换支持
  • FLAC: 通过 FFmpeg 转换支持
  • M4A: 通过 FFmpeg 转换支持
  • OGG: 通过 FFmpeg 转换支持

§核心功能

  • 格式检测: 自动识别音频文件格式和参数
  • 格式转换: 将任意格式转换为 Whisper 兼容格式
  • 音频重采样: 高质量的采样率转换
  • 元数据提取: 获取音频文件的详细信息
  • 流式处理: 支持分块处理的流式重采样

§设计理念

  • 最小化 API: 保持接口简洁,易于集成
  • 零拷贝: 尽可能避免不必要的数据拷贝
  • 错误处理: 提供详细的错误信息和恢复建议
  • 跨平台: 支持 Windows、macOS 和 Linux
  • 高性能: 使用优化的算法和并行处理

§使用示例

§基本格式检测

use rs_voice_toolkit_audio::{probe, AudioError};
 
async fn get_audio_info() -> Result<(), AudioError> {
    let metadata = probe("audio/song.mp3")?;
    println!("采样率: {} Hz", metadata.sample_rate);
    println!("声道数: {}", metadata.channels);
    println!("时长: {} ms", metadata.duration_ms.unwrap_or(0));
    println!("格式: {:?}", metadata.format);
    Ok(())
}

§转换为 Whisper 兼容格式

use rs_voice_toolkit_audio::{ensure_whisper_compatible, AudioError};
 
async fn convert_for_whisper() -> Result<(), AudioError> {
    let compatible = ensure_whisper_compatible(
        "input.mp3", 
        Some("output_whisper.wav".into())
    )?;
     
    println!("转换完成: {}", compatible.path.display());
    Ok(())
}

§音频重采样

use rs_voice_toolkit_audio::{resample, AudioError};
 
async fn resample_audio() -> Result<(), AudioError> {
    let input_samples: Vec<f32> = vec/*[音频数据]*/;
     
    // 从 44100Hz 重采样到 16000Hz
    let resampled = resample(&input_samples, 44100, 16000)?;
     
    println!("重采样完成: {} -> {} 样本", 
        input_samples.len(), 
        resampled.samples.len()
    );
    println!("新采样率: {} Hz", resampled.sample_rate);
     
    Ok(())
}

§流式重采样

use rs_voice_toolkit_audio::{StreamingResampler, AudioError};
 
async fn stream_resample() -> Result<(), AudioError> {
    let mut resampler = StreamingResampler::new(44100, 16000)?;
     
    // 分块处理音频数据
    let chunks: Vec<Vec<f32>> = vec/*[音频块]*/;
    let mut all_output = Vec::new();
     
    for chunk in chunks {
        let output = resampler.process_chunk(&chunk)?;
        all_output.extend(output);
    }
     
    // 处理剩余数据
    let final_output = resampler.finalize()?;
    all_output.extend(final_output);
     
    println!("流式重采样完成,总计 {} 个样本", all_output.len());
    Ok(())
}

§性能特性

  • 高质量重采样: 使用 Sinc 插值算法,保持音频质量
  • 内存效率: 支持流式处理,避免大内存占用
  • 并行处理: 利用多核 CPU 进行并行计算
  • 缓存优化: 优化内存访问模式

§错误处理

模块提供了详细的错误类型,帮助开发者快速定位问题:

  • AudioError::FileNotFound: 文件不存在
  • AudioError::FormatNotSupported: 格式不支持
  • AudioError::SampleRateMismatch: 采样率不匹配
  • AudioError::ResampleError: 重采样失败
  • AudioError::FfmpegExecution: FFmpeg 执行错误

§系统要求

  • FFmpeg: 用于格式转换(自动下载)
  • 内存: 建议至少 512MB 可用内存
  • CPU: 支持多线程处理

§依赖项

  • ffmpeg-sidecar: 跨平台 FFmpeg 集成
  • hound: WAV 文件读写
  • rubato: 高质量音频重采样
  • serde: 序列化支持

Structs§

AudioConfig
音频参数配置
AudioMeta
CompatibleWav
Resampled
StreamingResampler
流式重采样器 支持分块输入的连续重采样,使用 rubato 库实现

Enums§

AudioError
AudioFormat
音频格式枚举

Functions§

ensure_whisper_compatible
确保音频文件与 Whisper 兼容
probe
探测音频文件的元数据
resample