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

@ -116,7 +116,7 @@ impl Scene {
Edn::Map(map) => {
let key = map.get(&Edn::Key(":name"));
if let Some(Edn::Str(n)) = key {
name = Some(String::from(*n));
name = Some(*n);
} else {
panic!("unexpected key in scene '{name:?}': {key:?}")
}
@ -129,25 +129,23 @@ impl Scene {
},
_ => panic!("unexpected in scene '{name:?}': {edn:?}")
});
app.add_scene_with_clips(name.as_deref(), &clips)
//for edn in args {
//match end {
//}
//}
let scene = app.arranger.scene_add(name)?;
scene.clips = clips;
Ok(scene)
}
}
impl Track {
fn load_edn <'a, 'e> (app: &'a mut App, args: &[Edn<'e>]) -> Usually<&'a mut Self> {
let ppq = app.transport.ppq();
let mut name = app.new_track_name();
let mut name = None;
let mut _gain = 0.0f64;
let mut devices: Vec<JackDevice> = vec![];
let mut phrases: Vec<Phrase> = vec![];
edn!(edn in args {
Edn::Map(map) => {
if let Some(Edn::Str(n)) = map.get(&Edn::Key(":name")) {
name = String::from(*n);
name = Some(*n);
}
if let Some(Edn::Double(g)) = map.get(&Edn::Key(":gain")) {
_gain = f64::from(*g)
@ -163,12 +161,17 @@ impl Track {
Some(Edn::Symbol("lv2")) => {
devices.push(LV2Plugin::load_edn(&args[1..])?)
},
None => panic!("empty list track {name}"),
_ => panic!("unexpected in track {name}: {:?}", args.get(0).unwrap())
None => panic!("empty list track {}",
name.unwrap_or("")
),
_ => panic!("unexpected in track {}: {:?}",
name.unwrap_or(""),
args.get(0).unwrap()
)
},
_ => {}
});
let track = app.add_track(Some(name.as_str()))?;
let track = app.arranger.track_add(name)?;
for phrase in phrases { track.phrases.push(phrase); }
for device in devices { track.add_device(device)?; }
Ok(track)
@ -214,8 +217,8 @@ impl Phrase {
args.get(1),
) {
let (key, vel) = (
u7::from((*key as u8).min(127)),
u7::from((*vel as u8).min(127))
u7::from((*key as u8).min(127)),
u7::from((*vel as u8).min(127)),
);
phrase.notes[time].push(MidiMessage::NoteOn { key, vel })
} else {