From fad0caef8891da1d14a8f3c1c5f654c50cccd3e8 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 29 Jun 2024 16:29:20 +0300 Subject: [PATCH] samples in main --- src/device.rs | 2 +- src/device/chain/sampler.rs | 52 +++++++------------------------------ src/main.rs | 21 ++++++++++++++- 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/src/device.rs b/src/device.rs index 8bcd8ed1..e617730c 100644 --- a/src/device.rs +++ b/src/device.rs @@ -11,7 +11,7 @@ mod transport; pub use self::track::Track; pub use self::launcher::{Launcher, Scene}; pub use self::sequencer::{Sequencer, Phrase}; -pub use self::chain::{Chain, Sampler, Plugin}; +pub use self::chain::{Chain, Plugin, Sampler, Sample, Voice}; pub use self::looper::Looper; pub use self::mixer::Mixer; diff --git a/src/device/chain/sampler.rs b/src/device/chain/sampler.rs index 678e1b00..572612ff 100644 --- a/src/device/chain/sampler.rs +++ b/src/device/chain/sampler.rs @@ -16,10 +16,10 @@ impl Voice { } pub struct Sample { - name: String, - start: usize, - end: usize, - channels: Vec>, + pub name: String, + pub start: usize, + pub end: usize, + pub channels: Vec>, } impl Sample { fn new (name: &str) -> Arc { @@ -41,49 +41,15 @@ pub struct Sampler { } impl Sampler { - pub fn new (name: &str) -> Result, Box> { + pub fn new ( + name: &str, + samples: Option>>, + ) -> Result, Box> { let (client, _) = Client::new(name, ClientOptions::NO_START_SERVER)?; DynamicDevice::new(render, handle, Self::process, Self { name: name.into(), cursor: (0, 0), - samples: 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()), - ]), + samples: samples.unwrap_or(BTreeMap::new()), voices: vec![], midi_in: client.register_port("midi", ::jack::MidiIn::default())?, audio_ins: vec![ diff --git a/src/main.rs b/src/main.rs index d6ebd364..5faf13d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,7 +34,26 @@ fn main () -> Result<(), Box> { Track::new("Kick", &timebase, Some(vec![ //Plugin::lv2("Kick/ChowKick", "file:///home/user/.lv2/ChowKick.lv2", &[1, 1, 0, 2])?.boxed(), - Sampler::new("Sampler")?.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() }] ),