mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
add Arranger model
This commit is contained in:
parent
c85fa3cd06
commit
20e30cb472
14 changed files with 310 additions and 241 deletions
29
src/edn.rs
29
src/edn.rs
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue