old school music tracker audio backend
at main 56 lines 1.7 kB view raw
1use torque_tracker_engine::{ 2 audio_processing::playback::PlaybackState, 3 file::impulse_format::header::PatternOrder, 4 manager::PlaybackSettings, 5 project::{ 6 event_command::NoteCommand, 7 note_event::{Note, NoteEvent, VolumeEffect}, 8 pattern::InPatternPosition, 9 song::Song, 10 }, 11 sample::{Sample, SampleMetaData}, 12}; 13 14fn main() { 15 let mut reader = hound::WavReader::open("test-files/770_Hz_Tone.wav").unwrap(); 16 let spec = reader.spec(); 17 println!("sample specs: {spec:?}"); 18 assert!(spec.channels == 1); 19 let sample_data = reader 20 .samples::<i16>() 21 .map(|result| <f32 as dasp::Sample>::from_sample(result.unwrap())); 22 let sample = Sample::new_mono(sample_data); 23 24 let meta = SampleMetaData { 25 sample_rate: spec.sample_rate, 26 ..Default::default() 27 }; 28 29 let mut song: Song = Song::default(); 30 song.pattern_order[0] = PatternOrder::Number(0); 31 song.samples[0] = Some((meta, sample)); 32 song.patterns[0].set_event( 33 InPatternPosition { row: 0, channel: 0 }, 34 NoteEvent { 35 note: Note::default(), 36 sample_instr: 0, 37 vol: VolumeEffect::None, 38 command: NoteCommand::None, 39 }, 40 ); 41 song.patterns[0].set_event( 42 InPatternPosition { row: 0, channel: 2 }, 43 NoteEvent { 44 note: Note::default(), 45 sample_instr: 0, 46 vol: VolumeEffect::None, 47 command: NoteCommand::None, 48 }, 49 ); 50 51 let mut playback = PlaybackState::new(&song, 44100, PlaybackSettings::default()).unwrap(); 52 let iter = playback.iter::<0>(&song); 53 for _ in iter.take(50) { 54 // dbg!(frame); 55 } 56}