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", "triangle");
17    oscillator.get("frequency").set("value", Val::from(261.63)); // Middle C
18
19    let document = Val::global("document");
20    let elem = document.call("createElement", &argv!["BUTTON"]);
21    elem.set("textContent", "Click");
22    let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23    elem.call(
24        "addEventListener",
25        &argv![
26            "click",
27            Val::make_fn(move |_| {
28                println!("Playing");
29                oscillator.call("connect", &argv![context.get("destination")]);
30                oscillator.call("start", &argv![0]);
31                println!("All done!");
32                Val::undefined()
33            })
34        ],
35    );
36    body.call("appendChild", &argv![elem]);
37}