Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
3.5 kB · 101 lines
Rust
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102use std::{num::NonZero, time::Duration};
use cpal::traits::{DeviceTrait, HostTrait};use torque_tracker_engine::{ AudioManager, OutputConfig, PlaybackSettings, ToWorkerMsg, audio_processing::Interpolation, project::{ event_command::NoteCommand, note_event::{Note, NoteEvent, VolumeEffect}, pattern::{InPatternPosition, PatternOperation}, song::{PatternOrder, Song, SongOperation}, }, sample::{Sample, SampleMetaData, VibratoWave},};
fn main() { let mut manager = AudioManager::new(Song::default()); let mut reader = hound::WavReader::open("test-files/770_Hz_Tone.wav").unwrap(); let spec = reader.spec(); println!("sample specs: {spec:?}"); assert!(spec.channels == 1); let sample_data = reader .samples::<i16>() .map(|result| <f32 as dasp_sample::Sample>::from_sample(result.unwrap())); let sample = Sample::new_mono(sample_data); let meta = SampleMetaData { sample_rate: NonZero::new(spec.sample_rate).unwrap(), base_note: Note::new(64).unwrap(), default_volume: 20, global_volume: 20, default_pan: None, vibrato_speed: 0, vibrato_depth: 0, vibrato_rate: 0, vibrato_waveform: VibratoWave::default(), };
let mut song = manager.try_edit_song().unwrap(); song.apply_operation(SongOperation::SetSample(0, meta, sample)) .unwrap(); for i in 0..12 { let command = PatternOperation::SetEvent { position: InPatternPosition { row: i * 2, channel: i as u8, }, event: NoteEvent { note: Note::new(60 + (i as u8) * 2).unwrap(), sample_instr: 0, vol: VolumeEffect::None, command: NoteCommand::None, }, }; song.apply_operation(SongOperation::PatternOperation(0, command)) .unwrap(); } song.apply_operation(SongOperation::SetOrder(0, PatternOrder::Number(0))) .unwrap();
song.finish();
let host = cpal::default_host(); let default_device = host.default_output_device().unwrap(); let default_config = default_device.default_output_config().unwrap(); println!("default config {:?}", default_config); println!("device: {:?}", default_device.name()); let config = OutputConfig { buffer_size: 1024, sample_rate: NonZero::new(default_config.sample_rate().0).unwrap(), interpolation: Interpolation::Linear, };
let (mut callback, _, mut status, mut send) = manager.get_callback::<()>(config, ()); let _stream = default_device .build_output_stream( &default_config.config(), move |data, _| { if let Some(finished) = callback.render(data.len(), ()) { let (stereo, []) = data.as_chunks_mut::<2>() else { panic!(); }; stereo .iter_mut() .zip(finished.iter().copied()) .for_each(|(out, rendered)| *out = rendered.into()); } }, |e| eprintln!("{e:?}"), None, ) .unwrap();
send.try_msg_worker(ToWorkerMsg::Playback(PlaybackSettings::Pattern { idx: 0, should_loop: true, })) .unwrap();
std::thread::sleep(Duration::from_secs(5)); println!("{:?}", *(status.try_get().unwrap()));}