1use ponko::*;
3
4fn setup(ctx: &mut Ctx) {
6 let samples: Vec<f32> = (0..44100)
7 .map(|i| (i as f32 * 220.0 * std::f32::consts::TAU / 44100.0).sin() * 0.1)
8 .collect();
9 let hum = ctx.create_sound(44100, &samples);
10 let settings = AudioSettings3D {
11 sound: SoundParams {
12 volume: 0.4,
13 looping: true,
14 ..Default::default()
15 },
16 min_distance: 2.0,
17 max_distance: 60.0,
18 rolloff: AudioRolloff::Linear,
19 ..Default::default()
20 };
21 ctx.world
22 .spawn((Transform3D::at(vec3(4.0, 0.0, 0.0)), AudioSource3D::new(hum, settings)));
23 ctx.play_sound_at(&hum, vec3(-4.0, 0.0, 0.0), AudioSettings3D::default());
24}
25
26fn main() {
27 Game::new("Spatial audio", 800, 600).run(setup);
29}
30#[allow(dead_code)]
34fn buses_and_effects(ctx: &mut Ctx, sound: Sound) {
35 let music = ctx.audio_bus("music"); ctx.set_audio_bus_volume(music, 0.6);
37 let voice = ctx.play_sound_on(
38 &sound,
39 SoundParams {
40 looping: true,
41 ..Default::default()
42 },
43 music,
44 AudioEffects {
45 low_pass_hz: 4_000.0,
46 reverb: 0.2,
47 },
48 );
49 ctx.set_sound_effects(
50 voice,
51 AudioEffects {
52 low_pass_hz: 800.0,
53 reverb: 0.5,
54 },
55 );
56 ctx.mute_audio_bus(music, true);
57 ctx.mute_audio_bus(music, false); let settings = AudioSettings3D {
59 bus: music,
60 effects: AudioEffects {
61 low_pass_hz: 2_000.0,
62 reverb: 0.3,
63 },
64 ..Default::default()
65 };
66 ctx.play_sound_at(&sound, vec3(3.0, 0.0, 0.0), settings);
67}
68#[allow(dead_code)]
72fn streaming_music(ctx: &mut Ctx) {
73 let music = ctx.audio_bus("music");
74 let song = ctx.load_stream("music.ogg");
75 let voice = ctx.play_sound_on(
76 &song,
77 SoundParams {
78 looping: true,
79 ..Default::default()
80 },
81 music,
82 AudioEffects::default(),
83 );
84 ctx.stop_sound(voice);
85}
86