add Arranger model

This commit is contained in:
🪞👃🪞 2024-07-13 00:56:58 +03:00
parent c85fa3cd06
commit 20e30cb472
14 changed files with 310 additions and 241 deletions

View file

@ -1,50 +1,4 @@
use crate::{core::*, model::App};
impl App {
pub fn next_phrase (&mut self) {
if let Some((track_index, track)) = self.track_mut() {
let phrases = track.phrases.len();
if let Some((_, scene)) = self.scene_mut() {
if let Some(phrase_index) = scene.clips[track_index] {
if phrase_index >= phrases - 1 {
scene.clips[track_index] = None;
} else {
scene.clips[track_index] = Some(phrase_index + 1);
}
} else if phrases > 0 {
scene.clips[track_index] = Some(0);
}
}
}
}
pub fn prev_phrase (&mut self) {
if let Some((track_index, track)) = self.track_mut() {
let phrases = track.phrases.len();
if let Some((_, scene)) = self.scene_mut() {
if let Some(phrase_index) = scene.clips[track_index] {
scene.clips[track_index] = if phrase_index == 0 {
None
} else {
Some(phrase_index - 1)
};
} else if phrases > 0 {
scene.clips[track_index] = Some(phrases - 1);
}
}
}
}
pub fn phrase (&self) -> Option<&Phrase> {
let (track_id, track) = self.track()?;
let (_, scene) = self.scene()?;
track.phrases.get((*scene.clips.get(track_id)?)?)
}
pub fn phrase_mut (&mut self) -> Option<&mut Phrase> {
let (track_id, _) = self.track()?;
let (_, scene) = self.scene()?;
let clip = (*scene.clips.get(track_id)?)?;
self.track_mut()?.1.phrases.get_mut(clip)
}
}
use crate::core::*;
/// Define a MIDI phrase.
#[macro_export] macro_rules! phrase {