Skip to main content

maolan_engine/
lib.rs

1mod audio;
2pub mod client;
3mod engine;
4pub use engine::Engine;
5pub mod history;
6mod hw;
7pub mod kind;
8pub mod message;
9mod midi;
10pub mod mutex;
11mod osc;
12pub mod plugins;
13mod routing;
14#[cfg(unix)]
15mod rubberband;
16pub mod simd;
17pub mod state;
18mod track;
19pub mod workers;
20pub use workers::worker;
21
22pub use plugins::clap_proc;
23#[cfg(all(unix, not(target_os = "macos")))]
24pub use plugins::lv2_proc;
25pub use plugins::vst3_proc;
26
27// Re-export plugin info/state types for backward compatibility with the DAW
28// and internal engine code.
29pub mod clap {
30    pub use crate::plugins::types::is_supported_clap_binary;
31    pub use crate::plugins::types::{
32        ClapMidiOutputEvent, ClapParameterInfo, ClapPluginInfo, ClapPluginState,
33    };
34}
35pub mod vst3 {
36    pub use crate::plugins::types::{Vst3PluginInfo, Vst3PluginState};
37    pub mod interfaces {
38        pub use crate::plugins::types::Vst3GuiInfo;
39    }
40    pub mod port {
41        pub use crate::plugins::types::ParameterInfo;
42    }
43    pub mod state {
44        pub use crate::plugins::types::Vst3PluginState;
45    }
46}
47#[cfg(all(unix, not(target_os = "macos")))]
48pub mod lv2 {
49    pub use crate::plugins::types::Lv2PluginInfo;
50}
51
52use tokio::sync::mpsc::{Sender, channel};
53use tokio::task::JoinHandle;
54
55#[cfg(target_os = "macos")]
56pub fn discover_coreaudio_devices() -> Vec<String> {
57    hw::coreaudio::device::list_devices()
58        .into_iter()
59        .map(|d| d.name)
60        .collect()
61}
62
63pub fn init() -> (Sender<message::Message>, JoinHandle<()>) {
64    let (tx, rx) = channel::<message::Message>(32);
65    let mut engine = engine::Engine::new(rx, tx.clone());
66    let handle = tokio::spawn(async move {
67        engine.init().await;
68        engine.work().await;
69    });
70    (tx.clone(), handle)
71}