diff --git a/tracker/agb-tracker/src/lib.rs b/tracker/agb-tracker/src/lib.rs index a8af2f20..d1158780 100644 --- a/tracker/agb-tracker/src/lib.rs +++ b/tracker/agb-tracker/src/lib.rs @@ -95,8 +95,8 @@ pub mod __private { pub use agb_tracker_interop::Track; /// Stores the required state in order to play tracker music. -pub struct TrackerInner<TChannelId> { - track: &'static Track, +pub struct TrackerInner<'track, TChannelId> { + track: &'track Track, channels: Vec<TrackerChannel<TChannelId>>, envelopes: Vec<Option<EnvelopeState>>, @@ -132,9 +132,9 @@ struct GlobalSettings { volume: Num<i32, 8>, } -impl<TChannelId> TrackerInner<TChannelId> { +impl<'track, TChannelId> TrackerInner<'track, TChannelId> { /// Create a new tracker playing a specified track. See the [example](crate#example) for how to use the tracker. - pub fn new(track: &'static Track) -> Self { + pub fn new(track: &'track Track) -> Self { let mut channels = Vec::new(); channels.resize_with(track.num_channels, Default::default); @@ -586,4 +586,4 @@ impl<'gba> Mixer for agb::sound::mixer::Mixer<'gba> { #[cfg(feature = "agb")] /// The type to use if you're using agb-tracker with agb -pub type Tracker = TrackerInner<agb::sound::mixer::ChannelId>; +pub type Tracker = TrackerInner<'static, agb::sound::mixer::ChannelId>; diff --git a/tracker/desktop-player/src/main.rs b/tracker/desktop-player/src/main.rs index b138e935..18d108a0 100644 --- a/tracker/desktop-player/src/main.rs +++ b/tracker/desktop-player/src/main.rs @@ -15,10 +15,10 @@ fn main() -> Result<(), Box<dyn Error>> { let file_path = &args[1]; let module = load_module_from_file(Path::new(file_path))?; - let track = Box::leak::<'static>(Box::new(agb_xm_core::parse_module(&module))); + let track = agb_xm_core::parse_module(&module); let mut mixer = Mixer::new(); - let mut tracker = agb_tracker::TrackerInner::new(track); + let mut tracker = agb_tracker::TrackerInner::new(&track); let host = cpal::default_host(); let device = host