Vaguely get the correct beat and the patterns correct

This commit is contained in:
Gwilym Inzani 2023-11-01 13:28:01 +00:00
parent 64976deeb5
commit e103468b86
2 changed files with 21 additions and 6 deletions

View file

@ -190,6 +190,13 @@ pub fn parse_midi(midi_info: &MidiInfo) -> TokenStream {
}
}
patterns.retain(|pattern| {
!pattern.iter().all(|pattern_slot| {
matches!(pattern_slot.effect1, PatternEffect::None)
&& matches!(pattern_slot.effect2, PatternEffect::None)
})
});
for pattern in &mut patterns {
pattern.resize_with(current_ticks as usize, || PatternSlot {
speed: 0.into(),
@ -211,20 +218,28 @@ pub fn parse_midi(midi_info: &MidiInfo) -> TokenStream {
})
.collect();
let pattern = patterns.into_iter().flatten().collect::<Vec<_>>();
let resulting_num_channels = patterns.len();
let mut pattern = Vec::with_capacity(current_ticks as usize * resulting_num_channels);
for i in 0..current_ticks {
for pattern_slots in &patterns {
pattern.push(pattern_slots[i as usize].clone());
}
}
let track = Track {
samples: &samples,
envelopes: &[],
pattern_data: &pattern,
patterns: &[Pattern {
length: pattern.len() / channel_data.len(),
length: pattern.len() / resulting_num_channels,
start_position: 0,
}],
patterns_to_play: &[0],
num_channels: channel_data.len(),
num_channels: resulting_num_channels,
frames_per_tick: Num::from_f64(
initial_microseconds_per_beat.expect("No tempo was ever sent") as f64 / 16742.706298828, // microseconds per frame
initial_microseconds_per_beat.expect("No tempo was ever sent") as f64
/ 16742.706298828 // microseconds per frame
/ ticks_per_beat as f64,
),
ticks_per_step: 1,
repeat: 0,

View file

@ -32,7 +32,7 @@ pub struct Pattern {
pub start_position: usize,
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct PatternSlot {
pub speed: Num<u16, 8>,
pub sample: u16,
@ -48,7 +48,7 @@ pub struct Envelope<'a> {
pub loop_end: Option<usize>,
}
#[derive(Debug, Default)]
#[derive(Debug, Default, Clone)]
pub enum PatternEffect {
/// Don't play an effect
#[default]