Skip to content

kostya2023/simple_decoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simple Decoder

Rust-крейт для МАКСИМАЛЬНО лёгкого декодирования и обработки аудио.

Quick Start

Всё, что нужно для счастья:

use simple_decoder::SimpleDecoder;
use simple_decoder::decoders::AudioDecoder;

fn main() {
    let data = std::fs::read("melody.mp3").expect("Не удалось прочитать файл");
    let decoder = SimpleDecoder::new();
    
    // Декодируем, ресемплим в 48кГц и переводим в моно одной цепочкой
    let track = decoder.decode(&data).unwrap()
        .resample(48000).unwrap()
        .rechannel(1);
        
    println!("Готово: {} сэмплов", track.pcm.len());
}

Основные сущности

  • SimpleDecoder — универсальный комбайн. Находится в корне, сам определяет формат файла.
  • .decode(&[u8]) — основной метод, возвращает структуру AudioTrack.
  • AudioTrack — контейнер с сырыми данными (f32) и методами трансформации.

Архитектура проекта

Библиотека построена на базе symphonia (декодинг) и rubato (ресемплинг).

  • SimpleDecoderError — перечисление всех возможных бед.
  • SimpleDecoder — точка входа.
  • audio:
    • AudioTrack — структура с PCM-данными.
    • AudioFormat — перечисление форматов (MP3, WAV, FLAC и т.д.).
  • decoders (специализированные декодеры):
    • aac : AACDecoder
    • flac : FLACDecoder
    • mp3 : MP3Decoder
    • oggopus : OGGOpusDecoder
    • oggvorbis : OGGVorbisDecoder
    • simple : SimpleDecoder
    • wav : WAVDecoder

Powerful Transformations

После декодирования доступен Chain API для подготовки аудио к воспроизведению:

let track = decoder.decode(&data)?
    .resample(48000)?  // Высококачественный FFT ресемплинг
    .rechannel(2);     // Изменение количества каналов

Методы AudioTrack

Метод Описание
.resample(target_rate) Изменяет частоту дискретизации. Использует Sinc-интерполяцию (FFT).
.rechannel(target_channels) Изменяет кол-во каналов. Считает среднее при Downmix (Stereo -> Mono).
.pcm Прямой доступ к Vec<f32> (Interleaved PCM).
.format Возвращает исходный формат файла (AudioFormat).
.channels Текущее количество каналов (u16).
.sample_rate Текущая частота дискретизации (u64).

Лицензия

Максимально просто — MIT.

About

The ULTIMATE lightest audio decoding in Rust: Symphonia + Rubato under the hood.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages