mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 03:36:41 +01:00
groovebox: reenable pool
This commit is contained in:
parent
872c2d94d6
commit
d7bbc2a412
6 changed files with 73 additions and 94 deletions
|
|
@ -72,43 +72,24 @@ pub enum LaunchMode {
|
|||
|
||||
impl Cli {
|
||||
pub fn run (&self) -> Usually<()> {
|
||||
let name = self.name.as_ref().map_or("tek", |x|x.as_str());
|
||||
let mode = &self.mode;
|
||||
let empty = &[] as &[&str];
|
||||
let midi_froms = PortConnect::collect(&self.midi_from, empty, &self.midi_from_re);
|
||||
let midi_tos = PortConnect::collect(&self.midi_to, empty, &self.midi_to_re);
|
||||
let left_froms = PortConnect::collect(&self.left_from, empty, empty);
|
||||
let left_tos = PortConnect::collect(&self.left_to, empty, empty);
|
||||
let right_froms = PortConnect::collect(&self.right_from, empty, empty);
|
||||
let right_tos = PortConnect::collect(&self.right_to, empty, empty);
|
||||
let audio_froms = &[left_froms.as_slice(), right_froms.as_slice()];
|
||||
let audio_tos = &[left_tos.as_slice(), right_tos.as_slice()];
|
||||
let clip = match mode {
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox =>
|
||||
Some(Arc::new(RwLock::new(MidiClip::new(
|
||||
"Clip", true, 384usize, None, Some(ItemColor::random().into())),
|
||||
))),
|
||||
_ => None,
|
||||
};
|
||||
let scenes = vec![];
|
||||
let mut tracks = vec![];
|
||||
match mode {
|
||||
LaunchMode::Sequencer => tracks.push(Track::new(
|
||||
&name, None, jack,
|
||||
Some(&clock), clip.as_ref(),
|
||||
midi_froms.as_slice(), midi_tos.as_slice()
|
||||
)?),
|
||||
LaunchMode::Groovebox | LaunchMode::Sampler => tracks.push(Track::new_with_sampler(
|
||||
&name, None, jack,
|
||||
Some(&clock), clip.as_ref(),
|
||||
midi_froms.as_slice(), midi_tos.as_slice(),
|
||||
audio_froms, audio_tos,
|
||||
)?),
|
||||
_ => {}
|
||||
}
|
||||
let name = self.name.as_ref().map_or("tek", |x|x.as_str());
|
||||
let empty = &[] as &[&str];
|
||||
let mut midi_ins = vec![];
|
||||
let mut midi_outs = vec![];
|
||||
let mut tracks = vec![];
|
||||
let mut scenes = vec![];
|
||||
let midi_froms = PortConnect::collect(&self.midi_from, empty, &self.midi_from_re);
|
||||
let midi_tos = PortConnect::collect(&self.midi_to, empty, &self.midi_to_re);
|
||||
let left_froms = PortConnect::collect(&self.left_from, empty, empty);
|
||||
let left_tos = PortConnect::collect(&self.left_to, empty, empty);
|
||||
let right_froms = PortConnect::collect(&self.right_from, empty, empty);
|
||||
let right_tos = PortConnect::collect(&self.right_to, empty, empty);
|
||||
let audio_froms = &[left_froms.as_slice(), right_froms.as_slice()];
|
||||
let audio_tos = &[left_tos.as_slice(), right_tos.as_slice()];
|
||||
let clip = Arc::new(RwLock::new(MidiClip::new(
|
||||
"Clip", true, 384usize, None, Some(ItemColor::random().into())),
|
||||
));
|
||||
Tui::new()?.run(&Jack::new(name)?.run(|jack|{
|
||||
let mut midi_ins = vec![];
|
||||
let mut midi_outs = vec![];
|
||||
for (index, connect) in midi_froms.iter().enumerate() {
|
||||
let port = JackMidiIn::new(jack, &format!("M/{index}"), &[connect.clone()])?;
|
||||
midi_ins.push(port);
|
||||
|
|
@ -117,53 +98,57 @@ impl Cli {
|
|||
let port = JackMidiOut::new(jack, &format!("{index}/M"), &[connect.clone()])?;
|
||||
midi_outs.push(port);
|
||||
};
|
||||
let config_path = match mode {
|
||||
let config = Configuration::new(&match self.mode {
|
||||
LaunchMode::Clock => "config/config_transport.edn",
|
||||
LaunchMode::Sequencer => "config/config_sequencer.edn",
|
||||
LaunchMode::Groovebox => "config/config_groovebox.edn",
|
||||
LaunchMode::Arranger { .. } => "config/config_arranger.edn",
|
||||
LaunchMode::Sampler => "config/config_sampler.edn",
|
||||
_ => todo!("{mode:?}"),
|
||||
};
|
||||
let config = Configuration::new(&config_path, false)?;
|
||||
let clock = Clock::new(jack, self.bpm)?;
|
||||
_ => todo!("{:?}", self.mode),
|
||||
}, false)?;
|
||||
let clock = Clock::new(jack, self.bpm)?;
|
||||
match self.mode {
|
||||
LaunchMode::Sequencer => tracks.push(Track::new(
|
||||
&name, None, jack, Some(&clock), Some(&clip),
|
||||
midi_froms.as_slice(), midi_tos.as_slice()
|
||||
)?),
|
||||
LaunchMode::Groovebox | LaunchMode::Sampler => tracks.push(Track::new_with_sampler(
|
||||
&name, None, jack, Some(&clock), Some(&clip),
|
||||
midi_froms.as_slice(), midi_tos.as_slice(), audio_froms, audio_tos,
|
||||
)?),
|
||||
_ => {}
|
||||
}
|
||||
let mut app = App {
|
||||
jack: jack.clone(),
|
||||
jack: jack.clone(),
|
||||
config,
|
||||
color: ItemTheme::random(),
|
||||
pool: match mode {
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => clip.as_ref().map(Into::into),
|
||||
LaunchMode::Arranger { .. } => Some(Default::default()),
|
||||
_ => None,
|
||||
},
|
||||
editor: match mode {
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => clip.as_ref().map(Into::into),
|
||||
LaunchMode::Arranger { .. } => Some(Default::default()),
|
||||
editor: match self.mode {
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => Some((&clip).into()),
|
||||
_ => None
|
||||
},
|
||||
midi_ins,
|
||||
midi_outs,
|
||||
midi_buf: match mode {
|
||||
LaunchMode::Clock |
|
||||
LaunchMode::Sampler =>
|
||||
vec![],
|
||||
LaunchMode::Sequencer |
|
||||
LaunchMode::Groovebox |
|
||||
LaunchMode::Arranger {..} =>
|
||||
vec![vec![];65536],
|
||||
_ => todo!("{mode:?}"),
|
||||
project: Arrangement {
|
||||
name: Default::default(),
|
||||
color: ItemTheme::random(),
|
||||
jack: jack.clone(),
|
||||
clock,
|
||||
tracks,
|
||||
scenes,
|
||||
selection: Selection::TrackClip { track: 0, scene: 0 },
|
||||
midi_ins,
|
||||
midi_outs,
|
||||
pool: match self.mode {
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => (&clip).into(),
|
||||
_ => Default::default()
|
||||
},
|
||||
..Default::default()
|
||||
},
|
||||
tracks,
|
||||
scenes,
|
||||
selected: Selection::TrackClip { track: 0, scene: 0 },
|
||||
config,
|
||||
clock,
|
||||
..Default::default()
|
||||
};
|
||||
if let &LaunchMode::Arranger { scenes, tracks, track_width, .. } = mode {
|
||||
app.arranger = Default::default();
|
||||
app.selected = Selection::TrackClip { track: 1, scene: 1 };
|
||||
app.scenes_add(scenes)?;
|
||||
app.tracks_add(tracks, Some(track_width), &[], &[])?;
|
||||
if let LaunchMode::Arranger { scenes, tracks, track_width, .. } = self.mode {
|
||||
app.project.arranger = Default::default();
|
||||
app.project.selection = Selection::TrackClip { track: 1, scene: 1 };
|
||||
app.project.scenes_add(scenes)?;
|
||||
app.project.tracks_add(tracks, Some(track_width), &[], &[])?;
|
||||
}
|
||||
jack.sync_lead(self.sync_lead, |mut state|{
|
||||
let clock = app.clock();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue