diff --git a/src/control.rs b/src/control.rs index 28755d74..bfe8d834 100644 --- a/src/control.rs +++ b/src/control.rs @@ -232,7 +232,43 @@ fn clip_prev (_: &mut App) -> Usually { Ok(true) } //Ok(true) //} -fn activate (_: &mut App) -> Usually { Ok(true) } +fn delete (app: &mut App) -> Usually { + match app.section { + 0 => delete_track(app), + _ => Ok(false) + } +} + +fn enter (app: &mut App) -> Usually { + if app.entered { + activate(app) + } else { + app.entered = true; + Ok(true) + } +} + +fn activate (app: &mut App) -> Usually { + Ok(match app.section { + 0 => { + if app.scene_cursor == 0 { + false + } else { + let scene = &app.scenes[app.scene_cursor - 1]; + if app.track_cursor == 0 { + for (i, track) in app.tracks.iter_mut().enumerate() { + track.sequence = scene.clips[i]; + } + } else { + let track = &mut app.tracks[app.track_cursor - 1]; + track.sequence = scene.clips[app.track_cursor - 1]; + }; + true + } + }, + _ => false + }) +} //fn activate (_: &mut Launcher) -> Usually { //unimplemented!(); ////if let ( @@ -287,21 +323,6 @@ fn activate (_: &mut App) -> Usually { Ok(true) } //Ok(true) //} -fn delete (app: &mut App) -> Usually { - match app.section { - 0 => delete_track(app), - _ => Ok(false) - } -} - -fn enter (app: &mut App) -> Usually { - if app.entered { - activate(app) - } else { - app.entered = true; - Ok(true) - } -} fn escape (app: &mut App) -> Usually { if app.entered { diff --git a/src/jack/device.rs b/src/jack/device.rs index 3ad0eaf9..8fe97661 100644 --- a/src/jack/device.rs +++ b/src/jack/device.rs @@ -26,4 +26,3 @@ impl JackDevice { self.state.lock().unwrap() } } - diff --git a/src/main.rs b/src/main.rs index 8184a0c4..30a39800 100644 --- a/src/main.rs +++ b/src/main.rs @@ -55,7 +55,29 @@ pub fn main () -> Usually<()> { "Panagement", "file:///home/user/.lv2/Auburn Sounds Panagement 2.lv2" )?); - client.connect_ports(&track.midi_out, &track.devices[0].midi_ins()?[0])?; + client.connect_ports( + &track.midi_out, &track.devices[0].midi_ins()?[0] + )?; + client.connect_ports( + &track.devices[0].audio_outs()?[0], &track.devices[1].audio_ins()?[0] + )?; + let output_left = client.ports(Some("Komplete.+:playback_FL"), None, PortFlags::empty()); + if let Some( + output_left + ) = output_left.get(0).map(|name|client.port_by_name(&name)).flatten() { + client.connect_ports( + &track.devices[1].audio_outs()?[0], &output_left + )?; + } + let output_right = client.ports(Some("Komplete.+:playback_FR"), None, PortFlags::empty()); + if let Some( + output_right + ) = output_right.get(0).map(|name|client.port_by_name(&name)).flatten() { + client.connect_ports( + &track.devices[1].audio_outs()?[0], &output_right + )?; + } + track.sequence = Some(1); // FIXME track.add_phrase("4 kicks", ppq * 4, Some(phrase! { 00 * ppq/4 => MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }, @@ -81,8 +103,24 @@ pub fn main () -> Usually<()> { state.add_track(Some("Bass"), Some(Box::new(move|client, track|{ track.add_device(Plugin::lv2("Odin2", "file:///home/user/.lv2/Odin2.lv2")?); - //client.connect_ports(&track.midi_out, &track.devices[0].midi_ins()?[0])?; track.sequence = Some(0); // FIXME + //client.connect_ports(&track.midi_out, &track.devices[0].midi_ins()?[0])?; + //let output_left = client.ports(Some(".+:playback_FL"), None, PortFlags::empty()); + //if let Some( + //output_left + //) = output_left.get(0).map(|name|client.port_by_name(&name)).flatten() { + //client.connect_ports( + //&track.devices[0].audio_outs()?[0], &output_left + //)?; + //} + //let output_right = client.ports(Some(".+:playback_FR"), None, PortFlags::empty()); + //if let Some( + //output_right + //) = output_right.get(0).map(|name|client.port_by_name(&name)).flatten() { + //client.connect_ports( + //&track.devices[0].audio_outs()?[1], &output_right + //)?; + //} track.add_phrase("Offbeat", ppq * 4, Some(phrase! { 00 * ppq/4 => MidiMessage::NoteOff { key: 40.into(), vel: 100.into() }, 02 * ppq/4 => MidiMessage::NoteOn { key: 40.into(), vel: 100.into() }, @@ -159,8 +197,8 @@ process!(App |self, _client, scope| { } self.playing = Some(transport.state); self.playhead = transport.pos.frame() as usize; - let frame = scope.last_frame_time() as usize; - let frames = scope.n_frames() as usize; + let frame = scope.last_frame_time() as usize; + let frames = scope.n_frames() as usize; for track in self.tracks.iter_mut() { track.process( self.midi_in.as_ref().unwrap().iter(scope),