move all port connections to constructors (port: impl AsRef<str>)

This commit is contained in:
🪞👃🪞 2024-12-29 20:15:12 +01:00
parent e8b97bed37
commit 6607491f16
9 changed files with 215 additions and 129 deletions

View file

@ -20,30 +20,50 @@ pub struct GrooveboxTui {
pub midi_buf: Vec<Vec<Vec<u8>>>,
pub perf: PerfModel,
}
impl GrooveboxTui {
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)?;
//jack.connect_midi_from(&player.midi_ins[0], &midi_from)?;
//jack.connect_midi_from(&sampler.midi_in, &midi_from)?;
//jack.connect_midi_to(&player.midi_outs[0], &midi_to)?;
//jack.connect_audio_from(&sampler.audio_ins[0], &audio_from[0])?;
//jack.connect_audio_from(&sampler.audio_ins[1], &audio_from[1])?;
//jack.connect_audio_to(&sampler.audio_outs[0], &audio_to[0])?;
//jack.connect_audio_to(&sampler.audio_outs[1], &audio_to[1])?;
from_jack!(|jack|GrooveboxTui {
let mut player = MidiPlayer::new(jack, "sequencer")?;
let phrase = Arc::new(RwLock::new(MidiClip::new(
"New", 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())));
let pool = crate::pool::PoolModel::from(&phrase);
let editor = crate::midi::MidiEditorModel::from(&phrase);
let sampler = crate::sampler::Sampler::new(jack, "sampler")?;
Self {
_jack: jack.clone(),
player,
pool,
editor,
sampler,
size: Measure::new(),
midi_buf: vec![vec![];65536],
note_buf: vec![],
perf: PerfModel::default(),
status: true,
let phrase = Arc::new(RwLock::new(MidiClip::new(
"New", 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())));
let pool = crate::pool::PoolModel::from(&phrase);
let editor = crate::midi::MidiEditorModel::from(&phrase);
Ok(Self {
_jack: jack.clone(),
player,
pool,
editor,
sampler,
size: Measure::new(),
midi_buf: vec![vec![];65536],
note_buf: vec![],
perf: PerfModel::default(),
status: true,
})
}
});
}
has_clock!(|self: GrooveboxTui|self.player.clock());
audio!(|self: GrooveboxTui, client, scope|{
let t0 = self.perf.get_t0();