mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
95 lines
4.6 KiB
Rust
95 lines
4.6 KiB
Rust
extern crate clap;
|
|
extern crate jack;
|
|
extern crate crossterm;
|
|
|
|
use clap::{Parser};
|
|
use std::error::Error;
|
|
|
|
pub mod cli;
|
|
pub mod device;
|
|
pub mod prelude;
|
|
pub mod draw;
|
|
pub mod config;
|
|
pub mod layout;
|
|
pub mod time;
|
|
|
|
use crate::prelude::*;
|
|
|
|
fn main () -> Result<(), Box<dyn Error>> {
|
|
let _cli = cli::Cli::parse();
|
|
let xdg = microxdg::XdgApp::new("tek")?;
|
|
crate::config::create_dirs(&xdg)?;
|
|
//run(Sampler::new("Sampler#000")?)
|
|
let input = ".*nanoKEY.*";
|
|
let output = ["Komplete.*:playback_FL", "Komplete.*:playback_FR"];
|
|
let (client, _) = Client::new("init", ClientOptions::NO_START_SERVER)?;
|
|
let timebase = Arc::new(Timebase {
|
|
rate: AtomicUsize::new(client.sample_rate()),
|
|
tempo: AtomicUsize::new(113000),
|
|
ppq: AtomicUsize::new(96),
|
|
});
|
|
let ppq = timebase.ppq() as u32;
|
|
let app = Launcher::new("Launcher#0", &timebase,
|
|
Some(vec![
|
|
|
|
Track::new("Kick", &timebase, Some(vec![
|
|
//Plugin::lv2("Kick/ChowKick", "file:///home/user/.lv2/ChowKick.lv2", &[1, 1, 0, 2])?.boxed(),
|
|
Sampler::new("Sampler", Some(BTreeMap::from([
|
|
(u7::from_int_lossy(35), Sample {
|
|
name: "Kick 1".into(), start: 0, end: 100000, channels: vec![],
|
|
}.into()),
|
|
(u7::from_int_lossy(36).into(), Sample {
|
|
name: "Kick 2".into(), start: 0, end: 100000, channels: vec![],
|
|
}.into()),
|
|
(u7::from_int_lossy(38).into(), Sample {
|
|
name: "Snare 1".into(), start: 0, end: 100000, channels: vec![],
|
|
}.into()),
|
|
(u7::from_int_lossy(40).into(), Sample {
|
|
name: "Snare 2".into(), start: 50000, end: 100000, channels: vec![],
|
|
}.into()),
|
|
(u7::from_int_lossy(42).into(), Sample {
|
|
name: "HH Closed".into(), start: 0, end: 50000, channels: vec![],
|
|
}.into()),
|
|
(u7::from_int_lossy(46).into(), Sample {
|
|
name: "HH Open".into(), start: 0, end: 25000, channels: vec![]
|
|
}.into()),
|
|
])))?.boxed(),
|
|
]), Some(vec![
|
|
Phrase::new("HelloKick", ppq * 4, Some(BTreeMap::from([
|
|
( ppq * 0, vec![MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }] ),
|
|
( ppq * 1, vec![MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }] ),
|
|
( ppq * 2, vec![MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }] ),
|
|
( ppq * 3, vec![MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }] ),
|
|
])))
|
|
]))?,
|
|
|
|
Track::new("Helm", &timebase, Some(vec![
|
|
Plugin::lv2("Helm", "file:///home/user/.lv2/Helm.lv2", &[1, 0, 0, 2])?.boxed(),
|
|
]), Some(vec![
|
|
Phrase::new("HelloBass", ppq * 4, Some(BTreeMap::from([
|
|
( ppq / 2 + ppq * 0, vec![MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 1 / 2, vec![MidiMessage::NoteOff { key: 36.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 1, vec![MidiMessage::NoteOn { key: 39.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 3 / 2, vec![MidiMessage::NoteOff { key: 39.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 2, vec![MidiMessage::NoteOn { key: 41.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 5 / 2, vec![MidiMessage::NoteOff { key: 41.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 3, vec![MidiMessage::NoteOn { key: 42.into(), vel: 100.into() }] ),
|
|
( ppq / 2 + ppq * 7 / 2 - 1, vec![MidiMessage::NoteOff { key: 42.into(), vel: 100.into() }] ),
|
|
])))
|
|
]))?,
|
|
|
|
//Plugin::lv2("Kick/ChowKick", "file:///home/user/.lv2/ChowKick.lv2", &[1, 1, 0, 2])?.boxed(),
|
|
//Plugin::lv2("Bass/Helm", "file:///home/user/.lv2/Helm.lv2", &[1, 0, 0, 2])?.boxed(),
|
|
//Plugin::lv2("Pads/Odin2", "file:///home/user/.lv2/Odin2.lv2", &[1, 0, 0, 2])?.boxed(),
|
|
]),
|
|
Some(vec![
|
|
Scene::new(&"Scene#01", &[Some(0), None, None, None]),
|
|
Scene::new(&"Scene#02", &[Some(0), Some(0), None, None]),
|
|
//Scene::new(&"Scene#03", &[None, Some(0), None, None]),
|
|
//Scene::new(&"Scene#04", &[None, None, None, None]),
|
|
//Scene::new(&"Scene#05", &[None, None, None, None]),
|
|
])
|
|
|
|
)?.connect(input, &output)?;
|
|
run(app)
|
|
}
|