mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
draw note names
This commit is contained in:
parent
deb5348c69
commit
9b705f48e0
3 changed files with 21 additions and 19 deletions
2
Justfile
2
Justfile
|
|
@ -16,6 +16,8 @@ arranger:
|
||||||
cargo run --bin tek_arranger
|
cargo run --bin tek_arranger
|
||||||
sequencer:
|
sequencer:
|
||||||
cargo run --bin tek_sequencer
|
cargo run --bin tek_sequencer
|
||||||
|
sequencer-release:
|
||||||
|
cargo run --release --bin tek_sequencer
|
||||||
mixer:
|
mixer:
|
||||||
cargo run --bin tek_mixer
|
cargo run --bin tek_mixer
|
||||||
track:
|
track:
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ impl SequencerCli {
|
||||||
fn run (&self) -> Usually<()> {
|
fn run (&self) -> Usually<()> {
|
||||||
Tui::run(JackClient::new("tek_sequencer")?.activate_with(|jack|{
|
Tui::run(JackClient::new("tek_sequencer")?.activate_with(|jack|{
|
||||||
let mut app = SequencerTui::try_from(jack)?;
|
let mut app = SequencerTui::try_from(jack)?;
|
||||||
|
//app.editor.view_mode.set_time_zoom(1);
|
||||||
// TODO: create from arguments
|
// TODO: create from arguments
|
||||||
let midi_in = app.jack.read().unwrap().register_port("in", MidiIn::default())?;
|
let midi_in = app.jack.read().unwrap().register_port("in", MidiIn::default())?;
|
||||||
app.player.midi_ins.push(midi_in);
|
app.player.midi_ins.push(midi_in);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ pub struct PhraseEditorModel {
|
||||||
|
|
||||||
pub(crate) time_start: AtomicUsize,
|
pub(crate) time_start: AtomicUsize,
|
||||||
pub(crate) time_point: AtomicUsize,
|
pub(crate) time_point: AtomicUsize,
|
||||||
pub(crate) time_scale: AtomicUsize,
|
|
||||||
|
|
||||||
pub(crate) edit_mode: PhraseEditMode,
|
pub(crate) edit_mode: PhraseEditMode,
|
||||||
pub(crate) view_mode: PhraseViewMode,
|
pub(crate) view_mode: PhraseViewMode,
|
||||||
|
|
@ -53,10 +52,9 @@ impl std::fmt::Debug for PhraseEditorModel {
|
||||||
self.note_lo.load(Ordering::Relaxed),
|
self.note_lo.load(Ordering::Relaxed),
|
||||||
self.note_point.load(Ordering::Relaxed),
|
self.note_point.load(Ordering::Relaxed),
|
||||||
))
|
))
|
||||||
.field("time_axis", &format!("{} {} {}",
|
.field("time_axis", &format!("{} {}",
|
||||||
self.time_start.load(Ordering::Relaxed),
|
self.time_start.load(Ordering::Relaxed),
|
||||||
self.time_point.load(Ordering::Relaxed),
|
self.time_point.load(Ordering::Relaxed),
|
||||||
self.time_scale.load(Ordering::Relaxed),
|
|
||||||
))
|
))
|
||||||
.finish()
|
.finish()
|
||||||
}
|
}
|
||||||
|
|
@ -77,7 +75,6 @@ impl Default for PhraseEditorModel {
|
||||||
note_point: 0.into(),
|
note_point: 0.into(),
|
||||||
time_start: 0.into(),
|
time_start: 0.into(),
|
||||||
time_point: 0.into(),
|
time_point: 0.into(),
|
||||||
time_scale: 24.into(),
|
|
||||||
view_mode: PhraseViewMode::PianoHorizontal {
|
view_mode: PhraseViewMode::PianoHorizontal {
|
||||||
time_zoom: 24,
|
time_zoom: 24,
|
||||||
note_zoom: PhraseViewNoteZoom::N(1)
|
note_zoom: PhraseViewNoteZoom::N(1)
|
||||||
|
|
@ -240,7 +237,7 @@ render!(|self: PhraseView<'a>|{
|
||||||
Ok(())
|
Ok(())
|
||||||
}),
|
}),
|
||||||
Tui::bg(Color::Rgb(40, 50, 30), Tui::fill_x(row!([
|
Tui::bg(Color::Rgb(40, 50, 30), Tui::fill_x(row!([
|
||||||
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(2))), move|to: &mut TuiOutput|{
|
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(5))), move|to: &mut TuiOutput|{
|
||||||
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
|
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
|
||||||
}))),
|
}))),
|
||||||
Tui::fill_x(lay!([
|
Tui::fill_x(lay!([
|
||||||
|
|
@ -341,21 +338,23 @@ impl PhraseViewMode {
|
||||||
Self::PianoHorizontal { .. } => {
|
Self::PianoHorizontal { .. } => {
|
||||||
let [x0, y0, _, _] = to.area().xywh();
|
let [x0, y0, _, _] = to.area().xywh();
|
||||||
for (y, note) in (note_lo..=note_hi).rev().enumerate() {
|
for (y, note) in (note_lo..=note_hi).rev().enumerate() {
|
||||||
to.blit(&match note % 12 {
|
let key = match note % 12 {
|
||||||
11 => "██",
|
11 => "█████",
|
||||||
10 => " ",
|
10 => " ",
|
||||||
9 => "██",
|
9 => "█████",
|
||||||
8 => " ",
|
8 => " ",
|
||||||
7 => "██",
|
7 => "█████",
|
||||||
6 => " ",
|
6 => " ",
|
||||||
5 => "██",
|
5 => "█████",
|
||||||
4 => "██",
|
4 => "█████",
|
||||||
3 => " ",
|
3 => " ",
|
||||||
2 => "██",
|
2 => "█████",
|
||||||
1 => " ",
|
1 => " ",
|
||||||
0 => "██",
|
0 => "█████",
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}, x0, y0 + y as u16, style)
|
};
|
||||||
|
to.blit(&key, x0, y0 + y as u16, style);
|
||||||
|
to.blit(&format!("{}", to_note_name(note)), x0, y0 + y as u16, None);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => unimplemented!()
|
_ => unimplemented!()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue