mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 04:36:45 +01:00
collect crates/ and deps/
This commit is contained in:
parent
2f8882f6cd
commit
8fa0f8a409
140 changed files with 23 additions and 21 deletions
86
crates/midi/src/lib.rs
Normal file
86
crates/midi/src/lib.rs
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
mod midi_clip; pub use midi_clip::*;
|
||||
mod midi_edit; pub use midi_edit::*;
|
||||
mod midi_in; pub use midi_in::*;
|
||||
mod midi_launch; pub use midi_launch::*;
|
||||
mod midi_out; pub use midi_out::*;
|
||||
mod midi_pitch; pub use midi_pitch::*;
|
||||
mod midi_player; pub use midi_player::*;
|
||||
mod midi_point; pub use midi_point::*;
|
||||
mod midi_pool; pub use midi_pool::*;
|
||||
mod midi_range; pub use midi_range::*;
|
||||
mod midi_view; pub use midi_view::*;
|
||||
mod piano_h; pub use self::piano_h::*;
|
||||
mod piano_v; pub use self::piano_v::*;
|
||||
|
||||
pub(crate) use ::tek_time::*;
|
||||
pub(crate) use ::tek_jack::{*, jack::*};
|
||||
pub(crate) use ::tengri::{
|
||||
input::*,
|
||||
output::*,
|
||||
dsl::*,
|
||||
tui::{
|
||||
*,
|
||||
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::*};
|
||||
|
||||
pub(crate) const KEYS_EDIT: &str = include_str!("../edn/keys_edit.edn");
|
||||
pub(crate) const KEYS_POOL: &str = include_str!("../edn/keys_pool.edn");
|
||||
pub(crate) const KEYS_FILE: &str = include_str!("../edn/keys_pool_file.edn");
|
||||
pub(crate) const KEYS_LENGTH: &str = include_str!("../edn/keys_clip_length.edn");
|
||||
pub(crate) const KEYS_RENAME: &str = include_str!("../edn/keys_clip_rename.edn");
|
||||
|
||||
/// 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; },
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)] #[test] pub fn test_midi_clip () {
|
||||
let clip = MidiClip::stop_all();
|
||||
println!("{clip:?}");
|
||||
let clip = MidiClip::default();
|
||||
let mut clip = MidiClip::new("clip", true, 1, None, None);
|
||||
clip.set_length(96);
|
||||
clip.toggle_loop();
|
||||
clip.record_event(12, midly::MidiMessage::NoteOn { key: 36.into(), vel: 100.into() });
|
||||
assert!(clip.contains_note_on(36.into(), 6, 18));
|
||||
assert_eq!(&clip.notes, &clip.duplicate().notes);
|
||||
let clip = std::sync::Arc::new(clip);
|
||||
assert_eq!(clip.clone(), clip);
|
||||
}
|
||||
#[cfg(test)] #[test] pub fn test_midi_edit () {
|
||||
let editor = MidiEditor::default();
|
||||
println!("{editor:?}");
|
||||
}
|
||||
#[cfg(test)] #[test] pub fn test_midi_player () {
|
||||
let player = MidiPlayer::default();
|
||||
println!("{player:?}");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue