mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
62 lines
2.1 KiB
Rust
62 lines
2.1 KiB
Rust
mod groovebox_audio; pub use self::groovebox_audio::*;
|
|
mod groovebox_command; pub use self::groovebox_command::*;
|
|
mod groovebox_tui; pub use self::groovebox_tui::*;
|
|
mod groovebox_edn; pub use self::groovebox_edn::*;
|
|
|
|
use crate::*;
|
|
use super::*;
|
|
use KeyCode::{Char, Delete, Tab, Up, Down, Left, Right};
|
|
use ClockCommand::{Play, Pause};
|
|
use GrooveboxCommand as Cmd;
|
|
use MidiEditCommand::*;
|
|
use PhrasePoolCommand::*;
|
|
|
|
pub struct Groovebox {
|
|
_jack: Arc<RwLock<JackConnection>>,
|
|
pub player: MidiPlayer,
|
|
pub pool: PoolModel,
|
|
pub editor: MidiEditor,
|
|
pub sampler: Sampler,
|
|
|
|
pub compact: bool,
|
|
pub size: Measure<TuiOut>,
|
|
pub status: bool,
|
|
pub note_buf: Vec<u8>,
|
|
pub midi_buf: Vec<Vec<Vec<u8>>>,
|
|
pub perf: PerfModel,
|
|
}
|
|
has_clock!(|self: Groovebox|self.player.clock());
|
|
impl Groovebox {
|
|
pub fn new (
|
|
jack: &Arc<RwLock<JackConnection>>,
|
|
midi_from: &[impl AsRef<str>],
|
|
midi_to: &[impl AsRef<str>],
|
|
audio_from: &[&[impl AsRef<str>];2],
|
|
audio_to: &[&[impl AsRef<str>];2],
|
|
) -> Usually<Self> {
|
|
let sampler = crate::sampler::Sampler::new(jack, &"sampler", midi_from, audio_from, audio_to)?;
|
|
let mut player = crate::midi::MidiPlayer::new(jack, &"sequencer", &midi_from, &midi_to)?;
|
|
jack.read().unwrap().client().connect_ports(&player.midi_outs[0], &sampler.midi_in)?;
|
|
let phrase = Arc::new(RwLock::new(MidiClip::new(
|
|
"Clip", true, 4 * player.clock.timebase.ppq.get() as usize,
|
|
None, Some(ItemColor::random().into())
|
|
)));
|
|
player.play_phrase = Some((Moment::zero(&player.clock.timebase), Some(phrase.clone())));
|
|
Ok(Self {
|
|
player,
|
|
sampler,
|
|
_jack: jack.clone(),
|
|
|
|
pool: crate::pool::PoolModel::from(&phrase),
|
|
editor: crate::midi::MidiEditor::from(&phrase),
|
|
|
|
compact: true,
|
|
status: true,
|
|
size: Measure::new(),
|
|
midi_buf: vec![vec![];65536],
|
|
note_buf: vec![],
|
|
perf: PerfModel::default(),
|
|
})
|
|
}
|
|
}
|
|
|