mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
browse phrases
This commit is contained in:
parent
625956766e
commit
83830d9cb3
9 changed files with 86 additions and 84 deletions
|
|
@ -41,7 +41,7 @@ pub struct Sequencer {
|
|||
/// Phrase selector
|
||||
pub sequence: usize,
|
||||
/// Map: tick -> MIDI events at tick
|
||||
pub sequences: Vec<Phrase>,
|
||||
pub phrases: Vec<Phrase>,
|
||||
/// Red keys on piano roll.
|
||||
pub notes_on: Vec<bool>,
|
||||
/// Play sequence to output.
|
||||
|
|
@ -77,13 +77,12 @@ pub enum SequencerView {
|
|||
|
||||
impl Sequencer {
|
||||
pub fn new (
|
||||
name: &str,
|
||||
timebase: &Arc<Timebase>,
|
||||
sequences: Option<Vec<Phrase>>,
|
||||
name: &str,
|
||||
timebase: &Arc<Timebase>,
|
||||
phrases: Option<Vec<Phrase>>,
|
||||
) -> Usually<DynamicDevice<Self>> {
|
||||
let (client, _status) = Client::new(name, ClientOptions::NO_START_SERVER)?;
|
||||
let transport = client.transport();
|
||||
let ppq = timebase.ppq() as u32;
|
||||
DynamicDevice::new(render, handle, process, Self {
|
||||
name: name.into(),
|
||||
midi_in: client.register_port("in", MidiIn::default())?,
|
||||
|
|
@ -93,7 +92,7 @@ impl Sequencer {
|
|||
steps: 16,
|
||||
resolution: 4,
|
||||
sequence: 0,
|
||||
sequences: sequences.unwrap_or(vec![]),
|
||||
phrases: phrases.unwrap_or(vec![]),
|
||||
notes_on: vec![false;128],
|
||||
|
||||
playing: TransportState::Starting,
|
||||
|
|
@ -111,7 +110,7 @@ impl Sequencer {
|
|||
}
|
||||
|
||||
pub fn phrase <'a> (&'a self) -> Option<&'a Phrase> {
|
||||
self.sequences.get(self.sequence)
|
||||
self.phrases.get(self.sequence)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -219,7 +218,7 @@ pub fn draw_mon (buf: &mut Buffer, x: u16, y: u16, on: bool) {
|
|||
fn draw_clips (s: &Sequencer, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
|
||||
let Rect { x, y, .. } = area;
|
||||
let style = Style::default().gray();
|
||||
for (i, sequence) in s.sequences.iter().enumerate() {
|
||||
for (i, sequence) in s.phrases.iter().enumerate() {
|
||||
let label = format!("▶ {}", &sequence.name);
|
||||
label.blit(buf, x + 2, y + 3 + (i as u16)*2, Some(if i == s.sequence {
|
||||
match s.playing {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue