show sample names

This commit is contained in:
🪞👃🪞 2025-01-02 19:09:25 +01:00
parent 511ff91864
commit 5bc19a45d2
8 changed files with 23 additions and 25 deletions

View file

@ -76,7 +76,7 @@ impl ArrangerTui {
from_jack!(|jack| ArrangerTui { from_jack!(|jack| ArrangerTui {
let clock = Clock::from(jack); let clock = Clock::from(jack);
let phrase = Arc::new(RwLock::new(MidiClip::new( let phrase = Arc::new(RwLock::new(MidiClip::new(
"New", true, 4 * clock.timebase.ppq.get() as usize, "Clip", true, 4 * clock.timebase.ppq.get() as usize,
None, Some(ItemColor::random().into()) None, Some(ItemColor::random().into())
))); )));
Self { Self {

View file

@ -31,7 +31,7 @@ pub trait BorderStyle: Send + Sync + Copy {
Bordered(self, w) Bordered(self, w)
} }
fn enclose <W: Content<Tui>> (self, w: W) -> impl Content<Tui> { fn enclose <W: Content<Tui>> (self, w: W) -> impl Content<Tui> {
Tui::bg(self.style().unwrap().bg.unwrap(), lay!(Fill::xy(Border(self)), w)) Tui::bg(self.style().unwrap().bg.unwrap_or(Color::Reset), lay!(Fill::xy(Border(self)), w))
} }
const NW: &'static str = ""; const NW: &'static str = "";
const N: &'static str = ""; const N: &'static str = "";

View file

@ -33,7 +33,7 @@ impl Groovebox {
let mut player = crate::midi::MidiPlayer::new(jack, &"sequencer", &midi_from, &midi_to)?; let mut player = crate::midi::MidiPlayer::new(jack, &"sequencer", &midi_from, &midi_to)?;
jack.read().unwrap().client().connect_ports(&player.midi_outs[0], &sampler.midi_in)?; jack.read().unwrap().client().connect_ports(&player.midi_outs[0], &sampler.midi_in)?;
let phrase = Arc::new(RwLock::new(MidiClip::new( let phrase = Arc::new(RwLock::new(MidiClip::new(
"New", true, 4 * player.clock.timebase.ppq.get() as usize, "Clip", true, 4 * player.clock.timebase.ppq.get() as usize,
None, Some(ItemColor::random().into()) None, Some(ItemColor::random().into())
))); )));
player.play_phrase = Some((Moment::zero(&player.clock.timebase), Some(phrase.clone()))); player.play_phrase = Some((Moment::zero(&player.clock.timebase), Some(phrase.clone())));
@ -112,16 +112,13 @@ render!(Tui: (self: Groovebox) => {
Bsp::s( Bsp::s(
lay!(Align::w(edit_clip), Align::e(selectors)), lay!(Align::w(edit_clip), Align::e(selectors)),
Bsp::n( Bsp::n(
Bsp::a( Max::y(sample_h, Fill::xy(if let Some((_, sample)) = &self.sampler.recording {
Outer(Style::default().fg(TuiTheme::g(128))), SampleViewer(Some(sample.clone()))
Fill::x(Fixed::y(sample_h, if let Some((_, sample)) = &self.sampler.recording { } else if let Some(sample) = &self.sampler.mapped[note_pt] {
SampleViewer(Some(sample.clone())) SampleViewer(Some(sample.clone()))
} else if let Some(sample) = &self.sampler.mapped[note_pt] { } else {
SampleViewer(Some(sample.clone())) SampleViewer(None)
} else { })),
SampleViewer(None)
})),
),
Bsp::n( Bsp::n(
lay!( lay!(
Align::w(Fixed::y(1, SamplerStatus(&self.sampler, note_pt))), Align::w(Fixed::y(1, SamplerStatus(&self.sampler, note_pt))),

View file

@ -147,10 +147,10 @@ fn to_phrases_command (state: &PoolModel, input: &TuiIn) -> Option<PoolCommand>
return None return None
}, },
key_pat!(Char('a')) | key_pat!(Shift-Char('A')) => Cmd::Phrase(PhrasePoolCommand::Add(count, MidiClip::new( key_pat!(Char('a')) | key_pat!(Shift-Char('A')) => Cmd::Phrase(PhrasePoolCommand::Add(count, MidiClip::new(
String::from("(new)"), true, 4 * PPQ, None, Some(ItemPalette::random()) String::from("Clip"), true, 4 * PPQ, None, Some(ItemPalette::random())
))), ))),
key_pat!(Char('i')) => Cmd::Phrase(PhrasePoolCommand::Add(index + 1, MidiClip::new( key_pat!(Char('i')) => Cmd::Phrase(PhrasePoolCommand::Add(index + 1, MidiClip::new(
String::from("(new)"), true, 4 * PPQ, None, Some(ItemPalette::random()) String::from("Clip"), true, 4 * PPQ, None, Some(ItemPalette::random())
))), ))),
key_pat!(Char('d')) | key_pat!(Shift-Char('D')) => { key_pat!(Char('d')) | key_pat!(Shift-Char('D')) => {
let mut phrase = state.phrases()[index].read().unwrap().duplicate(); let mut phrase = state.phrases()[index].read().unwrap().duplicate();

View file

@ -74,7 +74,7 @@ impl Sampler {
pub fn begin_recording (&mut self, index: usize) { pub fn begin_recording (&mut self, index: usize) {
self.recording = Some(( self.recording = Some((
index, index,
Arc::new(RwLock::new(Sample::new("(new)", 0, 0, vec![vec![];self.audio_ins.len()]))) Arc::new(RwLock::new(Sample::new("Sample", 0, 0, vec![vec![];self.audio_ins.len()])))
)); ));
} }
pub fn finish_recording (&mut self) -> Option<Arc<RwLock<Sample>>> { pub fn finish_recording (&mut self) -> Option<Arc<RwLock<Sample>>> {

View file

@ -23,22 +23,23 @@ render!(Tui: (self: SampleList<'a>) => {
let mut bg = if note == note_pt { TuiTheme::g(64) } else { Color::Reset }; let mut bg = if note == note_pt { TuiTheme::g(64) } else { Color::Reset };
let mut fg = TuiTheme::g(160); let mut fg = TuiTheme::g(160);
if sampler.mapped[note].is_some() {
fg = TuiTheme::g(224);
bg = Color::Rgb(0, if note == note_pt { 96 } else { 64 }, 0);
}
if let Some((index, _)) = sampler.recording { if let Some((index, _)) = sampler.recording {
if note == index { if note == index {
bg = Color::Rgb(64,16,0); bg = if note == note_pt { Color::Rgb(96,24,0) } else { Color::Rgb(64,16,0) };
fg = Color::Rgb(224,64,32) fg = Color::Rgb(224,64,32)
} }
} else if sampler.mapped[note].is_some() {
fg = TuiTheme::g(224);
} }
offset(Tui::fg_bg(fg, bg, format!("{note:3} {}", if *compact { offset(Tui::fg_bg(fg, bg, format!("{note:3} {}", if *compact {
"" String::default()
} else if let Some(sample) = &sampler.mapped[note] { } else if let Some(sample) = &sampler.mapped[note] {
"??????" sample.read().unwrap().name.clone()
} else { } else {
"(none)" String::from("(none)")
}))) })))
})) }))
}); });

View file

@ -19,7 +19,7 @@ render!(Tui: |self: SampleViewer, to|{
let end = sample.end as f64; let end = sample.end as f64;
let length = end - start; let length = end - start;
let step = length / width as f64; let step = length / width as f64;
let mut t = start; let mut t = start;
let mut lines = vec![]; let mut lines = vec![];
while t < end { while t < end {
let chunk = &sample.channels[0][t as usize..((t + step) as usize).min(sample.end)]; let chunk = &sample.channels[0][t as usize..((t + step) as usize).min(sample.end)];

View file

@ -24,7 +24,7 @@ pub struct SequencerTui {
from_jack!(|jack|SequencerTui { from_jack!(|jack|SequencerTui {
let clock = Clock::from(jack); let clock = Clock::from(jack);
let phrase = Arc::new(RwLock::new(MidiClip::new( let phrase = Arc::new(RwLock::new(MidiClip::new(
"New", true, 4 * clock.timebase.ppq.get() as usize, "Clip", true, 4 * clock.timebase.ppq.get() as usize,
None, Some(ItemColor::random().into()) None, Some(ItemColor::random().into())
))); )));
Self { Self {