ym2149_ym_replayer/
lib.rs

1//! YM File Format Parser and Music Replayer
2//!
3//! This crate provides YM music file parsing and playback for YM2149 PSG chips.
4//! It supports YM2/3/5/6 file formats, tracker modes, and various effects.
5//!
6//! # Features
7//!
8//! - YM2/3/5/6 file format parsing with LHA decompression
9//! - Generic over YM2149 backend (hardware-accurate or experimental)
10//! - Tracker mode support (YMT1/YMT2)
11//! - Mad Max digi-drums
12//! - YM6 effects (SID voice, Sync Buzzer)
13//! - Optional streaming audio output
14//! - Optional WAV/MP3 export
15//!
16//! # Example
17//!
18//! ```no_run
19//! use ym2149_ym_replayer::{load_song, PlaybackController};
20//!
21//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
22//! let data = std::fs::read("song.ym")?;
23//! let (mut player, summary) = load_song(&data)?;
24//! player.play()?;
25//!
26//! let samples = player.generate_samples(44100);
27//! # Ok(())
28//! # }
29//! ```
30
31#![warn(missing_docs)]
32
33// Error handling
34mod error;
35pub use error::{ReplayerError, Result};
36
37// Core modules
38pub mod compression;
39pub mod loader;
40pub mod parser;
41
42// Re-export commonly used types
43pub use compression::decompress_if_needed;
44pub use loader::{load_bytes, load_file};
45pub use parser::{
46    EffectCommand, RawParser, Ym6EffectDecoder, Ym6Parser, YmMetadata, YmParser, decode_effects_ym5,
47};
48
49// Player module - YM music playback engine
50pub mod player;
51
52// Re-export player types
53pub use player::{
54    CycleCounter, EffectsManager, LoadSummary, PlaybackController, PlaybackState, Player,
55    TimingConfig, VblSync, Ym6Info, Ym6Metadata, Ym6Player, YmFileFormat, YmPlayer,
56    YmPlayerGeneric, load_song, load_song_with_rate,
57};
58
59// Re-export unified player trait from ym2149-common
60pub use ym2149_common::{ChiptunePlayer, PlaybackMetadata};