mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-15 16:06:41 +01:00
load project from file
This commit is contained in:
parent
e2a842492e
commit
eeb2faf064
9 changed files with 320 additions and 245 deletions
268
src/main.rs
268
src/main.rs
|
|
@ -77,35 +77,20 @@ pub fn main () -> Usually<()> {
|
|||
|
||||
state.jack = Some(jack);
|
||||
|
||||
state.load_edn(include_str!("../demos/project.edn"));
|
||||
state.load_edn(include_str!("../demos/project.edn"))?;
|
||||
|
||||
state.add_track_with_cb(Some("Drums"), |_, track|{
|
||||
//state.add_track_with_cb(Some("Drums"), |_, track|{
|
||||
|
||||
track.add_device_with_cb(Sampler::new("Sampler", Some(BTreeMap::from([
|
||||
sample!(34, "808", "/home/user/Lab/Music/pak/808.wav"),
|
||||
sample!(35, "Kick1", "/home/user/Lab/Music/pak/kik.wav"),
|
||||
sample!(36, "Kick2", "/home/user/Lab/Music/pak/kik2.wav"),
|
||||
sample!(38, "Snare1", "/home/user/Lab/Music/pak/sna.wav"),
|
||||
sample!(40, "Snare2", "/home/user/Lab/Music/pak/sna2.wav"),
|
||||
sample!(42, "Hihat", "/home/user/Lab/Music/pak/chh.wav"),
|
||||
sample!(44, "Hihat", "/home/user/Lab/Music/pak/chh2.wav"),
|
||||
])))?, |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(
|
||||
//"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])?;
|
||||
//track.add_device_with_cb(Sampler::new("Sampler", Some(BTreeMap::from([
|
||||
//sample!(34, "808", "/home/user/Lab/Music/pak/808.wav"),
|
||||
//sample!(35, "Kick1", "/home/user/Lab/Music/pak/kik.wav"),
|
||||
//sample!(36, "Kick2", "/home/user/Lab/Music/pak/kik2.wav"),
|
||||
//sample!(38, "Snare1", "/home/user/Lab/Music/pak/sna.wav"),
|
||||
//sample!(40, "Snare2", "/home/user/Lab/Music/pak/sna2.wav"),
|
||||
//sample!(42, "Hihat", "/home/user/Lab/Music/pak/chh.wav"),
|
||||
//sample!(44, "Hihat", "/home/user/Lab/Music/pak/chh2.wav"),
|
||||
//])))?, |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)?;
|
||||
//}
|
||||
|
|
@ -115,117 +100,132 @@ pub fn main () -> Usually<()> {
|
|||
//Ok(())
|
||||
//})?;
|
||||
|
||||
track.sequence = Some(1); // FIXME
|
||||
////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.add_phrase("4 kicks", ppq * 4, Some(phrase! {
|
||||
00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
04 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
08 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
12 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
}));
|
||||
track.add_phrase("5 kicks", ppq * 4, Some(phrase! {
|
||||
00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
04 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
08 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
12 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
14 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
}));
|
||||
track.add_phrase("D-Beat", ppq * 4, Some(phrase! {
|
||||
00 * ppq/4 => MidiMessage::NoteOn { key: 44.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() },
|
||||
}));
|
||||
track.add_phrase("Garage", ppq * 4, Some(phrase! {
|
||||
00 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
01 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
02 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
03 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
04 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
06 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
07 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
09 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
10 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
12 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
14 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//track.sequence = Some(1); // FIXME
|
||||
|
||||
00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
00 * ppq/4 => MidiMessage::NoteOn { key: 35.into(), vel: 100.into() },
|
||||
02 * ppq/4 => MidiMessage::NoteOn { key: 34.into(), vel: 100.into() },
|
||||
07 * ppq/4 => MidiMessage::NoteOn { key: 34.into(), vel: 100.into() },
|
||||
04 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
|
||||
11 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
11 * ppq/4 => MidiMessage::NoteOn { key: 35.into(), vel: 100.into() },
|
||||
12 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
|
||||
}));
|
||||
Ok(())
|
||||
})?;
|
||||
//track.add_phrase("4 kicks", ppq * 4, Some(phrase! {
|
||||
//00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//04 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//08 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//12 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//}));
|
||||
//track.add_phrase("5 kicks", ppq * 4, Some(phrase! {
|
||||
//00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//04 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//08 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//12 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//14 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//}));
|
||||
//track.add_phrase("D-Beat", ppq * 4, Some(phrase! {
|
||||
//00 * ppq/4 => MidiMessage::NoteOn { key: 44.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() },
|
||||
//}));
|
||||
//track.add_phrase("Garage", ppq * 4, Some(phrase! {
|
||||
//00 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//01 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//02 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//03 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//04 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//06 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//07 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//09 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//10 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//12 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
//14 * ppq/4 => MidiMessage::NoteOn { key: 44.into(), vel: 100.into() },
|
||||
|
||||
state.add_track_with_cb(Some("Bass"), |_, track|{
|
||||
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("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() },
|
||||
}));
|
||||
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(())
|
||||
})?;
|
||||
//00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//00 * ppq/4 => MidiMessage::NoteOn { key: 35.into(), vel: 100.into() },
|
||||
//02 * ppq/4 => MidiMessage::NoteOn { key: 34.into(), vel: 100.into() },
|
||||
//07 * ppq/4 => MidiMessage::NoteOn { key: 34.into(), vel: 100.into() },
|
||||
//04 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
|
||||
//11 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() },
|
||||
//11 * ppq/4 => MidiMessage::NoteOn { key: 35.into(), vel: 100.into() },
|
||||
//12 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() },
|
||||
//}));
|
||||
//Ok(())
|
||||
//})?;
|
||||
|
||||
state.add_track_with_cb(Some("Lead"), |_, track|{
|
||||
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("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.add_track_with_cb(Some("Bass"), |_, track|{
|
||||
//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("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() },
|
||||
//}));
|
||||
//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(
|
||||
//"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("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]),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue