diff --git a/crates/tek_sequencer/src/sequencer_cmd.rs b/crates/tek_sequencer/src/sequencer_cmd.rs index 6176dc9d..82e186f5 100644 --- a/crates/tek_sequencer/src/sequencer_cmd.rs +++ b/crates/tek_sequencer/src/sequencer_cmd.rs @@ -127,7 +127,8 @@ impl Handle for PhraseEditor { }, key!(KeyCode::Char('a')) => if self.entered { self.put(); - self.time_axis.point = self.time_axis.point.map(|time|{time + self.note_len}); + self.time_axis.point = self.time_axis.point.map(|time|(time + self.note_len) + % self.phrase.as_ref().map(|p|p.read().unwrap().length).unwrap_or(1)); }, key!(KeyCode::Char('s')) => if self.entered { self.put(); diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index ea0937d6..d1d6a014 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -165,8 +165,10 @@ impl PhraseEditor { let mut phrase = phrase.write().unwrap(); let key: u7 = u7::from((127 - note) as u8); let vel: u7 = 100.into(); + let start = time; + let end = (start + self.note_len) % phrase.length; phrase.notes[time].push(MidiMessage::NoteOn { key, vel }); - phrase.notes[time + self.note_len].push(MidiMessage::NoteOff { key, vel }); + phrase.notes[end].push(MidiMessage::NoteOff { key, vel }); self.buffer = Self::redraw(&phrase); } }