forked from servo/media
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoscillator.rs
131 lines (116 loc) · 4.56 KB
/
oscillator.rs
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
extern crate servo_media;
extern crate servo_media_auto;
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage, AudioScheduledSourceNodeMessage};
use servo_media::audio::oscillator_node::OscillatorNodeOptions;
use servo_media::audio::oscillator_node::OscillatorType::Custom;
use servo_media::audio::oscillator_node::OscillatorType::Sawtooth;
use servo_media::audio::oscillator_node::OscillatorType::Square;
use servo_media::audio::oscillator_node::OscillatorType::Triangle;
use servo_media::{ClientContextId, ServoMedia};
use std::sync::Arc;
use std::{thread, time};
fn run_example(servo_media: Arc<ServoMedia>) {
let context = servo_media
.create_audio_context(&ClientContextId::build(1, 1), Default::default())
.unwrap();
let context = context.lock().unwrap();
let dest = context.dest_node();
let mut options = OscillatorNodeOptions::default();
let osc1 = context.create_node(
AudioNodeInit::OscillatorNode(options.clone()),
Default::default(),
);
context.connect_ports(osc1.output(0), dest.input(0));
let _ = context.resume();
context.message_node(
osc1,
AudioNodeMessage::AudioScheduledSourceNode(AudioScheduledSourceNodeMessage::Start(0.)),
);
thread::sleep(time::Duration::from_millis(3000));
let _ = context.close();
thread::sleep(time::Duration::from_millis(3000));
options.oscillator_type = Square;
let context = servo_media
.create_audio_context(&ClientContextId::build(1, 2), Default::default())
.unwrap();
let context = context.lock().unwrap();
let dest = context.dest_node();
let osc2 = context.create_node(
AudioNodeInit::OscillatorNode(options.clone()),
Default::default(),
);
context.connect_ports(osc2.output(0), dest.input(0));
let _ = context.resume();
context.message_node(
osc2,
AudioNodeMessage::AudioScheduledSourceNode(AudioScheduledSourceNodeMessage::Start(0.)),
);
thread::sleep(time::Duration::from_millis(3000));
let _ = context.close();
thread::sleep(time::Duration::from_millis(1000));
options.oscillator_type = Sawtooth;
let context = servo_media
.create_audio_context(&ClientContextId::build(1, 3), Default::default())
.unwrap();
let context = context.lock().unwrap();
let dest = context.dest_node();
let osc3 = context.create_node(
AudioNodeInit::OscillatorNode(options.clone()),
Default::default(),
);
context.connect_ports(osc3.output(0), dest.input(0));
thread::sleep(time::Duration::from_millis(3000));
let _ = context.resume();
context.message_node(
osc3,
AudioNodeMessage::AudioScheduledSourceNode(AudioScheduledSourceNodeMessage::Start(0.)),
);
thread::sleep(time::Duration::from_millis(3000));
let _ = context.close();
thread::sleep(time::Duration::from_millis(1000));
options.oscillator_type = Triangle;
let context = servo_media
.create_audio_context(&ClientContextId::build(1, 4), Default::default())
.unwrap();
let context = context.lock().unwrap();
let dest = context.dest_node();
let osc4 = context.create_node(
AudioNodeInit::OscillatorNode(options.clone()),
Default::default(),
);
context.connect_ports(osc4.output(0), dest.input(0));
thread::sleep(time::Duration::from_millis(3000));
let _ = context.resume();
context.message_node(
osc4,
AudioNodeMessage::AudioScheduledSourceNode(AudioScheduledSourceNodeMessage::Start(0.)),
);
thread::sleep(time::Duration::from_millis(3000));
let _ = context.close();
thread::sleep(time::Duration::from_millis(3000));
options.oscillator_type = Custom;
let context = servo_media
.create_audio_context(&ClientContextId::build(1, 5), Default::default())
.unwrap();
let context = context.lock().unwrap();
let dest = context.dest_node();
let osc5 = context.create_node(
AudioNodeInit::OscillatorNode(options.clone()),
Default::default(),
);
context.connect_ports(osc5.output(0), dest.input(0));
thread::sleep(time::Duration::from_millis(3000));
let _ = context.resume();
context.message_node(
osc4,
AudioNodeMessage::AudioScheduledSourceNode(AudioScheduledSourceNodeMessage::Start(0.)),
);
thread::sleep(time::Duration::from_millis(3000));
let _ = context.close();
thread::sleep(time::Duration::from_millis(1000));
}
fn main() {
ServoMedia::init::<servo_media_auto::Backend>();
let servo_media = ServoMedia::get();
run_example(servo_media);
}