audio/
audio.rs

1use emlite::*;
2
3fn main() {
4    #[allow(non_snake_case)]
5    let mut AudioContext = Val::global("AudioContext");
6    if !AudioContext.as_bool() {
7        println!("No global AudioContext, trying webkitAudioContext");
8        AudioContext = Val::global("webkitAudioContext");
9    }
10
11    println!("Got an AudioContext");
12    let context = AudioContext.new(&[]);
13    let oscillator = context.call("createOscillator", &[]);
14
15    println!("Configuring oscillator");
16    oscillator.set("type", Val::from("triangle"));
17    oscillator.get("frequency").set("value", Val::from(261.63)); // Middle C
18
19    Val::global_this().set("oscillator", oscillator);
20    Val::global_this().set("context", context);
21
22    let document = Val::global("document");
23    let elem = document.call("createElement", &argv!["BUTTON"]);
24    elem.set(&"textContent", Val::from("Click"));
25    let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
26    elem.call(
27        "addEventListener",
28        &argv![
29            "click",
30            Val::make_js_function(|_| {
31                let oscillator = Val::global("oscillator");
32                let context = Val::global("context");
33                println!("Playing");
34                oscillator.call("connect", &argv![context.get("destination")]);
35                oscillator.call("start", &argv![0]);
36                println!("All done!");
37                Val::undefined().as_handle()
38            })
39        ],
40    );
41    body.call("appendChild", &argv![elem]);
42}