mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
fix connecting track devices
This commit is contained in:
parent
eeb2faf064
commit
14b504374f
4 changed files with 52 additions and 27 deletions
|
|
@ -1,27 +1,17 @@
|
||||||
(bpm 150)
|
(bpm 150)
|
||||||
|
|
||||||
(track { :name "Drums" :gain +0.0 }
|
(track { :name "Drums" :gain +0.0 }
|
||||||
|
|
||||||
(sampler { :name "DrumKit1" :dir "/home/user/Lab/Music/pak" }
|
|
||||||
(sample { :midi 34 :name "808" :file "808.wav" })
|
|
||||||
(sample { :midi 35 :name "KC1" :file "kik.wav" })
|
|
||||||
(sample { :midi 36 :name "KC2" :file "kik2.wav" })
|
|
||||||
(sample { :midi 38 :name "SN1" :file "sna.wav" })
|
|
||||||
(sample { :midi 40 :name "SN2" :file "sna2.wav" })
|
|
||||||
(sample { :midi 42 :name "HH1" :file "chh.wav" })
|
|
||||||
(sample { :midi 44 :name "HH2" :file "chh2.wav" }))
|
|
||||||
|
|
||||||
(phrase { :name "4 kicks" :beats 4 :steps 16 }
|
(phrase { :name "4 kicks" :beats 4 :steps 16 }
|
||||||
(:00 (36 128))
|
(:00 (36 128))
|
||||||
(:04 (36 128))
|
(:04 (36 100))
|
||||||
(:08 (36 128))
|
(:08 (36 100))
|
||||||
(:12 (36 128)))
|
(:12 (36 100)))
|
||||||
(phrase { :name "5 kicks" :beats 4 :steps 16 }
|
(phrase { :name "5 kicks" :beats 4 :steps 16 }
|
||||||
(:00 (36 128))
|
(:00 (36 128))
|
||||||
(:04 (36 128))
|
(:04 (36 100))
|
||||||
(:08 (36 128))
|
(:08 (36 128))
|
||||||
(:12 (36 128))
|
(:12 (36 100))
|
||||||
(:14 (36 128)))
|
(:14 (36 110)))
|
||||||
(phrase { :name "D Beat" :beats 4 })
|
(phrase { :name "D Beat" :beats 4 })
|
||||||
;(:00 (44 :100) (:34 :100) (:35 :100))
|
;(:00 (44 :100) (:34 :100) (:35 :100))
|
||||||
;(:02 (42 :100) )
|
;(:02 (42 :100) )
|
||||||
|
|
@ -45,7 +35,15 @@
|
||||||
(:10 (44 100))
|
(:10 (44 100))
|
||||||
(:11 (35 100) (36 100))
|
(:11 (35 100) (36 100))
|
||||||
(:12 (44 100) (40 100))
|
(:12 (44 100) (40 100))
|
||||||
(:14 (44 100))))
|
(:14 (44 100)))
|
||||||
|
(sampler { :name "DrumKit1" :dir "/home/user/Lab/Music/pak" }
|
||||||
|
(sample { :midi 34 :name "808" :file "808.wav" })
|
||||||
|
(sample { :midi 35 :name "KC1" :file "kik.wav" })
|
||||||
|
(sample { :midi 36 :name "KC2" :file "kik2.wav" })
|
||||||
|
(sample { :midi 38 :name "SN1" :file "sna.wav" })
|
||||||
|
(sample { :midi 40 :name "SN2" :file "sna2.wav" })
|
||||||
|
(sample { :midi 42 :name "HH1" :file "chh.wav" })
|
||||||
|
(sample { :midi 44 :name "HH2" :file "chh2.wav" })))
|
||||||
|
|
||||||
(track { :name "Bass" :gain +0.0 }
|
(track { :name "Bass" :gain +0.0 }
|
||||||
(phrase { :name "Bass 1" :beats 4 })
|
(phrase { :name "Bass 1" :beats 4 })
|
||||||
|
|
@ -55,7 +53,11 @@
|
||||||
(phrase { :name "Bass 5" :beats 4 })
|
(phrase { :name "Bass 5" :beats 4 })
|
||||||
(phrase { :name "Bass 6" :beats 4 })
|
(phrase { :name "Bass 6" :beats 4 })
|
||||||
(phrase { :name "Bass 7" :beats 4 })
|
(phrase { :name "Bass 7" :beats 4 })
|
||||||
(phrase { :name "Bass 8" :beats 4 }))
|
(phrase { :name "Bass 8" :beats 4 })
|
||||||
|
(lv2 {
|
||||||
|
:name "Odin2"
|
||||||
|
:path "file:///home/user/.lv2/Odin2.lv2"
|
||||||
|
}))
|
||||||
|
|
||||||
(track { :name "Lead" :gain +0.0 }
|
(track { :name "Lead" :gain +0.0 }
|
||||||
(phrase { :name "Lead 1" :beats 4 })
|
(phrase { :name "Lead 1" :beats 4 })
|
||||||
|
|
@ -65,4 +67,8 @@
|
||||||
(phrase { :name "Lead 5" :beats 4 })
|
(phrase { :name "Lead 5" :beats 4 })
|
||||||
(phrase { :name "Lead 6" :beats 4 })
|
(phrase { :name "Lead 6" :beats 4 })
|
||||||
(phrase { :name "Lead 7" :beats 4 })
|
(phrase { :name "Lead 7" :beats 4 })
|
||||||
(phrase { :name "Lead 8" :beats 4 }))
|
(phrase { :name "Lead 8" :beats 4 })
|
||||||
|
(lv2 {
|
||||||
|
:name "Odin2"
|
||||||
|
:path "file:///home/user/.lv2/Odin2.lv2"
|
||||||
|
}))
|
||||||
|
|
|
||||||
26
src/edn.rs
26
src/edn.rs
|
|
@ -83,12 +83,24 @@ impl Track {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let (left, right) = (app.audio_out(0), app.audio_out(1));
|
||||||
app.add_track_with_cb(Some(name.as_str()), move|_, track|{
|
app.add_track_with_cb(Some(name.as_str()), move|_, track|{
|
||||||
for phrase in phrases {
|
for phrase in phrases {
|
||||||
track.phrases.push(phrase);
|
track.phrases.push(phrase);
|
||||||
}
|
}
|
||||||
for device in devices {
|
for device in devices {
|
||||||
track.add_device(device);
|
track.add_device(device)?;
|
||||||
|
}
|
||||||
|
if let Some(device) = track.devices.get(0) {
|
||||||
|
device.connect_midi_in(0, &track.midi_out.clone_unowned())?;
|
||||||
|
}
|
||||||
|
if let Some(device) = track.devices.get(track.devices.len() - 1) {
|
||||||
|
if let Some(ref left) = left {
|
||||||
|
device.connect_audio_out(0, left)?;
|
||||||
|
}
|
||||||
|
if let Some(ref right) = right {
|
||||||
|
device.connect_audio_out(1, right)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
|
|
@ -133,10 +145,12 @@ impl Phrase {
|
||||||
if !data.contains_key(&time) {
|
if !data.contains_key(&time) {
|
||||||
data.insert(time, vec![]);
|
data.insert(time, vec![]);
|
||||||
}
|
}
|
||||||
data.get_mut(&time).unwrap().push(MidiMessage::NoteOn {
|
let (key, vel) = (
|
||||||
key: u7::from(*key as u8),
|
u7::from((*key as u8).min(127)),
|
||||||
vel: u7::from(*vel as u8),
|
u7::from((*vel as u8).min(127))
|
||||||
});
|
);
|
||||||
|
data.get_mut(&time).unwrap()
|
||||||
|
.push(MidiMessage::NoteOn { key, vel })
|
||||||
} else {
|
} else {
|
||||||
panic!("unexpected list in phrase '{name}'")
|
panic!("unexpected list in phrase '{name}'")
|
||||||
},
|
},
|
||||||
|
|
@ -228,7 +242,7 @@ impl LV2Plugin {
|
||||||
path = String::from(*p);
|
path = String::from(*p);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => panic!("unexpected in sample {name}"),
|
_ => panic!("unexpected in lv2 '{name}'"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Plugin::lv2(&name, &path)
|
Plugin::lv2(&name, &path)
|
||||||
|
|
|
||||||
|
|
@ -66,13 +66,15 @@ pub fn main () -> Usually<()> {
|
||||||
.collect::<Usually<()>>())
|
.collect::<Usually<()>>())
|
||||||
.collect::<Usually<()>>()?;
|
.collect::<Usually<()>>()?;
|
||||||
|
|
||||||
let audio_outs: Vec<_> = audio_into
|
state.audio_outs = audio_into
|
||||||
.iter()
|
.iter()
|
||||||
.map(|name|client
|
.map(|name|client
|
||||||
.ports(Some(name), None, PortFlags::empty())
|
.ports(Some(name), None, PortFlags::empty())
|
||||||
.get(0)
|
.get(0)
|
||||||
.map(|name|client.port_by_name(name)))
|
.map(|name|client.port_by_name(name)))
|
||||||
.flatten()
|
.flatten()
|
||||||
|
.filter_map(|x|x)
|
||||||
|
.map(Arc::new)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
state.jack = Some(jack);
|
state.jack = Some(jack);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ pub struct App {
|
||||||
/// Main MIDI controller.
|
/// Main MIDI controller.
|
||||||
pub midi_in: Option<Port<MidiIn>>,
|
pub midi_in: Option<Port<MidiIn>>,
|
||||||
/// Main audio outputs.
|
/// Main audio outputs.
|
||||||
pub audio_outs: Option<Vec<Port<AudioOut>>>,
|
pub audio_outs: Vec<Arc<Port<Unowned>>>,
|
||||||
/// JACK transport handle.
|
/// JACK transport handle.
|
||||||
pub transport: Option<Transport>,
|
pub transport: Option<Transport>,
|
||||||
/// Current transport state
|
/// Current transport state
|
||||||
|
|
@ -124,6 +124,9 @@ impl App {
|
||||||
reset, current_frames as usize, current_usecs as usize, next_usecs as usize, period_usecs as f64
|
reset, current_frames as usize, current_usecs as usize, next_usecs as usize, period_usecs as f64
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
pub fn audio_out (&self, index: usize) -> Option<Arc<Port<Unowned>>> {
|
||||||
|
self.audio_outs.get(index).map(|x|x.clone())
|
||||||
|
}
|
||||||
pub fn client (&self) -> &Client {
|
pub fn client (&self) -> &Client {
|
||||||
self.jack.as_ref().unwrap().as_client()
|
self.jack.as_ref().unwrap().as_client()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue