use std::fs::File;
use web_audio_api::context::{AudioContext, BaseAudioContext};
use web_audio_api::node::{
AudioNode, AudioScheduledSourceNode, DistanceModelType, PannerNode, PannerOptions,
PanningModelType,
};
fn main() {
let context = AudioContext::default();
let file = File::open("samples/siren.mp3").unwrap();
let buffer = context.decode_audio_data_sync(file).unwrap();
let src = context.create_buffer_source();
src.set_buffer(buffer);
src.set_loop(true);
let opts = PannerOptions {
panning_model: PanningModelType::EqualPower,
distance_model: DistanceModelType::Inverse,
position_x: 0.,
position_y: 100., position_z: 1., orientation_x: 1.,
orientation_y: 0.,
orientation_z: 0.,
ref_distance: 1.,
max_distance: 10000.,
rolloff_factor: 1.,
cone_inner_angle: 360.,
cone_outer_angle: 0.,
cone_outer_gain: 0.,
..PannerOptions::default()
};
let panner = PannerNode::new(&context, opts);
panner.position_y().linear_ramp_to_value_at_time(-100., 10.);
let delay = context.create_delay(1.);
let doppler_max = 100. / 343.;
delay.delay_time().set_value_at_time(doppler_max, 0.);
delay.delay_time().linear_ramp_to_value_at_time(0., 5.);
delay
.delay_time()
.linear_ramp_to_value_at_time(doppler_max, 10.);
src.connect(&delay);
delay.connect(&panner);
panner.connect(&context.destination());
src.start();
std::thread::sleep(std::time::Duration::from_millis(10_000));
}