auto add track midi in/out

This commit is contained in:
🪞👃🪞 2025-01-16 20:11:30 +01:00
parent 9b549d7dfe
commit 1463460c4f

View file

@ -241,26 +241,47 @@ impl Tek {
Ok(()) Ok(())
} }
fn tracks_add ( fn tracks_add (
&mut self, &mut self, count: usize, width: usize,
count: usize, midi_from: &[PortConnection], midi_to: &[PortConnection],
width: usize,
midi_from: &[PortConnection],
midi_to: &[PortConnection],
) -> Usually<()> { ) -> Usually<()> {
let jack = self.jack().clone(); let jack = self.jack().clone();
let track_color_1 = ItemColor::random(); let track_color_1 = ItemColor::random();
let track_color_2 = ItemColor::random(); let track_color_2 = ItemColor::random();
for i in 0..count { for i in 0..count {
let color = track_color_1.mix(track_color_2, i as f32 / count as f32).into(); let color = track_color_1.mix(track_color_2, i as f32 / count as f32).into();
let mut track = self.track_add(None, Some(color))?.1; let mut track = self.track_add(None, Some(color), midi_from, midi_to)?.1;
track.width = width; track.width = width;
let port = JackPort::<MidiIn>::new(&jack, &format!("{}I", &track.name), midi_from)?;
track.player.midi_ins.push(port);
let port = JackPort::<MidiOut>::new(&jack, &format!("{}O", &track.name), midi_to)?;
track.player.midi_outs.push(port);
} }
Ok(()) Ok(())
} }
fn track_add (
&mut self, name: Option<&str>, color: Option<ItemPalette>,
midi_from: &[PortConnection], midi_to: &[PortConnection],
) -> Usually<(usize, &mut Track)> {
let name = name.map_or_else(||self.track_next_name(), |x|x.to_string().into());
let mut track = Track {
width: (name.len() + 2).max(9),
color: color.unwrap_or_else(ItemPalette::random),
player: MidiPlayer::from(self.clock()),
name,
..Default::default()
};
track.player.midi_ins.push(JackPort::<MidiIn>::new(
&self.jack, &format!("{}I", &track.name), midi_from
)?);
track.player.midi_outs.push(JackPort::<MidiOut>::new(
&self.jack, &format!("{}O", &track.name), midi_to
)?);
self.tracks_mut().push(track);
let len = self.tracks().len();
let index = len - 1;
for scene in self.scenes_mut().iter_mut() {
while scene.clips.len() < len {
scene.clips.push(None);
}
}
Ok((index, &mut self.tracks_mut()[index]))
}
fn new_groovebox ( fn new_groovebox (
jack: &Arc<RwLock<JackConnection>>, jack: &Arc<RwLock<JackConnection>>,
bpm: Option<f64>, bpm: Option<f64>,
@ -315,10 +336,10 @@ impl Tek {
color: ItemPalette::random(), color: ItemPalette::random(),
clock: Clock::new(jack, bpm), clock: Clock::new(jack, bpm),
midi_ins: vec![ midi_ins: vec![
JackPort::<MidiIn>::new(jack, "mi", midi_froms)? JackPort::<MidiIn>::new(jack, "GlobalI", midi_froms)?
], ],
midi_outs: vec![ midi_outs: vec![
JackPort::<MidiOut>::new(jack, "mo", midi_tos)? JackPort::<MidiOut>::new(jack, "GlobalO", midi_tos)?
], ],
..Default::default() ..Default::default()
}; };
@ -458,29 +479,6 @@ impl Tek {
clip.write().unwrap().toggle_loop() clip.write().unwrap().toggle_loop()
} }
} }
fn track_add (
&mut self,
name: Option<&str>,
color: Option<ItemPalette>
) -> Usually<(usize, &mut Track)> {
let name = name.map_or_else(||self.track_next_name(), |x|x.to_string().into());
let track = Track {
width: (name.len() + 2).max(9),
color: color.unwrap_or_else(ItemPalette::random),
player: MidiPlayer::from(self.clock()),
name,
..Default::default()
};
self.tracks_mut().push(track);
let len = self.tracks().len();
let index = len - 1;
for scene in self.scenes_mut().iter_mut() {
while scene.clips.len() < len {
scene.clips.push(None);
}
}
Ok((index, &mut self.tracks_mut()[index]))
}
fn track_del (&mut self, index: usize) { fn track_del (&mut self, index: usize) {
self.tracks_mut().remove(index); self.tracks_mut().remove(index);
for scene in self.scenes_mut().iter_mut() { for scene in self.scenes_mut().iter_mut() {
@ -890,7 +888,7 @@ edn_command!(TrackCommand: |app: Tek| {
command!(|self: TrackCommand, app: Tek|match self { command!(|self: TrackCommand, app: Tek|match self {
Self::Add => { Self::Add => {
use Selection::*; use Selection::*;
let index = app.track_add(None, None)?.0 + 1; let index = app.track_add(None, None, &[], &[])?.0 + 1;
app.selected = match app.selected { app.selected = match app.selected {
Track(t) => Track(index), Track(t) => Track(index),
Clip(t, s) => Clip(index, s), Clip(t, s) => Clip(index, s),