mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +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(())
|
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),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue