wip: updates to module architecture

This commit is contained in:
🪞👃🪞 2024-12-27 15:50:06 +01:00
parent e08a79b507
commit 8652a5e415
6 changed files with 52 additions and 57 deletions

View file

@ -1,4 +1,4 @@
use tek::{*, jack::*};
use tek::{*, jack::*, plugin::*, audio::*};
use std::sync::{Arc, RwLock};
use std::collections::BTreeMap;

View file

@ -5,5 +5,9 @@ mod audio_in;
mod audio_out;
mod sampler;
pub(crate) use sampler::*;
pub(crate) use self::sampler::*;
pub use self::sampler::{Sampler, Sample, Voice};
mod mixer;
pub(crate) use self::mixer::*;
pub use self::mixer::{Mixer, MixerTrack, MixerTrackDevice};

View file

@ -1,27 +0,0 @@
use crate::*;
pub enum MixerTrackCommand {}
/// A mixer track.
#[derive(Debug)]
pub struct MixerTrack {
pub name: String,
/// Inputs of 1st device
pub audio_ins: Vec<Port<AudioIn>>,
/// Outputs of last device
pub audio_outs: Vec<Port<AudioOut>>,
/// Device chain
pub devices: Vec<Box<dyn MixerTrackDevice>>,
}
//impl MixerTrackDevice for LV2Plugin {}
pub trait MixerTrackDevice: Debug + Send + Sync {
fn boxed (self) -> Box<dyn MixerTrackDevice> where Self: Sized + 'static {
Box::new(self)
}
}
impl MixerTrackDevice for Sampler {}
impl MixerTrackDevice for Plugin {}

View file

@ -8,8 +8,30 @@ pub struct Mixer {
pub selected_track: usize,
pub selected_column: usize,
}
pub struct MixerAudio {
model: Arc<RwLock<Mixer>>
audio!(|self: Mixer, _client, _scope|Control::Continue);
pub enum MixerTrackCommand {}
/// A mixer track.
#[derive(Debug)]
pub struct MixerTrack {
pub name: String,
/// Inputs of 1st device
pub audio_ins: Vec<Port<AudioIn>>,
/// Outputs of last device
pub audio_outs: Vec<Port<AudioOut>>,
/// Device chain
pub devices: Vec<Box<dyn MixerTrackDevice>>,
}
from!(|mode: &Arc<RwLock<Mixer>>| MixerAudio = Self { model: model.clone() });
audio!(|self: MixerAudio, _, _|Control::Continue);
//impl MixerTrackDevice for LV2Plugin {}
pub trait MixerTrackDevice: Debug + Send + Sync {
fn boxed (self) -> Box<dyn MixerTrackDevice> where Self: Sized + 'static {
Box::new(self)
}
}
impl MixerTrackDevice for Sampler {}
impl MixerTrackDevice for Plugin {}

View file

@ -2,30 +2,27 @@
#![allow(clippy::unit_arg)]
pub mod core; pub use self::core::*;
pub mod time; pub(crate) use self::time::*;
pub mod space; pub(crate) use self::space::*;
pub mod tui; pub(crate) use self::tui::*;
pub use tui::{Tui, TransportTui, SequencerTui, SamplerTui, GrooveboxTui, ArrangerTui};
pub mod tui; pub(crate) use self::tui::*; pub use tui::*;
pub mod jack; pub(crate) use self::jack::*;
pub use jack::JackClient;
pub mod jack; pub(crate) use self::jack::*; pub use self::jack::*;
pub mod midi; pub(crate) use self::midi::*;
pub mod midi; pub(crate) use self::midi::*;
pub mod audio; pub(crate) use self::audio::*;
pub use audio::{Sampler, Sample, Voice};
pub mod audio; pub(crate) use self::audio::*; pub use self::audio::*;
//pub mod plugin; pub(crate) use self::plugin::*;
pub mod plugin; pub(crate) use self::plugin::*; pub use self::plugin::*;
pub use ::better_panic;
pub(crate) use better_panic::{Settings, Verbosity};
pub use ::better_panic; pub(crate) use better_panic::{Settings, Verbosity};
pub use ::atomic_float;
pub(crate) use atomic_float::*;
pub use ::atomic_float; pub(crate) use atomic_float::*;
pub(crate) use std::sync::{Arc, Mutex, RwLock};
#[allow(unused)] pub(crate) use std::sync::atomic::Ordering;
pub(crate) use std::sync::atomic::Ordering;
pub(crate) use std::sync::atomic::{AtomicBool, AtomicUsize};
pub(crate) use std::collections::BTreeMap;
pub(crate) use std::marker::PhantomData;
@ -36,30 +33,27 @@ pub(crate) use std::time::Duration;
pub(crate) use std::io::{Stdout, stdout};
pub(crate) use std::ops::{Add, Sub, Mul, Div, Rem};
pub(crate) use std::cmp::{Ord, Eq, PartialEq};
pub(crate) use std::fmt::{Debug, Display};
pub(crate) use std::fmt::{Debug, Display, Formatter};
pub use ::crossterm;
pub(crate) use crossterm::{ExecutableCommand};
pub(crate) use crossterm::terminal::{EnterAlternateScreen, LeaveAlternateScreen, enable_raw_mode, disable_raw_mode};
pub(crate) use crossterm::event::{KeyCode, KeyModifiers, KeyEvent, KeyEventKind, KeyEventState};
pub use ::ratatui;
pub(crate) use ratatui::{
pub use ::ratatui; pub(crate) use ratatui::{
prelude::{Style, Color, Buffer},
style::{Stylize, Modifier},
backend::{Backend, CrosstermBackend, ClearType}
};
pub use ::midly::{self, num::u7};
pub(crate) use ::midly::{
pub use ::midly::{self, num::u7}; pub(crate) use ::midly::{
Smf,
MidiMessage,
TrackEventKind,
live::LiveEvent,
};
pub use ::palette;
pub(crate) use ::palette::{
pub use ::palette; pub(crate) use ::palette::{
*,
convert::*,
okhsl::*

View file

@ -1,6 +1,8 @@
pub(crate) mod lv2; pub(crate) use lv2::*;
use crate::*;
pub mod lv2; pub(crate) use lv2::*;
pub use self::lv2::LV2Plugin;
/// A plugin device.
#[derive(Debug)]
pub struct Plugin {
@ -22,12 +24,12 @@ pub struct Plugin {
pub enum PluginKind {
#[default] None,
LV2(LV2Plugin),
VST2 { instance: ::vst::host::PluginInstance },
VST2 { instance: () /*::vst::host::PluginInstance*/ },
VST3,
}
impl Debug for PluginKind {
fn fmt (&self, f: &mut Formatter<'_>) -> std::result::Result<(), Error> {
fn fmt (&self, f: &mut Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
write!(f, "{}", match self {
Self::None => "(none)",
Self::LV2(_) => "LV2",
@ -77,7 +79,7 @@ impl Plugin {
pub struct PluginAudio(Arc<RwLock<Plugin>>);
from!(|model: &Arc<RwLock<Plugin>>| PluginAudio = Self(model.clone()));
audio!(|self: PluginAudio, client_, _scope|{
audio!(|self: PluginAudio, client, scope|{
let state = &mut*self.0.write().unwrap();
match state.plugin.as_mut() {
Some(PluginKind::LV2(LV2Plugin {