mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
auto add track midi in/out
This commit is contained in:
parent
9b549d7dfe
commit
1463460c4f
1 changed files with 35 additions and 37 deletions
|
|
@ -241,26 +241,47 @@ impl Tek {
|
|||
Ok(())
|
||||
}
|
||||
fn tracks_add (
|
||||
&mut self,
|
||||
count: usize,
|
||||
width: usize,
|
||||
midi_from: &[PortConnection],
|
||||
midi_to: &[PortConnection],
|
||||
&mut self, count: usize, width: usize,
|
||||
midi_from: &[PortConnection], midi_to: &[PortConnection],
|
||||
) -> Usually<()> {
|
||||
let jack = self.jack().clone();
|
||||
let track_color_1 = ItemColor::random();
|
||||
let track_color_2 = ItemColor::random();
|
||||
for i in 0..count {
|
||||
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 color = track_color_1.mix(track_color_2, i as f32 / count as f32).into();
|
||||
let mut track = self.track_add(None, Some(color), midi_from, midi_to)?.1;
|
||||
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(())
|
||||
}
|
||||
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 (
|
||||
jack: &Arc<RwLock<JackConnection>>,
|
||||
bpm: Option<f64>,
|
||||
|
|
@ -315,10 +336,10 @@ impl Tek {
|
|||
color: ItemPalette::random(),
|
||||
clock: Clock::new(jack, bpm),
|
||||
midi_ins: vec![
|
||||
JackPort::<MidiIn>::new(jack, "mi", midi_froms)?
|
||||
JackPort::<MidiIn>::new(jack, "GlobalI", midi_froms)?
|
||||
],
|
||||
midi_outs: vec![
|
||||
JackPort::<MidiOut>::new(jack, "mo", midi_tos)?
|
||||
JackPort::<MidiOut>::new(jack, "GlobalO", midi_tos)?
|
||||
],
|
||||
..Default::default()
|
||||
};
|
||||
|
|
@ -458,29 +479,6 @@ impl Tek {
|
|||
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) {
|
||||
self.tracks_mut().remove(index);
|
||||
for scene in self.scenes_mut().iter_mut() {
|
||||
|
|
@ -890,7 +888,7 @@ edn_command!(TrackCommand: |app: Tek| {
|
|||
command!(|self: TrackCommand, app: Tek|match self {
|
||||
Self::Add => {
|
||||
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 {
|
||||
Track(t) => Track(index),
|
||||
Clip(t, s) => Clip(index, s),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue