mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
define midi ins and audio outs in project
This commit is contained in:
parent
58cd51dfbf
commit
c4c1271c32
5 changed files with 56 additions and 35 deletions
|
|
@ -10,7 +10,7 @@ See `demos/project.edn` for the initial contents of the session.
|
||||||
* Rust toolchain
|
* Rust toolchain
|
||||||
* JACK or Pipewire
|
* JACK or Pipewire
|
||||||
|
|
||||||
## Recommended
|
### Recommended
|
||||||
|
|
||||||
* MIDI controller
|
* MIDI controller
|
||||||
* Samples at ~/Lab/Music/pak
|
* Samples at ~/Lab/Music/pak
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
(bpm 150)
|
(bpm 150)
|
||||||
|
|
||||||
|
(midi-in "nanoKEY Studio.*capture.*")
|
||||||
|
(audio-out "Komplete.+:playback_FL", "Komplete.+:playback_FR")
|
||||||
|
|
||||||
(scene { :name "Intro" } _ 0 _ _)
|
(scene { :name "Intro" } _ 0 _ _)
|
||||||
(scene { :name "Hook" } 0 1 0 _)
|
(scene { :name "Hook" } 0 1 0 _)
|
||||||
(scene { :name "Verse" } 1 2 1 _)
|
(scene { :name "Verse" } 1 2 1 _)
|
||||||
|
|
|
||||||
22
src/edn.rs
22
src/edn.rs
|
|
@ -59,6 +59,28 @@ impl App {
|
||||||
Some(Edn::Symbol("track")) => {
|
Some(Edn::Symbol("track")) => {
|
||||||
Track::load_edn(self, &items[1..])?;
|
Track::load_edn(self, &items[1..])?;
|
||||||
},
|
},
|
||||||
|
Some(Edn::Symbol("midi-in")) => {
|
||||||
|
self.midi_ins = items[1..].iter().map(|x|match x {
|
||||||
|
Edn::Str(n) => n.to_string(),
|
||||||
|
_ => panic!("unexpected midi-in")
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
},
|
||||||
|
Some(Edn::Symbol("audio-out")) => {
|
||||||
|
let client = self.client();
|
||||||
|
self.audio_outs = items[1..].iter().map(|x|match x {
|
||||||
|
Edn::Str(n) => n.to_string(),
|
||||||
|
_ => panic!("unexpected midi-in")
|
||||||
|
}).collect::<Vec<_>>()
|
||||||
|
.iter()
|
||||||
|
.map(|name|client
|
||||||
|
.ports(Some(name), None, PortFlags::empty())
|
||||||
|
.get(0)
|
||||||
|
.map(|name|client.port_by_name(name)))
|
||||||
|
.flatten()
|
||||||
|
.filter_map(|x|x)
|
||||||
|
.map(Arc::new)
|
||||||
|
.collect();
|
||||||
|
},
|
||||||
_ => panic!("unexpected edn: {:?}", items.get(0))
|
_ => panic!("unexpected edn: {:?}", items.get(0))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,7 @@ use crate::{core::*, model::*};
|
||||||
|
|
||||||
/// Application entrypoint.
|
/// Application entrypoint.
|
||||||
pub fn main () -> Usually<()> {
|
pub fn main () -> Usually<()> {
|
||||||
let app = App::from_edn(include_str!("../demos/project.edn"))?
|
run(App::from_edn(include_str!("../demos/project.edn"))?.activate(Some(|app: &Arc<RwLock<App>>| {
|
||||||
.with_midi_ins(&["nanoKEY Studio.*capture.*"])?
|
|
||||||
.with_audio_outs(&["Komplete.+:playback_FL", "Komplete.+:playback_FR"])?
|
|
||||||
.activate(Some(|app: &Arc<RwLock<App>>| {
|
|
||||||
|
|
||||||
let (midi_in, mut midi_outs) = {
|
let (midi_in, mut midi_outs) = {
|
||||||
let app = app.read().unwrap();
|
let app = app.read().unwrap();
|
||||||
|
|
@ -52,7 +49,6 @@ pub fn main () -> Usually<()> {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
||||||
}))?;
|
}))?)?;
|
||||||
run(app)?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,10 +56,10 @@ pub struct App {
|
||||||
/// Paths to user directories
|
/// Paths to user directories
|
||||||
xdg: Option<Arc<XdgApp>>,
|
xdg: Option<Arc<XdgApp>>,
|
||||||
/// Main audio outputs.
|
/// Main audio outputs.
|
||||||
audio_outs: Vec<Arc<Port<Unowned>>>,
|
pub audio_outs: Vec<Arc<Port<Unowned>>>,
|
||||||
/// Number of frames requested by process callback
|
/// Number of frames requested by process callback
|
||||||
chunk_size: usize,
|
chunk_size: usize,
|
||||||
|
/// Transport model and view.
|
||||||
pub transport: TransportToolbar,
|
pub transport: TransportToolbar,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue