mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
65 lines
2.1 KiB
Rust
65 lines
2.1 KiB
Rust
mod midi_clip; pub use midi_clip::*;
|
|
mod midi_launch; pub use midi_launch::*;
|
|
mod midi_player; pub use midi_player::*;
|
|
mod midi_in; pub use midi_in::*;
|
|
mod midi_out; pub use midi_out::*;
|
|
|
|
mod midi_pitch; pub use midi_pitch::*;
|
|
mod midi_range; pub use midi_range::*;
|
|
mod midi_point; pub use midi_point::*;
|
|
mod midi_view; pub use midi_view::*;
|
|
mod midi_select; pub use midi_select::*;
|
|
|
|
mod midi_pool; pub use midi_pool::*;
|
|
mod midi_pool_tui; pub use midi_pool_tui::*;
|
|
mod midi_pool_cmd; pub use midi_pool_cmd::*;
|
|
|
|
mod midi_editor; pub use midi_editor::*;
|
|
mod midi_edit_cmd; pub use midi_edit_cmd::*;
|
|
mod midi_edit_tui; pub use midi_edit_tui::*;
|
|
|
|
mod piano_h; pub use self::piano_h::*;
|
|
|
|
pub(crate) use ::tek_time::*;
|
|
pub(crate) use ::tek_jack::{*, jack::*};
|
|
pub(crate) use ::tek_tui::{
|
|
*,
|
|
tek_input::*,
|
|
tek_output::*,
|
|
tek_edn::*,
|
|
crossterm::event::*,
|
|
ratatui::style::{Style, Stylize, Color}
|
|
};
|
|
|
|
pub(crate) use std::sync::{Arc, RwLock, atomic::{AtomicUsize, AtomicBool, Ordering::Relaxed}};
|
|
pub(crate) use std::path::PathBuf;
|
|
pub(crate) use std::fmt::Debug;
|
|
|
|
pub use ::midly; pub(crate) use ::midly::{*, num::*, live::*};
|
|
|
|
/// Add "all notes off" to the start of a buffer.
|
|
pub fn all_notes_off (output: &mut [Vec<Vec<u8>>]) {
|
|
let mut buf = vec![];
|
|
let msg = MidiMessage::Controller { controller: 123.into(), value: 0.into() };
|
|
let evt = LiveEvent::Midi { channel: 0.into(), message: msg };
|
|
evt.write(&mut buf).unwrap();
|
|
output[0].push(buf);
|
|
}
|
|
|
|
/// Return boxed iterator of MIDI events
|
|
pub fn parse_midi_input <'a> (input: MidiIter<'a>) -> Box<dyn Iterator<Item=(usize, LiveEvent<'a>, &'a [u8])> + 'a> {
|
|
Box::new(input.map(|RawMidi { time, bytes }|(
|
|
time as usize,
|
|
LiveEvent::parse(bytes).unwrap(),
|
|
bytes
|
|
)))
|
|
}
|
|
|
|
/// Update notes_in array
|
|
pub fn update_keys (keys: &mut[bool;128], message: &MidiMessage) {
|
|
match message {
|
|
MidiMessage::NoteOn { key, .. } => { keys[key.as_int() as usize] = true; }
|
|
MidiMessage::NoteOff { key, .. } => { keys[key.as_int() as usize] = false; },
|
|
_ => {}
|
|
}
|
|
}
|