audio/
audio.rs

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