refactor control and sequencer rendering

This commit is contained in:
🪞👃🪞 2024-07-07 23:28:07 +03:00
parent 20b7267225
commit 14d9116c7c
10 changed files with 370 additions and 405 deletions

View file

@ -87,15 +87,6 @@ pub fn main () -> Usually<()> {
sample!(44, "Hihat", "/home/user/Lab/Music/pak/chh2.wav"),
])))?, |track, device|{
device.connect_midi_in(0, &track.midi_out.clone_unowned())?;
Ok(())
})?;
track.add_device_with_cb(Plugin::lv2(
"Panagement",
"file:///home/user/.lv2/Auburn Sounds Panagement 2.lv2"
)?, |track, device|{
device.connect_audio_in(0, &track.devices[0].audio_outs()?[0])?;
device.connect_audio_in(0, &track.devices[0].audio_outs()?[1])?;
if let Some(Some(left)) = audio_outs.get(0) {
device.connect_audio_out(0, left)?;
}
@ -105,6 +96,21 @@ pub fn main () -> Usually<()> {
Ok(())
})?;
//track.add_device_with_cb(Plugin::lv2(
//"Panagement",
//"file:///home/user/.lv2/Auburn Sounds Panagement 2.lv2"
//)?, |track, device|{
//device.connect_audio_in(0, &track.devices[0].audio_outs()?[0])?;
//device.connect_audio_in(0, &track.devices[0].audio_outs()?[1])?;
//if let Some(Some(left)) = audio_outs.get(0) {
//device.connect_audio_out(0, left)?;
//}
//if let Some(Some(right)) = audio_outs.get(0) {
//device.connect_audio_out(1, right)?;
//}
//Ok(())
//})?;
track.sequence = Some(1); // FIXME
track.add_phrase("4 kicks", ppq * 4, Some(phrase! {
@ -122,9 +128,18 @@ pub fn main () -> Usually<()> {
}));
track.add_phrase("D-Beat", ppq * 4, Some(phrase! {
00 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
04 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
08 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
02 * ppq/4 => MidiMessage::NoteOn { key: 42.into(), vel: 100.into() },
04 * ppq/4 => MidiMessage::NoteOn { key: 42.into(), vel: 100.into() },
06 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
08 * ppq/4 => MidiMessage::NoteOn { key: 42.into(), vel: 100.into() },
10 * ppq/4 => MidiMessage::NoteOn { key: 42.into(), vel: 100.into() },
12 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
13 * ppq/4 => MidiMessage::NoteOn { key: 42.into(), vel: 100.into() },
14 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
15 * ppq/4 => MidiMessage::NoteOn { key: 42.into(), vel: 100.into() },
00 * ppq/4 => MidiMessage::NoteOn { key: 34.into(), vel: 100.into() },
04 * ppq/4 => MidiMessage::NoteOn { key: 38.into(), vel: 100.into() },
08 * ppq/4 => MidiMessage::NoteOn { key: 34.into(), vel: 100.into() },
10 * ppq/4 => MidiMessage::NoteOn { key: 35.into(), vel: 100.into() },
12 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
}));
@ -168,46 +183,53 @@ pub fn main () -> Usually<()> {
Ok(())
})?;
track.sequence = Some(0); // FIXME
track.add_phrase("Custom", ppq * 4, None);
track.add_phrase("Offbeat", ppq * 4, Some(phrase! {
00 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
02 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
04 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
06 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
08 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
10 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
12 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
14 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
//00 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
//02 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
//04 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
//06 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
//08 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
//10 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
//12 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() },
//14 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
}));
track.add_phrase("Custom1", ppq * 4, None);
track.add_phrase("Custom2", ppq * 4, None);
track.add_phrase("Custom3", ppq * 4, None);
track.add_phrase("Custom4", ppq * 4, None);
Ok(())
})?;
state.add_track_with_cb(Some("Lead"), |_, track|{
//track.add_device_with_cb(Plugin::lv2(
//"Helm",
//"file:///home/user/.lv2/Helm.lv2"
//)?, |track, device|{
//device.connect_midi_in(0, &track.midi_out.clone_unowned())?;
//if let Some(Some(left)) = audio_outs.get(0) {
//device.connect_audio_out(0, left)?;
//}
//if let Some(Some(right)) = audio_outs.get(0) {
//device.connect_audio_out(1, right)?;
//}
//Ok(())
//})?;
track.add_device_with_cb(Plugin::lv2(
"Odin2",
"file:///home/user/.lv2/Odin2.lv2"
)?, |track, device|{
device.connect_midi_in(0, &track.midi_out.clone_unowned())?;
if let Some(Some(left)) = audio_outs.get(0) {
device.connect_audio_out(0, left)?;
}
if let Some(Some(right)) = audio_outs.get(0) {
device.connect_audio_out(1, right)?;
}
Ok(())
})?;
track.sequence = Some(0); // FIXME
track.add_phrase("Custom", ppq * 4, None);
track.add_phrase("Custom0", ppq * 4, None);
track.add_phrase("Custom1", ppq * 4, None);
track.add_phrase("Custom2", ppq * 4, None);
track.add_phrase("Custom3", ppq * 4, None);
track.add_phrase("Custom4", ppq * 4, None);
Ok(())
})?;
state.scenes = vec![
Scene::new("Intro", vec![None, Some(0), None, None]),
Scene::new("Hook", vec![Some(0), Some(1), None, None]),
Scene::new("Verse", vec![Some(2), Some(0), Some(0), None]),
Scene::new("Chorus", vec![Some(1), Some(1), None, None]),
Scene::new("Bridge", vec![Some(3), Some(0), Some(0), None]),
Scene::new("Outro", vec![None, Some(1), None, None]),
Scene::new("Hook", vec![Some(0), Some(1), Some(0), None]),
Scene::new("Verse", vec![Some(2), Some(2), Some(1), None]),
Scene::new("Chorus", vec![Some(1), Some(3), Some(2), None]),
Scene::new("Bridge", vec![Some(3), Some(4), Some(3), None]),
Scene::new("Outro", vec![None, Some(1), Some(4), None]),
];
Ok(())