IT IS MUSIC
This commit is contained in:
@@ -28,6 +28,8 @@ fn play(mut s: seq::SynSeq, sample_rate: usize, bpm: usize) {
|
|||||||
sample_rate: sample_rate,
|
sample_rate: sample_rate,
|
||||||
channel_sample_count: samples_per_beat,
|
channel_sample_count: samples_per_beat,
|
||||||
};
|
};
|
||||||
|
let beats = s.beats();
|
||||||
|
let duration = 1 + 60 * beats / bpm;
|
||||||
|
|
||||||
let sample_count = (params.channel_sample_count) as usize;
|
let sample_count = (params.channel_sample_count) as usize;
|
||||||
let mut left: Vec<f32> = vec![0_f32; sample_count];
|
let mut left: Vec<f32> = vec![0_f32; sample_count];
|
||||||
@@ -44,5 +46,5 @@ fn play(mut s: seq::SynSeq, sample_rate: usize, bpm: usize) {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// Wait it out
|
// Wait it out
|
||||||
std::thread::sleep(std::time::Duration::from_secs(2));
|
std::thread::sleep(std::time::Duration::from_secs(duration as u64));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,10 +20,14 @@ impl SynSeq {
|
|||||||
|
|
||||||
pub fn render(&mut self, left: &mut [f32], right: &mut [f32]) {
|
pub fn render(&mut self, left: &mut [f32], right: &mut [f32]) {
|
||||||
if let Some(tone) = self.seq.pop() {
|
if let Some(tone) = self.seq.pop() {
|
||||||
self.syn.tone_on(tone);
|
self.syn.set(tone);
|
||||||
}
|
}
|
||||||
self.syn.render(left, right);
|
self.syn.render(left, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn beats(&self) -> usize {
|
||||||
|
self.seq.beats.len()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
|
|||||||
21
src/syn.rs
21
src/syn.rs
@@ -31,14 +31,28 @@ impl Syn {
|
|||||||
Syn::Real(synthesizer)
|
Syn::Real(synthesizer)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn tone_on(&mut self, b: tone::Tone) {
|
pub fn set(&mut self, b: tone::Tone) {
|
||||||
|
let a = 0 as i32;
|
||||||
|
match self {
|
||||||
|
// channel=[0..16)
|
||||||
|
// velocity=[0..128)
|
||||||
|
Syn::Real(syn) => {
|
||||||
|
syn.note_off_all_channel(a, false);
|
||||||
|
},
|
||||||
|
Syn::Text{m, ..} => {
|
||||||
|
m.clear();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
self.tone_on(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tone_on(&mut self, b: tone::Tone) {
|
||||||
let a = 0 as i32;
|
let a = 0 as i32;
|
||||||
match self {
|
match self {
|
||||||
// channel=[0..16)
|
// channel=[0..16)
|
||||||
// velocity=[0..128)
|
// velocity=[0..128)
|
||||||
Syn::Real(syn) => syn.note_on(a, b.i32(), 127),
|
Syn::Real(syn) => syn.note_on(a, b.i32(), 127),
|
||||||
Syn::Text{m, ..} => {
|
Syn::Text{m, ..} => {
|
||||||
eprintln!("tone_on({:?}, {:?}, {:?})", a, b.i32(), 127);
|
|
||||||
match m.get_mut(&a) {
|
match m.get_mut(&a) {
|
||||||
Some(m2) => { m2.insert(b.i32(), 127); },
|
Some(m2) => { m2.insert(b.i32(), 127); },
|
||||||
None => {
|
None => {
|
||||||
@@ -51,12 +65,11 @@ impl Syn {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn tone_off(&mut self, b: tone::Tone) {
|
fn tone_off(&mut self, b: tone::Tone) {
|
||||||
let a = 0 as i32;
|
let a = 0 as i32;
|
||||||
match self {
|
match self {
|
||||||
Syn::Real(syn) => syn.note_off(a, b.i32()),
|
Syn::Real(syn) => syn.note_off(a, b.i32()),
|
||||||
Syn::Text{m, ..} => {
|
Syn::Text{m, ..} => {
|
||||||
eprintln!("tone_off({:?}, {:?})", a, b.i32());
|
|
||||||
match m.get_mut(&a) {
|
match m.get_mut(&a) {
|
||||||
Some(m) => { m.remove(&b.i32()); },
|
Some(m) => { m.remove(&b.i32()); },
|
||||||
None => {},
|
None => {},
|
||||||
|
|||||||
Reference in New Issue
Block a user