mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
65 lines
2.3 KiB
Rust
65 lines
2.3 KiB
Rust
//! ***Tek*** is a MIDI sequencer, sampler, and audio plugin host for the Linux terminal.
|
|
|
|
//#[global_allocator]
|
|
//static A: rlsf::SmallGlobalTlsf = rlsf::SmallGlobalTlsf::new();
|
|
//#![feature(fn_traits)]
|
|
//#![feature(unboxed_closures)]
|
|
#![allow(macro_expanded_macro_exports_accessed_by_absolute_paths)]
|
|
#![allow(ambiguous_glob_reexports)]
|
|
|
|
pub(crate) use tek_core::{*, jack::*};
|
|
pub(crate) use tek_sequencer::*;
|
|
pub(crate) use tek_mixer::*;
|
|
pub(crate) use microxdg::XdgApp;
|
|
|
|
submod! {
|
|
app
|
|
app_focus
|
|
app_paths
|
|
cli
|
|
control
|
|
edn
|
|
help
|
|
setup
|
|
}
|
|
|
|
/// Global modal dialog
|
|
pub static MODAL: Lazy<Arc<Mutex<Option<Box<dyn ExitableComponent>>>>> =
|
|
Lazy::new(||Arc::new(Mutex::new(None)));
|
|
|
|
/// Application entrypoint.
|
|
pub fn main () -> Usually<()> {
|
|
run(App::from_edn(include_str!("../example.edn"))?
|
|
.activate(Some(|app: &Arc<RwLock<App>>|Ok({
|
|
let (midi_in, mut midi_outs) = {
|
|
let app = app.read().unwrap();
|
|
let jack = app.jack.as_ref().unwrap();
|
|
let midi_in = jack.register_port("midi-in", MidiIn)?;
|
|
let midi_outs = app.arranger.tracks.iter()
|
|
.map(|t|Some(jack.register_port(&t.name.read().unwrap(), MidiOut).unwrap()))
|
|
.collect::<Vec<_>>();
|
|
(midi_in, midi_outs)
|
|
};
|
|
{
|
|
let mut app = app.write().unwrap();
|
|
let jack = app.jack.as_ref().unwrap();
|
|
for name in app.midi_ins.iter() {
|
|
let ports = jack.client().ports(Some(name), None, PortFlags::empty());
|
|
for port in ports.iter() {
|
|
if let Some(port) = jack.client().port_by_name(port) {
|
|
jack.client().connect_ports(&port, &midi_in)?;
|
|
}
|
|
}
|
|
}
|
|
app.midi_in = Some(Arc::new(midi_in));
|
|
for (index, track) in app.arranger.tracks.iter_mut().enumerate() {
|
|
track.midi_out = midi_outs[index].take();
|
|
}
|
|
//for track in app.arranger.tracks.iter() {
|
|
//track.connect_first_device()?;
|
|
//track.connect_last_device(&app)?;
|
|
//}
|
|
};
|
|
})))?)?;
|
|
Ok(())
|
|
}
|