This commit is contained in:
🪞👃🪞 2025-01-16 14:42:06 +01:00
parent 26562437bd
commit 525923d057

View file

@ -67,9 +67,9 @@ pub struct TekCli {
/// Multi-track MIDI sequencer.
Arranger {
/// Number of scenes
#[arg(short = 'y', long, default_value_t = 1)] scenes: usize,
#[arg(short = 'y', long, default_value_t = 1)] scenes: usize,
/// Number of tracks
#[arg(short = 'x', long, default_value_t = 1)] tracks: usize,
#[arg(short = 'x', long, default_value_t = 1)] tracks: usize,
/// Width of tracks
#[arg(short = 'w', long, default_value_t = 9)] track_width: usize,
},
@ -145,8 +145,7 @@ has_clips!(|self: Tek|self.pool.as_ref().expect("no clip pool").clips);
has_jack!(|self: Tek|&self.jack);
has_sampler!(|self: Tek|{
sampler = self.sampler;
index = self.editor.as_ref().map(|e|e.note_point()).unwrap_or(0);
});
index = self.editor.as_ref().map(|e|e.note_point()).unwrap_or(0); });
has_editor!(|self: Tek|{
editor = self.editor;
editor_w = {
@ -157,16 +156,14 @@ has_editor!(|self: Tek|{
(5 + (time_len / time_zoom)).min(size.saturating_sub(20)).max(16)
};
editor_h = 15;
is_editing = self.editing.load(Relaxed);
});
is_editing = self.editing.load(Relaxed); });
edn_provide!(# usize: |self: Tek| {
":scene" => self.selected.scene().unwrap_or(0),
":scene-next" => self.selected.scene().unwrap_or(0) + 1,
":scene-prev" => self.selected.scene().unwrap_or(0).saturating_sub(1),
":track" => self.selected.track().unwrap_or(0),
":track-next" => self.selected.track().unwrap_or(0) + 1,
":track-prev" => self.selected.track().unwrap_or(0).saturating_sub(1),
});
":track-prev" => self.selected.track().unwrap_or(0).saturating_sub(1) });
edn_view!(TuiOut: |self: Tek| self.size.of(EdnView::from_source(self, self.edn.as_ref())); {
bool {};
isize {};
@ -227,14 +224,8 @@ impl Tek {
audio_tos: &[&[PortConnection];2],
) -> Usually<Self> {
let app = Self {
edn: include_str!("./view_groovebox.edn").to_string(),
sampler: Some(Sampler::new(
jack,
&"sampler",
midi_froms,
audio_froms,
audio_tos
)?),
edn: include_str!("./view_groovebox.edn").to_string(),
sampler: Some(Sampler::new(jack, &"sampler", midi_froms, audio_froms, audio_tos)?),
..Self::new_sequencer(jack, bpm, midi_froms, midi_tos)?
};
if let Some(sampler) = app.sampler.as_ref().unwrap().midi_in.as_ref() {
@ -256,13 +247,7 @@ impl Tek {
editor: Some((&clip).into()),
editing: false.into(),
midi_buf: vec![vec![];65536],
player: Some(MidiPlayer::new(
&jack,
"sequencer",
Some(&clip),
&midi_froms,
&midi_tos
)?),
player: Some(MidiPlayer::new(&jack, "sequencer", Some(&clip), &midi_froms, &midi_tos)?),
..Self::new_clock(jack, bpm)?
})
}
@ -499,11 +484,12 @@ impl Tek {
let scenes = move||self.scenes_sizes(editing, 2, 15);
let selected_track = self.selected().track();
let selected_scene = self.selected().scene();
let border = |x|Outer(Style::default().fg(TuiTheme::g(0))).enclose(x);
(move||Align::c(Map::new(tracks, move|(_, track, x1, x2), t| {
let w = (x2 - x1) as u16;
let color: ItemPalette = track.color.dark.into();
let last_color = Arc::new(RwLock::new(ItemPalette::from(Color::Rgb(0, 0, 0))));
let cells = Map::new(scenes, move|(_, scene, y1, y2), s| {
map_east(x1 as u16, w, border(Map::new(scenes, move|(_, scene, y1, y2), s| {
let h = (1 + y2 - y1) as u16;
let color = scene.color;
let (name, fg, bg) = if let Some(c) = &scene.clips[t] {
@ -530,9 +516,7 @@ impl Tek {
let cell = Either::new(active, editor, cell);
*last_color.write().unwrap() = bg.into();
map_south(y1 as u16, h, Push::y(1, Fixed::y(h, cell)))
});
map_east(x1 as u16, w,
Outer(Style::default().fg(TuiTheme::g(0))).enclose(cells)).boxed()
}))).boxed()
})).boxed()).into()
}
fn activate (&mut self) -> Usually<()> {