-
Notifications
You must be signed in to change notification settings - Fork 301
Expand file tree
/
Copy pathchannel_routing.rs
More file actions
47 lines (37 loc) · 1.47 KB
/
channel_routing.rs
File metadata and controls
47 lines (37 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! Channel router example
use std::io::Read;
use std::{error::Error, io};
fn main() -> Result<(), Box<dyn Error>> {
use rodio::source::{Function, SignalGenerator, Source};
let stream_handle = rodio::OutputStreamBuilder::open_default_stream()?;
let sample_rate: u32 = 48000;
let (mut controller, router) = SignalGenerator::new(sample_rate, 440.0, Function::Triangle)
.amplify(0.1)
.channel_router(2, vec![vec![0.0f32, 0.0f32]]);
println!("Control left and right levels separately:");
println!("q: left+\na: left-\nw: right+\ns: right-\nx: quit");
stream_handle.mixer().add(router);
let (mut left_level, mut right_level) = (0.5f32, 0.5f32);
controller.map(0, 0, left_level)?;
controller.map(0, 1, right_level)?;
println!("Left: {left_level:.04}, Right: {right_level:.04}");
let bytes = io::stdin().bytes();
for chr in bytes {
match chr.unwrap() {
b'q' => left_level += 0.1,
b'a' => left_level -= 0.1,
b'w' => right_level += 0.1,
b's' => right_level -= 0.1,
b'x' => break,
b'\n' => {
left_level = left_level.clamp(0.0, 1.0);
right_level = right_level.clamp(0.0, 1.0);
controller.map(0, 0, left_level)?;
controller.map(0, 1, right_level)?;
println!("Left: {left_level:.04}, Right: {right_level:.04}");
}
_ => continue,
}
}
Ok(())
}