fsbex

Crates.iofsbex
lib.rsfsbex
version0.3.0
sourcesrc
created_at2023-06-10 03:40:18.503946
updated_at2023-08-19 21:55:18.981264
descriptionLibrary for extracting audio from FMOD sound banks
homepage
repositoryhttps://github.com/astral4/fsbex
max_upload_size
id886689
size3,311,585
Kyle Chen (astral4)

documentation

README

fsbex

Crates.io Docs.rs License

fsbex is a library for extracting audio from FMOD sound banks. Only FSB version 5 is supported for now.

Example

Parsing a sound bank, then writing streams to files:

use fsbex::{Bank, AudioFormat};
use std::{
    error::Error,
    io::{BufReader, BufWriter},
    fs::File,
};

fn main() -> Result<(), Box<dyn Error>> {
    // open file for reading sound bank
    let file = BufReader::new(File::open("example.fsb")?);
    let bank = Bank::new(file)?;

    // report number of streams contained within the sound bank
    println!("{} streams within this sound bank", bank.num_streams());

    // check stream audio format
    if bank.format() != AudioFormat::Vorbis {
        return Err("expected Vorbis format".into());
    }

    // iterate over streams
    for (index, stream) in bank.into_iter().enumerate() {
        // check stream name
        let file_name = if let Some(name) = stream.name() {
            format!("{name}.ogg")
        } else {
            format!("stream_{index}.ogg")
        };

        // write stream data to file
        let output_file = BufWriter::new(File::create(file_name)?);
        stream.write(output_file)?;
    }

    Ok(())
}

Supported formats

fsbex supports encoding stream data for the following formats:

  • PCM (8, 16, 24, 32-bit integer)
  • PCM (32-bit float)
  • Vorbis

Acknowledgements

fsbex would not be possible without these projects:

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 153

cargo fmt