48 lines
1,017 B
Rust
48 lines
1,017 B
Rust
use std::path::PathBuf;
|
|
|
|
use zerocopy::TryFromBytes;
|
|
|
|
pub struct MusicFile {
|
|
pub path: PathBuf,
|
|
pub soundtrack_index: u32,
|
|
pub soundtrack_name: String,
|
|
pub index: u32,
|
|
}
|
|
|
|
// https://xboxdevwiki.net/Soundtracks#ST.DB
|
|
|
|
#[derive(Debug, TryFromBytes)]
|
|
#[repr(C)]
|
|
pub struct Header {
|
|
pub magic: i32,
|
|
pub num_soundtracks: i32,
|
|
pub next_soundtrack_id: i32,
|
|
pub soundtrack_ids: [i32; 100],
|
|
pub next_song_id: i32,
|
|
pub padding: [char; 24],
|
|
}
|
|
|
|
#[derive(Debug, TryFromBytes)]
|
|
#[repr(C)]
|
|
pub struct Soundtrack {
|
|
pub magic: i32,
|
|
pub id: i32,
|
|
pub num_songs: u32,
|
|
pub song_groups_ids: [i32; 84],
|
|
pub total_time_miliseconds: i32,
|
|
pub name: [[u8; 2]; 32],
|
|
pub padding: [char; 24],
|
|
}
|
|
|
|
#[derive(Debug, TryFromBytes)]
|
|
#[repr(C)]
|
|
pub struct Song {
|
|
pub magic: i32,
|
|
pub soundtrack_id: i32,
|
|
pub id: i32,
|
|
pub ipadding: i32,
|
|
pub song_id: [i32; 6],
|
|
pub song_time_miliseconds: [i32; 6],
|
|
pub song_name: [[u8; 2]; 192],
|
|
pub cpadding: [char; 16],
|
|
}
|