mirror of
https://github.com/dredozubov/polyrhythmix.git
synced 2024-11-25 21:37:43 +00:00
refactor flatten_and_merge
This commit is contained in:
parent
6a7e9cf0a9
commit
970c0a0b9a
1 changed files with 15 additions and 50 deletions
|
@ -707,7 +707,7 @@ fn test_event_iterator_impl() {
|
||||||
/// Calling .collect() on this EventIterator should produce an `EventGrid`.
|
/// Calling .collect() on this EventIterator should produce an `EventGrid`.
|
||||||
///
|
///
|
||||||
/// Returns time as a number of ticks from beginning, has to be turned into the midi delta-time.
|
/// Returns time as a number of ticks from beginning, has to be turned into the midi delta-time.
|
||||||
fn flatten_and_merge(
|
fn flatten_to_iterator(
|
||||||
groups: BTreeMap<Part, Groups>,
|
groups: BTreeMap<Part, Groups>,
|
||||||
time_signature: TimeSignature,
|
time_signature: TimeSignature,
|
||||||
) -> EventIterator {
|
) -> EventIterator {
|
||||||
|
@ -728,56 +728,21 @@ fn flatten_and_merge(
|
||||||
}
|
}
|
||||||
|
|
||||||
let length_limit = converges_over_bars * time_signature.to_128th();
|
let length_limit = converges_over_bars * time_signature.to_128th();
|
||||||
let (kick_grid, kick_repeats) = match groups.get(&KickDrum) {
|
let flatten = |part| {
|
||||||
|
match groups.get(part) {
|
||||||
Some(groups) => {
|
Some(groups) => {
|
||||||
let length_128th = length_map.get(&KickDrum).unwrap();
|
let length_128th = length_map.get(part).unwrap();
|
||||||
let number_of_groups = groups.0.len();
|
|
||||||
let times = length_limit / length_128th;
|
let times = length_limit / length_128th;
|
||||||
(
|
(flatten_groups(*part, groups), times)
|
||||||
flatten_groups(KickDrum, groups),
|
|
||||||
number_of_groups * times as usize,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
None => (EventGrid::empty(), 0),
|
None => (EventGrid::empty(), 0),
|
||||||
};
|
|
||||||
let (snare_grid, snare_repeats) = match groups.get(&SnareDrum) {
|
|
||||||
Some(groups) => {
|
|
||||||
let length_128th = length_map.get(&SnareDrum).unwrap();
|
|
||||||
let number_of_groups = groups.0.len();
|
|
||||||
let times = length_limit / length_128th;
|
|
||||||
(
|
|
||||||
flatten_groups(SnareDrum, groups),
|
|
||||||
number_of_groups * times as usize,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
None => (EventGrid::empty(), 0),
|
|
||||||
};
|
};
|
||||||
let (hihat_grid, hihat_repeats) = match groups.get(&HiHat) {
|
|
||||||
Some(groups) => {
|
let (kick_grid, kick_repeats) = flatten(&KickDrum);
|
||||||
let length_128th = length_map.get(&HiHat).unwrap();
|
let (snare_grid, snare_repeats) = flatten(&SnareDrum);
|
||||||
let number_of_groups = groups.0.len();
|
let (hihat_grid, hihat_repeats) = flatten(&HiHat);
|
||||||
let times = length_limit / length_128th;
|
let (crash_grid, crash_repeats) = flatten(&CrashCymbal);
|
||||||
(
|
|
||||||
flatten_groups(HiHat, groups),
|
|
||||||
number_of_groups * times as usize,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
None => (EventGrid::empty(), 0),
|
|
||||||
};
|
|
||||||
let (crash_grid, crash_repeats) = match groups.get(&CrashCymbal) {
|
|
||||||
Some(groups) => {
|
|
||||||
let length_128th = length_map.get(&CrashCymbal).unwrap();
|
|
||||||
println!("Crash length: {}", length_128th);
|
|
||||||
let number_of_groups = groups.0.len();
|
|
||||||
let times = length_limit / length_128th;
|
|
||||||
(
|
|
||||||
flatten_groups(CrashCymbal, groups),
|
|
||||||
number_of_groups * times as usize, // suspect, gives 2 instead of one for 4/4 crash
|
|
||||||
)
|
|
||||||
}
|
|
||||||
None => (EventGrid::empty(), 0),
|
|
||||||
};
|
|
||||||
println!("Crash grid: {:?}\n crash_repeats: {}", crash_grid, crash_repeats);
|
|
||||||
|
|
||||||
EventIterator::new(
|
EventIterator::new(
|
||||||
cycle_grid(kick_grid, Times(kick_repeats as u16)),
|
cycle_grid(kick_grid, Times(kick_repeats as u16)),
|
||||||
|
@ -860,7 +825,7 @@ fn create_tracks<'a>(
|
||||||
text_event: &'a str,
|
text_event: &'a str,
|
||||||
midi_tempo: MidiTempo
|
midi_tempo: MidiTempo
|
||||||
) -> Vec<Vec<midly::TrackEvent<'a>>> {
|
) -> Vec<Vec<midly::TrackEvent<'a>>> {
|
||||||
let events_iter = flatten_and_merge(parts_and_groups, time_signature);
|
let events_iter = flatten_to_iterator(parts_and_groups, time_signature);
|
||||||
let events: Vec<Event<Tick>> = events_iter.collect();
|
let events: Vec<Event<Tick>> = events_iter.collect();
|
||||||
// Notice this time can be incorrect, but it shouldn't matter.
|
// Notice this time can be incorrect, but it shouldn't matter.
|
||||||
let time = match events.last() {
|
let time = match events.last() {
|
||||||
|
|
Loading…
Reference in a new issue