Crate fsbex

source ·
Expand description

fsbex

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

Modules

  • Various types associated with encoding stream data from sound banks.

Structs

  • An FMOD sound bank.
  • Represents an error that can occur when parsing a sound bank.
  • An audio stream of data that has not been read yet.
  • Represents an error that can occur when reading sound bank streams with Bank::read_streams.
  • Loop information associated with a stream.
  • An audio stream of data that has already been read.
  • An iterator over sound bank streams.

Enums

  • Represents known audio formats of streams within a sound bank.