@adatechnology/game-audio 0.6.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -1
- package/assets/sfx/CREDITOS.md +2 -2
- package/dist/{chunk-KBTUANNG.js → chunk-C2K7XN2K.js} +294 -31
- package/dist/chunk-C2K7XN2K.js.map +1 -0
- package/dist/index.d.ts +113 -3
- package/dist/index.global.js +606 -205
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +179 -8
- package/dist/index.js.map +1 -1
- package/dist/{locale-CJfDpWnI.d.ts → locale-BJMhMT0G.d.ts} +47 -1
- package/dist/testing.d.ts +4 -4
- package/dist/testing.js +1 -1
- package/package.json +2 -2
- package/assets/sfx/ambiente/ambience_city_day_01.ogg +0 -0
- package/assets/sfx/ambiente/ambience_city_day_02.ogg +0 -0
- package/assets/sfx/ambiente/ambience_construction_01.ogg +0 -0
- package/assets/sfx/ambiente/ambience_night_01.ogg +0 -0
- package/assets/sfx/ambiente/ambience_room_tone_01.ogg +0 -0
- package/assets/sfx/ambiente/ambience_room_tone_02.ogg +0 -0
- package/assets/sfx/ambiente/ambience_rural_day_01.ogg +0 -0
- package/assets/sfx/ambiente/ambience_rural_day_02.ogg +0 -0
- package/assets/sfx/ambiente/rain_loop_01.ogg +0 -0
- package/assets/sfx/ambiente/water_river_loop_01.ogg +0 -0
- package/assets/sfx/ambiente/water_river_loop_02.ogg +0 -0
- package/assets/sfx/ambiente/water_river_loop_03.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_01.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_02.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_03.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_04.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_05.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_06.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_07.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_08.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_09.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_10.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_11.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_12.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_13.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_14.ogg +0 -0
- package/assets/sfx/ambiente/water_splash_15.ogg +0 -0
- package/assets/sfx/armas/bolt_lift_medium_01.ogg +0 -0
- package/assets/sfx/armas/bolt_lift_medium_02.ogg +0 -0
- package/assets/sfx/armas/bolt_lift_medium_03.ogg +0 -0
- package/assets/sfx/armas/bolt_lift_medium_04.ogg +0 -0
- package/assets/sfx/armas/bolt_lift_medium_05.ogg +0 -0
- package/assets/sfx/armas/bolt_lock_medium_01.ogg +0 -0
- package/assets/sfx/armas/bolt_lock_medium_02.ogg +0 -0
- package/assets/sfx/armas/bolt_lock_medium_03.ogg +0 -0
- package/assets/sfx/armas/bolt_lock_medium_04.ogg +0 -0
- package/assets/sfx/armas/bolt_lock_medium_05.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_heavy_01.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_medium_01.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_medium_02.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_medium_03.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_medium_04.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_medium_05.ogg +0 -0
- package/assets/sfx/armas/bolt_pull_medium_06.ogg +0 -0
- package/assets/sfx/armas/bolt_push_heavy_01.ogg +0 -0
- package/assets/sfx/armas/bolt_push_medium_01.ogg +0 -0
- package/assets/sfx/armas/bolt_push_medium_02.ogg +0 -0
- package/assets/sfx/armas/bolt_push_medium_03.ogg +0 -0
- package/assets/sfx/armas/bolt_push_medium_04.ogg +0 -0
- package/assets/sfx/armas/bolt_push_medium_05.ogg +0 -0
- package/assets/sfx/armas/bolt_push_medium_06.ogg +0 -0
- package/assets/sfx/armas/casing_drop_concreto_01.ogg +0 -0
- package/assets/sfx/armas/casing_drop_concreto_02.ogg +0 -0
- package/assets/sfx/armas/casing_drop_concreto_03.ogg +0 -0
- package/assets/sfx/armas/casing_drop_metal_01.ogg +0 -0
- package/assets/sfx/armas/casing_drop_metal_02.ogg +0 -0
- package/assets/sfx/armas/casing_drop_metal_03.ogg +0 -0
- package/assets/sfx/armas/casing_drop_terra_01.ogg +0 -0
- package/assets/sfx/armas/casing_drop_terra_02.ogg +0 -0
- package/assets/sfx/armas/casing_drop_terra_03.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_light_01.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_light_02.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_light_03.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_light_04.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_medium_01.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_medium_02.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_medium_03.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_medium_04.ogg +0 -0
- package/assets/sfx/armas/charging_handle_pull_medium_05.ogg +0 -0
- package/assets/sfx/armas/charging_handle_release_medium_01.ogg +0 -0
- package/assets/sfx/armas/charging_handle_release_medium_02.ogg +0 -0
- package/assets/sfx/armas/charging_handle_release_medium_03.ogg +0 -0
- package/assets/sfx/armas/charging_handle_release_medium_04.ogg +0 -0
- package/assets/sfx/armas/charging_handle_release_medium_05.ogg +0 -0
- package/assets/sfx/armas/cylinder_close_light_01.ogg +0 -0
- package/assets/sfx/armas/cylinder_close_light_02.ogg +0 -0
- package/assets/sfx/armas/cylinder_close_light_03.ogg +0 -0
- package/assets/sfx/armas/cylinder_close_light_04.ogg +0 -0
- package/assets/sfx/armas/cylinder_close_light_05.ogg +0 -0
- package/assets/sfx/armas/cylinder_eject_light_01.ogg +0 -0
- package/assets/sfx/armas/cylinder_eject_light_02.ogg +0 -0
- package/assets/sfx/armas/cylinder_eject_light_03.ogg +0 -0
- package/assets/sfx/armas/cylinder_open_light_01.ogg +0 -0
- package/assets/sfx/armas/cylinder_open_light_02.ogg +0 -0
- package/assets/sfx/armas/cylinder_open_light_03.ogg +0 -0
- package/assets/sfx/armas/cylinder_open_light_04.ogg +0 -0
- package/assets/sfx/armas/cylinder_open_light_05.ogg +0 -0
- package/assets/sfx/armas/lever_close_medium_01.ogg +0 -0
- package/assets/sfx/armas/lever_close_medium_02.ogg +0 -0
- package/assets/sfx/armas/lever_open_medium_01.ogg +0 -0
- package/assets/sfx/armas/lever_open_medium_02.ogg +0 -0
- package/assets/sfx/armas/mag_out_heavy_01.ogg +0 -0
- package/assets/sfx/armas/mag_out_heavy_02.ogg +0 -0
- package/assets/sfx/armas/mag_out_light_01.ogg +0 -0
- package/assets/sfx/armas/mag_out_light_02.ogg +0 -0
- package/assets/sfx/armas/mag_out_light_03.ogg +0 -0
- package/assets/sfx/armas/mag_out_light_04.ogg +0 -0
- package/assets/sfx/armas/mag_out_medium_01.ogg +0 -0
- package/assets/sfx/armas/mag_out_medium_02.ogg +0 -0
- package/assets/sfx/armas/mag_out_medium_03.ogg +0 -0
- package/assets/sfx/armas/mag_seat_heavy_01.ogg +0 -0
- package/assets/sfx/armas/mag_seat_heavy_02.ogg +0 -0
- package/assets/sfx/armas/mag_seat_light_01.ogg +0 -0
- package/assets/sfx/armas/mag_seat_light_02.ogg +0 -0
- package/assets/sfx/armas/mag_seat_light_03.ogg +0 -0
- package/assets/sfx/armas/mag_seat_light_04.ogg +0 -0
- package/assets/sfx/armas/mag_seat_light_05.ogg +0 -0
- package/assets/sfx/armas/mag_seat_light_06.ogg +0 -0
- package/assets/sfx/armas/mag_seat_medium_01.ogg +0 -0
- package/assets/sfx/armas/mag_seat_medium_02.ogg +0 -0
- package/assets/sfx/armas/mag_seat_medium_03.ogg +0 -0
- package/assets/sfx/armas/pistol_22lr_close_01.ogg +0 -0
- package/assets/sfx/armas/pistol_22lr_close_02.ogg +0 -0
- package/assets/sfx/armas/pistol_22lr_far_01.ogg +0 -0
- package/assets/sfx/armas/pistol_22lr_far_02.ogg +0 -0
- package/assets/sfx/armas/pistol_22lr_far_03.ogg +0 -0
- package/assets/sfx/armas/pistol_22lr_far_04.ogg +0 -0
- package/assets/sfx/armas/pistol_45_close_01.ogg +0 -0
- package/assets/sfx/armas/pistol_45_close_02.ogg +0 -0
- package/assets/sfx/armas/pistol_45_close_03.ogg +0 -0
- package/assets/sfx/armas/pistol_45_close_04.ogg +0 -0
- package/assets/sfx/armas/pistol_45_close_05.ogg +0 -0
- package/assets/sfx/armas/pistol_45_far_01.ogg +0 -0
- package/assets/sfx/armas/pistol_45_far_02.ogg +0 -0
- package/assets/sfx/armas/pistol_45_far_03.ogg +0 -0
- package/assets/sfx/armas/pistol_45_far_04.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_close_01.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_close_02.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_close_03.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_close_04.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_close_05.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_close_06.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_far_01.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_far_02.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_far_03.ogg +0 -0
- package/assets/sfx/armas/pistol_9mm_far_04.ogg +0 -0
- package/assets/sfx/armas/pump_back_heavy_01.ogg +0 -0
- package/assets/sfx/armas/pump_back_heavy_02.ogg +0 -0
- package/assets/sfx/armas/pump_back_heavy_03.ogg +0 -0
- package/assets/sfx/armas/pump_back_heavy_04.ogg +0 -0
- package/assets/sfx/armas/pump_back_heavy_05.ogg +0 -0
- package/assets/sfx/armas/pump_forward_heavy_01.ogg +0 -0
- package/assets/sfx/armas/pump_forward_heavy_02.ogg +0 -0
- package/assets/sfx/armas/pump_forward_heavy_03.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_close_01.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_close_02.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_close_03.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_close_04.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_far_01.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_far_02.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_far_03.ogg +0 -0
- package/assets/sfx/armas/revolver_38_357_far_04.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_close_01.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_close_02.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_close_03.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_close_04.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_close_05.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_close_06.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_far_01.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_far_02.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_far_03.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_far_04.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_far_05.ogg +0 -0
- package/assets/sfx/armas/rifle_308_3006_far_06.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_close_01.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_close_02.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_close_03.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_close_04.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_close_05.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_far_01.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_far_02.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_far_03.ogg +0 -0
- package/assets/sfx/armas/rifle_5_56_far_04.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_01.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_02.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_03.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_04.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_05.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_06.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_07.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_08.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_09.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_10.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_11.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_close_12.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_far_01.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_far_02.ogg +0 -0
- package/assets/sfx/armas/rifle_7_62x39_far_03.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_01.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_02.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_03.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_04.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_05.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_06.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_07.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_08.ogg +0 -0
- package/assets/sfx/armas/shell_insert_heavy_09.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_close_01.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_close_02.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_close_03.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_close_04.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_close_05.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_close_06.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_far_01.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_far_02.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_far_03.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_far_04.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_far_05.ogg +0 -0
- package/assets/sfx/armas/shotgun_12_far_06.ogg +0 -0
- package/assets/sfx/armas/slide_release_light_01.ogg +0 -0
- package/assets/sfx/armas/slide_release_light_02.ogg +0 -0
- package/assets/sfx/armas/slide_release_light_03.ogg +0 -0
- package/assets/sfx/armas/slide_release_light_04.ogg +0 -0
- package/assets/sfx/armas/slide_release_light_05.ogg +0 -0
- package/assets/sfx/armas/slide_release_light_06.ogg +0 -0
- package/assets/sfx/armas/slide_release_medium_01.ogg +0 -0
- package/assets/sfx/armas/slide_release_medium_02.ogg +0 -0
- package/assets/sfx/armas/slide_release_medium_03.ogg +0 -0
- package/assets/sfx/armas/slide_release_medium_04.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_01.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_02.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_03.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_04.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_05.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_06.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_close_07.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_far_01.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_far_02.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_far_03.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_far_04.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_far_05.ogg +0 -0
- package/assets/sfx/armas/sniper_338_300wm_far_06.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_01.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_02.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_03.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_04.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_05.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_06.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_07.ogg +0 -0
- package/assets/sfx/armas/speedloader_light_08.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_close_01.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_close_02.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_close_03.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_close_04.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_close_05.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_far_01.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_far_02.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_far_03.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_far_04.ogg +0 -0
- package/assets/sfx/armas/suppressed_pistol_far_05.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_close_01.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_close_02.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_close_03.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_close_04.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_far_01.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_far_02.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_far_03.ogg +0 -0
- package/assets/sfx/armas/suppressed_rifle_far_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_05.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_06.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_mixed_07.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_05.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_06.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_07.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_08.ogg +0 -0
- package/assets/sfx/explosoes-fogo/debris_rain_stone_09.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_big_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_big_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_big_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_big_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_big_05.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_car_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_car_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_car_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_car_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_far_close_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_far_close_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_far_close_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_far_close_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_flashbang_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_flashbang_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_grenade_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_grenade_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_grenade_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_grenade_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_grenade_05.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_grenade_06.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_05.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_06.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_07.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_08.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_09.ogg +0 -0
- package/assets/sfx/explosoes-fogo/explosion_small_bang_10.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_crackle_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_crackle_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_crackle_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_crackle_05.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_crackle_07.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_extinguish_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_extinguish_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_ignite_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_ignite_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_ignite_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_ignite_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_gas_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_gas_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_gas_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_gas_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_liquid_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_liquid_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_liquid_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_plastic_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_plastic_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_plastic_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_plastic_04.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_loop_small_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_pop_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_pop_02.ogg +0 -0
- package/assets/sfx/explosoes-fogo/fire_pop_03.ogg +0 -0
- package/assets/sfx/explosoes-fogo/flamethrower_loop_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/gas_leak_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/molotov_break_ignite_01.ogg +0 -0
- package/assets/sfx/explosoes-fogo/molotov_break_ignite_02.ogg +0 -0
- package/assets/sfx/impactos/ceramic_hit_close_01.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_01.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_02.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_03.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_04.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_05.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_06.ogg +0 -0
- package/assets/sfx/impactos/concrete_block_drag_close_07.ogg +0 -0
- package/assets/sfx/impactos/crack_close_01.ogg +0 -0
- package/assets/sfx/impactos/crack_close_02.ogg +0 -0
- package/assets/sfx/impactos/crack_close_03.ogg +0 -0
- package/assets/sfx/impactos/crack_close_04.ogg +0 -0
- package/assets/sfx/impactos/crack_close_05.ogg +0 -0
- package/assets/sfx/impactos/crack_close_06.ogg +0 -0
- package/assets/sfx/impactos/crack_close_07.ogg +0 -0
- package/assets/sfx/impactos/crack_close_08.ogg +0 -0
- package/assets/sfx/impactos/crack_close_09.ogg +0 -0
- package/assets/sfx/impactos/crack_close_10.ogg +0 -0
- package/assets/sfx/impactos/crumble_close_01.ogg +0 -0
- package/assets/sfx/impactos/crumble_close_02.ogg +0 -0
- package/assets/sfx/impactos/crumble_close_03.ogg +0 -0
- package/assets/sfx/impactos/crumble_close_04.ogg +0 -0
- package/assets/sfx/impactos/crumble_close_05.ogg +0 -0
- package/assets/sfx/impactos/flesh_fruit_splat_close_01.ogg +0 -0
- package/assets/sfx/impactos/flesh_fruit_splat_close_02.ogg +0 -0
- package/assets/sfx/impactos/flesh_fruit_splat_close_03.ogg +0 -0
- package/assets/sfx/impactos/furniture_push_wood_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_heavy_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_heavy_close_02.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_heavy_close_03.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_heavy_close_04.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_heavy_close_05.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_light_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_light_close_02.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_light_close_03.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_light_close_04.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_light_close_05.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_medium_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_medium_close_02.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_medium_close_03.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_medium_close_04.ogg +0 -0
- package/assets/sfx/impactos/glass_blunt_medium_close_05.ogg +0 -0
- package/assets/sfx/impactos/glass_bottle_break_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_debris_fall_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_debris_fall_close_02.ogg +0 -0
- package/assets/sfx/impactos/glass_debris_fall_close_03.ogg +0 -0
- package/assets/sfx/impactos/glass_debris_fall_close_04.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_01.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_02.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_03.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_04.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_05.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_06.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_07.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_08.ogg +0 -0
- package/assets/sfx/impactos/glass_shatter_close_09.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_21.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_22.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_23.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_24.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_25.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_26.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_27.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_28.ogg +0 -0
- package/assets/sfx/impactos/gravel_hit_close_29.ogg +0 -0
- package/assets/sfx/impactos/impact_generic_light_close_01.ogg +0 -0
- package/assets/sfx/impactos/impact_generic_light_close_02.ogg +0 -0
- package/assets/sfx/impactos/impact_generic_light_close_03.ogg +0 -0
- package/assets/sfx/impactos/impact_generic_light_close_04.ogg +0 -0
- package/assets/sfx/impactos/impact_generic_light_close_05.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_01.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_02.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_03.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_04.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_05.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_06.ogg +0 -0
- package/assets/sfx/impactos/masonry_blunt_close_07.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_01.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_02.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_03.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_04.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_05.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_21.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_22.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_23.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_24.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_25.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_26.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_27.ogg +0 -0
- package/assets/sfx/impactos/masonry_bullet_close_28.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_heavy_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_heavy_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_heavy_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_heavy_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_heavy_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_light_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_light_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_light_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_light_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_light_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_medium_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_medium_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_medium_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_medium_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_blunt_medium_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_06.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_21.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_22.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_23.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_24.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_25.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_26.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_27.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_28.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_29.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_30.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_31.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_32.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_33.ogg +0 -0
- package/assets/sfx/impactos/metal_bullet_close_34.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_06.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_07.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_08.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_09.ogg +0 -0
- package/assets/sfx/impactos/metal_fall_close_10.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_01.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_02.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_03.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_04.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_05.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_06.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_07.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_08.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_09.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_10.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_11.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_12.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_13.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_14.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_15.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_16.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_17.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_18.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_19.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_20.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_21.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_22.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_23.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_24.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_25.ogg +0 -0
- package/assets/sfx/impactos/metal_thin_close_26.ogg +0 -0
- package/assets/sfx/impactos/paper_tear_close_01.ogg +0 -0
- package/assets/sfx/impactos/paper_tear_close_02.ogg +0 -0
- package/assets/sfx/impactos/plastic_hit_close_01.ogg +0 -0
- package/assets/sfx/impactos/plastic_hit_close_02.ogg +0 -0
- package/assets/sfx/impactos/plastic_hit_close_03.ogg +0 -0
- package/assets/sfx/impactos/plastic_hit_close_04.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_21.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_22.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_23.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_24.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_25.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_26.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_27.ogg +0 -0
- package/assets/sfx/impactos/ricochet_metal_close_28.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_01.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_02.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_03.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_04.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_05.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_06.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_07.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_08.ogg +0 -0
- package/assets/sfx/impactos/rubble_falling_close_09.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_01.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_02.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_03.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_04.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_05.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_06.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_07.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_08.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_09.ogg +0 -0
- package/assets/sfx/impactos/soft_bullet_close_10.ogg +0 -0
- package/assets/sfx/impactos/soil_bullet_close_21.ogg +0 -0
- package/assets/sfx/impactos/soil_bullet_close_22.ogg +0 -0
- package/assets/sfx/impactos/soil_bullet_close_23.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_heavy_close_01.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_heavy_close_02.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_heavy_close_03.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_heavy_close_04.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_heavy_close_05.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_light_close_01.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_light_close_02.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_light_close_03.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_light_close_04.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_light_close_05.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_medium_close_01.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_medium_close_02.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_medium_close_03.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_medium_close_04.ogg +0 -0
- package/assets/sfx/impactos/wood_blunt_medium_close_05.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_01.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_02.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_03.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_04.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_05.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_06.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_07.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_08.ogg +0 -0
- package/assets/sfx/impactos/wood_fall_close_09.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_01.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_02.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_03.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_04.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_05.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_06.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_07.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_08.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_09.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_10.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_11.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_12.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_13.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_14.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_21.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_22.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_23.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_24.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_25.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_26.ogg +0 -0
- package/assets/sfx/impactos/wood_hit_close_27.ogg +0 -0
- package/assets/sfx/itens-portas/backpack_open_shut_01.ogg +0 -0
- package/assets/sfx/itens-portas/backpack_open_shut_02.ogg +0 -0
- package/assets/sfx/itens-portas/backpack_open_shut_03.ogg +0 -0
- package/assets/sfx/itens-portas/backpack_open_shut_04.ogg +0 -0
- package/assets/sfx/itens-portas/backpack_open_shut_05.ogg +0 -0
- package/assets/sfx/itens-portas/backpack_open_shut_06.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_01.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_02.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_03.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_04.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_05.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_06.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_07.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_08.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_09.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_10.ogg +0 -0
- package/assets/sfx/itens-portas/book_open_shut_11.ogg +0 -0
- package/assets/sfx/itens-portas/door_creak_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_creak_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_creak_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_creak_06.ogg +0 -0
- package/assets/sfx/itens-portas/door_creak_07.ogg +0 -0
- package/assets/sfx/itens-portas/door_glass_sliding_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_glass_sliding_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_glass_sliding_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_glass_sliding_04.ogg +0 -0
- package/assets/sfx/itens-portas/door_knock_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_04.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_05.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_06.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_07.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_08.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_09.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_10.ogg +0 -0
- package/assets/sfx/itens-portas/door_lock_unlock_11.ogg +0 -0
- package/assets/sfx/itens-portas/door_locked_rattle_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_locked_rattle_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_locked_rattle_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_04.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_05.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_06.ogg +0 -0
- package/assets/sfx/itens-portas/door_metal_open_shut_07.ogg +0 -0
- package/assets/sfx/itens-portas/door_slam_wood_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_slam_wood_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_slam_wood_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_slam_wood_04.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_open_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_open_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_open_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_open_04.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_01.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_02.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_03.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_04.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_05.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_06.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_07.ogg +0 -0
- package/assets/sfx/itens-portas/door_wood_shut_08.ogg +0 -0
- package/assets/sfx/itens-portas/drawer_open_01.ogg +0 -0
- package/assets/sfx/itens-portas/drawer_open_02.ogg +0 -0
- package/assets/sfx/itens-portas/drawer_shut_01.ogg +0 -0
- package/assets/sfx/itens-portas/drawer_shut_02.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_bag_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_bag_02.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_glass_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_metal_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_metal_02.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_metal_03.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_metal_04.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_metal_05.ogg +0 -0
- package/assets/sfx/itens-portas/item_drop_paper_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_coins_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_coins_02.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_generic_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_generic_02.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_generic_03.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_generic_04.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_leather_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_leather_02.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_leather_03.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_leather_04.ogg +0 -0
- package/assets/sfx/itens-portas/item_pickup_leather_05.ogg +0 -0
- package/assets/sfx/itens-portas/item_setdown_01.ogg +0 -0
- package/assets/sfx/itens-portas/item_setdown_02.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_01.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_02.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_03.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_04.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_05.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_06.ogg +0 -0
- package/assets/sfx/itens-portas/keys_jingle_07.ogg +0 -0
- package/assets/sfx/itens-portas/lever_pull_01.ogg +0 -0
- package/assets/sfx/itens-portas/lever_pull_02.ogg +0 -0
- package/assets/sfx/itens-portas/lever_pull_03.ogg +0 -0
- package/assets/sfx/itens-portas/lever_pull_04.ogg +0 -0
- package/assets/sfx/itens-portas/lever_pull_05.ogg +0 -0
- package/assets/sfx/itens-portas/lever_pull_06.ogg +0 -0
- package/assets/sfx/itens-portas/metal_latch_01.ogg +0 -0
- package/assets/sfx/itens-portas/metal_latch_02.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_01.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_02.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_03.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_04.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_05.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_06.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_07.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_08.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_09.ogg +0 -0
- package/assets/sfx/itens-portas/plates_hit_10.ogg +0 -0
- package/assets/sfx/itens-portas/plates_slide_01.ogg +0 -0
- package/assets/sfx/itens-portas/plates_slide_02.ogg +0 -0
- package/assets/sfx/itens-portas/plates_slide_03.ogg +0 -0
- package/assets/sfx/itens-portas/plates_slide_04.ogg +0 -0
- package/assets/sfx/itens-portas/saw_wood_01.ogg +0 -0
- package/assets/sfx/itens-portas/switch_click_01.ogg +0 -0
- package/assets/sfx/itens-portas/switch_click_02.ogg +0 -0
- package/assets/sfx/itens-portas/switch_click_03.ogg +0 -0
- package/assets/sfx/itens-portas/switch_click_04.ogg +0 -0
- package/assets/sfx/itens-portas/toilet_flush_01.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_01.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_02.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_03.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_04.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_05.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_06.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_07.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_08.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_09.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_10.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_11.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_12.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_13.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_14.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_15.ogg +0 -0
- package/assets/sfx/itens-portas/tools_handling_16.ogg +0 -0
- package/assets/sfx/itens-portas/water_drip_01.ogg +0 -0
- package/assets/sfx/itens-portas/water_drip_02.ogg +0 -0
- package/assets/sfx/itens-portas/water_drip_03.ogg +0 -0
- package/assets/sfx/itens-portas/water_drip_04.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_01.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_02.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_03.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_04.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_05.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_06.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_07.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_08.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_09.ogg +0 -0
- package/assets/sfx/itens-portas/water_faucet_10.ogg +0 -0
- package/assets/sfx/personagem/axe_chop_01.ogg +0 -0
- package/assets/sfx/personagem/axe_chop_02.ogg +0 -0
- package/assets/sfx/personagem/blunt_hit_metal_01.ogg +0 -0
- package/assets/sfx/personagem/blunt_hit_metal_02.ogg +0 -0
- package/assets/sfx/personagem/blunt_hit_metal_03.ogg +0 -0
- package/assets/sfx/personagem/blunt_hit_metal_04.ogg +0 -0
- package/assets/sfx/personagem/blunt_hit_metal_05.ogg +0 -0
- package/assets/sfx/personagem/body_fall_01.ogg +0 -0
- package/assets/sfx/personagem/body_fall_02.ogg +0 -0
- package/assets/sfx/personagem/body_fall_03.ogg +0 -0
- package/assets/sfx/personagem/body_fall_04.ogg +0 -0
- package/assets/sfx/personagem/body_fall_05.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_01.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_02.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_03.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_04.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_05.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_06.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_07.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_08.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_09.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_10.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_11.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_12.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_13.ogg +0 -0
- package/assets/sfx/personagem/cloth_rustle_14.ogg +0 -0
- package/assets/sfx/personagem/drink_gulp_01.ogg +0 -0
- package/assets/sfx/personagem/drink_gulp_02.ogg +0 -0
- package/assets/sfx/personagem/drink_gulp_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_carpet_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_carpet_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_carpet_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_carpet_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_carpet_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_run_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_run_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_run_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_run_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_run_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_walk_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_walk_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_walk_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_walk_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_concrete_walk_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_run_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_run_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_run_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_run_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_run_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_walk_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_walk_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_walk_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_walk_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_dirt_walk_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_06.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_07.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_08.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_09.ogg +0 -0
- package/assets/sfx/personagem/footstep_generic_alt_10.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt2_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt2_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt2_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt2_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_run_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_run_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_run_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_run_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_run_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_walk_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_walk_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_walk_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_walk_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_grass_walk_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_06.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_07.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_08.ogg +0 -0
- package/assets/sfx/personagem/footstep_hard_alt_09.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_run_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_run_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_run_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_run_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_run_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_walk_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_walk_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_walk_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_walk_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_metal_walk_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_run_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_run_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_run_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_run_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_run_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_walk_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_walk_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_walk_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_walk_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_snow_walk_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_alt_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_alt_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_alt_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_alt_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_alt_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_run_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_run_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_run_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_run_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_run_05.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_walk_01.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_walk_02.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_walk_03.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_walk_04.ogg +0 -0
- package/assets/sfx/personagem/footstep_wood_walk_05.ogg +0 -0
- package/assets/sfx/personagem/frying_pan_hit_01.ogg +0 -0
- package/assets/sfx/personagem/frying_pan_hit_02.ogg +0 -0
- package/assets/sfx/personagem/frying_pan_hit_03.ogg +0 -0
- package/assets/sfx/personagem/grab_01.ogg +0 -0
- package/assets/sfx/personagem/kick_hit_01.ogg +0 -0
- package/assets/sfx/personagem/kick_hit_02.ogg +0 -0
- package/assets/sfx/personagem/kick_hit_03.ogg +0 -0
- package/assets/sfx/personagem/kick_hit_04.ogg +0 -0
- package/assets/sfx/personagem/kick_hit_05.ogg +0 -0
- package/assets/sfx/personagem/knife_draw_01.ogg +0 -0
- package/assets/sfx/personagem/knife_draw_02.ogg +0 -0
- package/assets/sfx/personagem/knife_draw_03.ogg +0 -0
- package/assets/sfx/personagem/knife_scrape_01.ogg +0 -0
- package/assets/sfx/personagem/knife_slash_01.ogg +0 -0
- package/assets/sfx/personagem/knife_slash_02.ogg +0 -0
- package/assets/sfx/personagem/land_concrete_01.ogg +0 -0
- package/assets/sfx/personagem/land_concrete_02.ogg +0 -0
- package/assets/sfx/personagem/land_dirt_01.ogg +0 -0
- package/assets/sfx/personagem/land_dirt_02.ogg +0 -0
- package/assets/sfx/personagem/land_grass_01.ogg +0 -0
- package/assets/sfx/personagem/land_grass_02.ogg +0 -0
- package/assets/sfx/personagem/land_metal_01.ogg +0 -0
- package/assets/sfx/personagem/land_metal_02.ogg +0 -0
- package/assets/sfx/personagem/land_snow_01.ogg +0 -0
- package/assets/sfx/personagem/land_snow_02.ogg +0 -0
- package/assets/sfx/personagem/land_wood_01.ogg +0 -0
- package/assets/sfx/personagem/land_wood_02.ogg +0 -0
- package/assets/sfx/personagem/player_breath_run_01.ogg +0 -0
- package/assets/sfx/personagem/player_breath_run_02.ogg +0 -0
- package/assets/sfx/personagem/player_breath_run_03.ogg +0 -0
- package/assets/sfx/personagem/player_breath_run_04.ogg +0 -0
- package/assets/sfx/personagem/player_breath_run_05.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_01.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_02.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_03.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_04.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_05.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_06.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_07.ogg +0 -0
- package/assets/sfx/personagem/player_death_female_08.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_01.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_02.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_03.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_04.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_05.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_06.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_07.ogg +0 -0
- package/assets/sfx/personagem/player_death_male_08.ogg +0 -0
- package/assets/sfx/personagem/player_effort_01.ogg +0 -0
- package/assets/sfx/personagem/player_effort_02.ogg +0 -0
- package/assets/sfx/personagem/player_effort_03.ogg +0 -0
- package/assets/sfx/personagem/player_effort_04.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_female_01.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_female_02.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_female_03.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_female_04.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_female_05.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_female_06.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_male_01.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_male_02.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_male_03.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_male_04.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_male_05.ogg +0 -0
- package/assets/sfx/personagem/player_hurt_male_06.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_01.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_02.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_03.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_04.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_05.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_06.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_07.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_08.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_09.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_alt_10.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_body_01.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_body_02.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_body_03.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_body_04.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_body_05.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_body_06.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_face_01.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_face_02.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_face_03.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_face_04.ogg +0 -0
- package/assets/sfx/personagem/punch_hit_face_05.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_01.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_02.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_03.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_04.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_05.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_06.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_07.ogg +0 -0
- package/assets/sfx/personagem/punch_swing_08.ogg +0 -0
- package/assets/sfx/personagem/scream_01.ogg +0 -0
- package/assets/sfx/personagem/scream_02.ogg +0 -0
- package/assets/sfx/personagem/scream_03.ogg +0 -0
- package/assets/sfx/personagem/scream_04.ogg +0 -0
- package/assets/sfx/personagem/slap_01.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_01.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_02.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_03.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_04.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_05.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_06.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_07.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_08.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_09.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_10.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_11.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_12.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_13.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_14.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_15.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_16.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_17.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_18.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_19.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_20.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_21.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_22.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_23.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_24.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_25.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_26.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_27.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_28.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_29.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_30.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_31.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_32.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_33.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_34.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_35.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_36.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_37.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_38.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_39.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_40.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_41.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_42.ogg +0 -0
- package/assets/sfx/personagem/swing_whoosh_alt_43.ogg +0 -0
- package/assets/sfx/personagem/zombie_creature_01.ogg +0 -0
- package/assets/sfx/personagem/zombie_creature_02.ogg +0 -0
- package/assets/sfx/personagem/zombie_creature_03.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_01.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_02.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_03.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_04.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_05.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_06.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_07.ogg +0 -0
- package/assets/sfx/personagem/zombie_death_08.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_01.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_02.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_03.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_04.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_05.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_06.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_07.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_08.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_09.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_10.ogg +0 -0
- package/assets/sfx/personagem/zombie_groan_11.ogg +0 -0
- package/assets/sfx/veiculos/car_door_open_01.ogg +0 -0
- package/assets/sfx/veiculos/car_door_shut_01.ogg +0 -0
- package/assets/sfx/veiculos/car_gear_shift_01.ogg +0 -0
- package/assets/sfx/veiculos/car_trunk_shut_01.ogg +0 -0
- package/assets/sfx/veiculos/car_window_01.ogg +0 -0
- package/assets/sfx/veiculos/car_window_02.ogg +0 -0
- package/assets/sfx/veiculos/engine_loop_car_high_01.ogg +0 -0
- package/assets/sfx/veiculos/engine_loop_car_idle_01.ogg +0 -0
- package/assets/sfx/veiculos/engine_start_run_stop_01.ogg +0 -0
- package/assets/sfx/veiculos/engine_start_run_stop_02.ogg +0 -0
- package/dist/chunk-KBTUANNG.js.map +0 -1
package/dist/index.global.js
CHANGED
|
@@ -4,6 +4,7 @@ var GameAudio = (() => {
|
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
8
|
var __export = (target, all) => {
|
|
8
9
|
for (var name in all)
|
|
9
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -17,6 +18,7 @@ var GameAudio = (() => {
|
|
|
17
18
|
return to;
|
|
18
19
|
};
|
|
19
20
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
20
22
|
|
|
21
23
|
// src/index.ts
|
|
22
24
|
var index_exports = {};
|
|
@@ -64,13 +66,19 @@ var GameAudio = (() => {
|
|
|
64
66
|
LIBRARY_BANK: () => LIBRARY_BANK,
|
|
65
67
|
LIBRARY_LOOPS: () => LIBRARY_LOOPS,
|
|
66
68
|
LIBRARY_SOUNDS: () => LIBRARY_SOUNDS,
|
|
69
|
+
LOCAL_PACK_BANK_ID: () => LOCAL_PACK_BANK_ID,
|
|
70
|
+
LOCAL_PACK_LICENSES: () => LOCAL_PACK_LICENSES,
|
|
71
|
+
LOCAL_PACK_PREFERENCES: () => LOCAL_PACK_PREFERENCES,
|
|
67
72
|
LOOP_SMOOTHING: () => LOOP_SMOOTHING,
|
|
68
73
|
LOOP_START_ABOVE: () => LOOP_START_ABOVE,
|
|
74
|
+
LocalSoundPackError: () => LocalSoundPackError,
|
|
69
75
|
MIX_PROFILES: () => MIX_PROFILES,
|
|
70
76
|
OPEN_CUTOFF: () => OPEN_CUTOFF,
|
|
71
77
|
PAN_LIMIT: () => PAN_LIMIT,
|
|
72
78
|
PAN_MIN_DISTANCE: () => PAN_MIN_DISTANCE,
|
|
73
79
|
PICKUP_CLASSES: () => PICKUP_CLASSES,
|
|
80
|
+
RADIO_BANK: () => RADIO_BANK,
|
|
81
|
+
RADIO_TRACKS: () => RADIO_TRACKS,
|
|
74
82
|
SAMPLE_ENVIRONMENTS: () => SAMPLE_ENVIRONMENTS,
|
|
75
83
|
SDK_LICENSES: () => SDK_LICENSES,
|
|
76
84
|
SFX_BLOWS: () => SFX_BLOWS,
|
|
@@ -80,9 +88,12 @@ var GameAudio = (() => {
|
|
|
80
88
|
SFX_LAYERS: () => SFX_LAYERS,
|
|
81
89
|
SFX_MATERIALS: () => SFX_MATERIALS,
|
|
82
90
|
SFX_TIERS: () => SFX_TIERS,
|
|
91
|
+
TRIM_FADE: () => TRIM_FADE,
|
|
83
92
|
USER_SAMPLES_BANK: () => USER_SAMPLES_BANK,
|
|
84
93
|
USER_SOUND_PREFIX: () => USER_SOUND_PREFIX,
|
|
85
94
|
VOICE_GROUPS: () => VOICE_GROUPS,
|
|
95
|
+
aliasSample: () => aliasSample,
|
|
96
|
+
applyLocalSoundPack: () => applyLocalSoundPack,
|
|
86
97
|
audioBenchTextOf: () => audioBenchTextOf,
|
|
87
98
|
balanceOf: () => balanceOf,
|
|
88
99
|
bufferOf: () => bufferOf,
|
|
@@ -104,6 +115,7 @@ var GameAudio = (() => {
|
|
|
104
115
|
crossGains: () => crossGains,
|
|
105
116
|
cutoffDivisor: () => cutoffDivisor,
|
|
106
117
|
dbOf: () => dbOf,
|
|
118
|
+
defaultIdleScheduler: () => defaultIdleScheduler,
|
|
107
119
|
drawBetween: () => drawBetween,
|
|
108
120
|
encodeWav: () => encodeWav,
|
|
109
121
|
endDropDb: () => endDropDb,
|
|
@@ -117,6 +129,7 @@ var GameAudio = (() => {
|
|
|
117
129
|
impactSoundId: () => impactSoundId,
|
|
118
130
|
inlineLoader: () => inlineLoader,
|
|
119
131
|
isCalibrationUrl: () => isCalibrationUrl,
|
|
132
|
+
isShippableLicense: () => isShippableLicense,
|
|
120
133
|
isSilent: () => isSilent,
|
|
121
134
|
kitSampleBank: () => kitSampleBank,
|
|
122
135
|
kitSampleDefaults: () => kitSampleDefaults,
|
|
@@ -124,17 +137,21 @@ var GameAudio = (() => {
|
|
|
124
137
|
listenerDistance: () => listenerDistance,
|
|
125
138
|
loadKitSamples: () => loadKitSamples,
|
|
126
139
|
loadUserSamples: () => loadUserSamples,
|
|
140
|
+
localPackSamples: () => localPackSamples,
|
|
127
141
|
loopCrossfade: () => loopCrossfade,
|
|
142
|
+
loopRate: () => loopRate,
|
|
128
143
|
measureCriteria: () => measureCriteria,
|
|
129
144
|
noiseClassRecipe: () => noiseClassRecipe,
|
|
130
145
|
onsetIndex: () => onsetIndex,
|
|
131
146
|
panFor: () => panFor,
|
|
147
|
+
parseLocalSoundPack: () => parseLocalSoundPack,
|
|
132
148
|
parseSfxName: () => parseSfxName,
|
|
133
149
|
peakIndex: () => peakIndex,
|
|
134
150
|
peakOf: () => peakOf,
|
|
135
151
|
pickTake: () => pickTake,
|
|
136
152
|
planSample: () => planSample,
|
|
137
153
|
planSound: () => planSound,
|
|
154
|
+
radioTrack: () => radioTrack,
|
|
138
155
|
realize: () => realize,
|
|
139
156
|
realizeSample: () => realizeSample,
|
|
140
157
|
recordOutput: () => recordOutput,
|
|
@@ -420,16 +437,16 @@ var GameAudio = (() => {
|
|
|
420
437
|
}
|
|
421
438
|
return pending;
|
|
422
439
|
}
|
|
423
|
-
function drawLayer(
|
|
440
|
+
function drawLayer(layer2, scope) {
|
|
424
441
|
const pending = { at: 0, gain: 1, filters: [], modulators: [] };
|
|
425
|
-
for (const key of Object.keys(
|
|
426
|
-
if (key === "at" &&
|
|
427
|
-
else if (key === "duration" &&
|
|
428
|
-
else if (key === "gain" &&
|
|
429
|
-
else if (key === "source" &&
|
|
430
|
-
else if (key === "source" &&
|
|
431
|
-
else if (key === "filters" &&
|
|
432
|
-
else if (key === "modulators" &&
|
|
442
|
+
for (const key of Object.keys(layer2)) {
|
|
443
|
+
if (key === "at" && layer2.at !== void 0) pending.at = draw(layer2.at, scope);
|
|
444
|
+
else if (key === "duration" && layer2.duration !== void 0) pending.duration = draw(layer2.duration, scope);
|
|
445
|
+
else if (key === "gain" && layer2.gain !== void 0) pending.gain = draw(layer2.gain, scope);
|
|
446
|
+
else if (key === "source" && layer2.source.kind === "osc") pending.automation = drawAutomation(layer2.source.frequency, scope);
|
|
447
|
+
else if (key === "source" && layer2.source.kind === "formant_voice") pending.voice = drawVoice(layer2.source, scope);
|
|
448
|
+
else if (key === "filters" && layer2.filters) pending.filters = layer2.filters.bank.map((spec) => drawFilter(spec, scope));
|
|
449
|
+
else if (key === "modulators" && layer2.modulators) pending.modulators = layer2.modulators.map((modulator) => drawModulator(modulator, scope));
|
|
433
450
|
}
|
|
434
451
|
return pending;
|
|
435
452
|
}
|
|
@@ -440,8 +457,8 @@ var GameAudio = (() => {
|
|
|
440
457
|
if (source.offset === "fit") return scope.random() * Math.max(0, noiseSeconds - duration);
|
|
441
458
|
return scope.random() * (source.offsetScale ?? 1);
|
|
442
459
|
}
|
|
443
|
-
function finishSource(
|
|
444
|
-
const source =
|
|
460
|
+
function finishSource(layer2, pending, duration, offset) {
|
|
461
|
+
const source = layer2.source;
|
|
445
462
|
if (source.kind === "noise") return { kind: "noise", offset, loop: source.loop === true };
|
|
446
463
|
if (source.kind === "osc") return { kind: "osc", wave: source.wave, frequency: finishAutomation(pending.automation ?? {}, duration) };
|
|
447
464
|
const voice2 = pending.voice;
|
|
@@ -463,23 +480,23 @@ var GameAudio = (() => {
|
|
|
463
480
|
function finishEnvelope(envelope2, duration, level) {
|
|
464
481
|
return envelope2.map(([time, value, curve, fixed2]) => ({ time: timeOf(time, duration), value: fixed2 === "fixed" ? value : value * level, curve }));
|
|
465
482
|
}
|
|
466
|
-
function planLayer(
|
|
467
|
-
const pending = drawLayer(
|
|
483
|
+
function planLayer(layer2, scope, defaults, levelInEnvelope, soundLevel) {
|
|
484
|
+
const pending = drawLayer(layer2, scope);
|
|
468
485
|
const duration = pending.duration ?? defaults.duration;
|
|
469
486
|
if (duration === void 0) throw new Error("game-audio: a layer needs a duration (its own or the recipe\u2019s)");
|
|
470
|
-
const offset = drawOffset(
|
|
487
|
+
const offset = drawOffset(layer2.source, duration, scope, defaults.noiseSeconds);
|
|
471
488
|
const level = pending.gain * soundLevel;
|
|
472
|
-
const sourceFrequency =
|
|
489
|
+
const sourceFrequency = layer2.source.kind === "noise" ? 0 : startFrequency(pending.automation ?? pending.voice?.frequency ?? {});
|
|
473
490
|
const planned = {
|
|
474
491
|
at: pending.at,
|
|
475
492
|
duration,
|
|
476
|
-
tail:
|
|
493
|
+
tail: layer2.tail ?? defaults.tail ?? DEFAULT_TAIL,
|
|
477
494
|
level,
|
|
478
|
-
...
|
|
479
|
-
source: finishSource(
|
|
480
|
-
...
|
|
495
|
+
...layer2.wet === void 0 ? {} : { wet: layer2.wet },
|
|
496
|
+
source: finishSource(layer2, pending, duration, offset),
|
|
497
|
+
...layer2.filters ? {
|
|
481
498
|
filters: {
|
|
482
|
-
mode:
|
|
499
|
+
mode: layer2.filters.mode,
|
|
483
500
|
bank: pending.filters.map(({ spec, frequency, q, gain, level: filterLevel }) => ({
|
|
484
501
|
type: spec.type,
|
|
485
502
|
frequency: finishAutomation(frequency, duration),
|
|
@@ -490,10 +507,10 @@ var GameAudio = (() => {
|
|
|
490
507
|
}
|
|
491
508
|
} : {},
|
|
492
509
|
modulators: pending.modulators.map((modulator) => finishModulator(modulator, sourceFrequency)),
|
|
493
|
-
envelope: finishEnvelope(
|
|
510
|
+
envelope: finishEnvelope(layer2.envelope, duration, levelInEnvelope ? level : 1)
|
|
494
511
|
};
|
|
495
|
-
if (!
|
|
496
|
-
return Array.from({ length:
|
|
512
|
+
if (!layer2.repeat) return [planned];
|
|
513
|
+
return Array.from({ length: layer2.repeat.count }, (_, index) => ({ ...planned, at: planned.at + index * (layer2.repeat?.spacing ?? 0) }));
|
|
497
514
|
}
|
|
498
515
|
function scaleAutomation(automation, divisor) {
|
|
499
516
|
const scale = (value) => value === void 0 ? void 0 : value / divisor;
|
|
@@ -501,12 +518,12 @@ var GameAudio = (() => {
|
|
|
501
518
|
for (const key of ["value", "from", "to"]) if (automation[key] !== void 0) scaled[key] = scale(automation[key]);
|
|
502
519
|
return scaled;
|
|
503
520
|
}
|
|
504
|
-
function muffle(
|
|
505
|
-
if (divisor === 1 || !
|
|
506
|
-
const bank =
|
|
507
|
-
return { ...
|
|
521
|
+
function muffle(layer2, divisor) {
|
|
522
|
+
if (divisor === 1 || !layer2.filters) return layer2;
|
|
523
|
+
const bank = layer2.filters.bank.map((filter) => filter.type === "lowpass" ? { ...filter, frequency: scaleAutomation(filter.frequency, divisor) } : filter);
|
|
524
|
+
return { ...layer2, filters: { ...layer2.filters, bank } };
|
|
508
525
|
}
|
|
509
|
-
var layerEnd = (
|
|
526
|
+
var layerEnd = (layer2) => layer2.at + layer2.duration + layer2.tail;
|
|
510
527
|
function planSound(recipe2, input = {}) {
|
|
511
528
|
const listener = input.listener ?? DEFAULT_LISTENER;
|
|
512
529
|
const distance = input.distance ?? (input.position ? listenerDistance(listener, input.position, input.distanceMode) : 0);
|
|
@@ -534,7 +551,7 @@ var GameAudio = (() => {
|
|
|
534
551
|
noiseSeconds: input.noiseSeconds ?? DEFAULT_NOISE_SECONDS
|
|
535
552
|
};
|
|
536
553
|
const divisor = cutoffDivisor(recipe2.falloff, distance) / (1 - OCCLUSION_CUTOFF * occlusion);
|
|
537
|
-
const layers = recipe2.layers.flatMap((
|
|
554
|
+
const layers = recipe2.layers.flatMap((layer2) => planLayer(layer2, scope, defaults, order !== "layered", level)).map((layer2) => muffle(layer2, divisor));
|
|
538
555
|
return { ...base, silent: false, length: Math.max(0, ...layers.map(layerEnd)), layers };
|
|
539
556
|
}
|
|
540
557
|
|
|
@@ -600,7 +617,16 @@ var GameAudio = (() => {
|
|
|
600
617
|
const index = pickTake(refs.length, input.memory?.get(key), input.random);
|
|
601
618
|
input.memory?.set(key, index);
|
|
602
619
|
const ref = refs[index];
|
|
603
|
-
layers.push({
|
|
620
|
+
layers.push({
|
|
621
|
+
role,
|
|
622
|
+
url: ref.url,
|
|
623
|
+
take: index,
|
|
624
|
+
gain: gain * (ref.gain ?? 1) * level,
|
|
625
|
+
rate,
|
|
626
|
+
at,
|
|
627
|
+
...ref.offset === void 0 ? {} : { offset: ref.offset },
|
|
628
|
+
...ref.duration === void 0 ? {} : { duration: ref.duration }
|
|
629
|
+
});
|
|
604
630
|
};
|
|
605
631
|
take("close", close, gains.close, 0);
|
|
606
632
|
take("far", far, gains.far, 0);
|
|
@@ -747,12 +773,46 @@ var GameAudio = (() => {
|
|
|
747
773
|
}
|
|
748
774
|
return merged;
|
|
749
775
|
}
|
|
776
|
+
var trimmed = (refs, alias) => refs.map((ref) => ({
|
|
777
|
+
...ref,
|
|
778
|
+
...alias.offset === void 0 ? {} : { offset: alias.offset },
|
|
779
|
+
...alias.duration === void 0 ? {} : { duration: alias.duration }
|
|
780
|
+
}));
|
|
781
|
+
function aliasSample(alias, file) {
|
|
782
|
+
const { tiers: _tiers, fallback: _fallback, choke: _choke, ...rest } = file;
|
|
783
|
+
return {
|
|
784
|
+
...rest,
|
|
785
|
+
id: alias.id,
|
|
786
|
+
close: trimmed(file.close, alias),
|
|
787
|
+
...file.far ? { far: trimmed(file.far, alias) } : {},
|
|
788
|
+
...alias.loop === void 0 ? {} : { loop: alias.loop },
|
|
789
|
+
...alias.baseFrequency === void 0 ? {} : { baseFrequency: alias.baseFrequency },
|
|
790
|
+
...alias.gain === void 0 ? {} : { gain: alias.gain },
|
|
791
|
+
...alias.pitch === void 0 ? {} : { pitch: alias.pitch },
|
|
792
|
+
...alias.falloff ? { falloff: alias.falloff } : {},
|
|
793
|
+
fallback: alias.id,
|
|
794
|
+
sources: [...file.sources, `alias: ${alias.id} \u2192 ${alias.file}`]
|
|
795
|
+
};
|
|
796
|
+
}
|
|
750
797
|
function createSoundRegistry(banks = []) {
|
|
751
798
|
const sounds = /* @__PURE__ */ new Map();
|
|
752
799
|
const loops = /* @__PURE__ */ new Map();
|
|
753
800
|
const sets = /* @__PURE__ */ new Map();
|
|
754
801
|
const samples = /* @__PURE__ */ new Map();
|
|
755
802
|
const owners = /* @__PURE__ */ new Map();
|
|
803
|
+
const aliases = /* @__PURE__ */ new Map();
|
|
804
|
+
const derived = /* @__PURE__ */ new Map();
|
|
805
|
+
const resolveAlias = (id) => {
|
|
806
|
+
const alias = aliases.get(id);
|
|
807
|
+
if (!alias) return void 0;
|
|
808
|
+
const cached = derived.get(id);
|
|
809
|
+
if (cached) return cached;
|
|
810
|
+
const file = samples.get(alias.file);
|
|
811
|
+
if (!file) return void 0;
|
|
812
|
+
const sample = aliasSample(alias, file);
|
|
813
|
+
derived.set(id, sample);
|
|
814
|
+
return sample;
|
|
815
|
+
};
|
|
756
816
|
const registry = {
|
|
757
817
|
register(bank) {
|
|
758
818
|
for (const sound of bank.sounds ?? []) {
|
|
@@ -772,6 +832,11 @@ var GameAudio = (() => {
|
|
|
772
832
|
samples.set(sample.id, sample);
|
|
773
833
|
owners.set(sample.id, bank.id);
|
|
774
834
|
}
|
|
835
|
+
for (const alias of bank.sampleAliases ?? []) {
|
|
836
|
+
aliases.set(alias.id, alias);
|
|
837
|
+
if (!owners.has(alias.id)) owners.set(alias.id, bank.id);
|
|
838
|
+
}
|
|
839
|
+
derived.clear();
|
|
775
840
|
},
|
|
776
841
|
patch(id, patch) {
|
|
777
842
|
const sound = sounds.get(id);
|
|
@@ -780,22 +845,31 @@ var GameAudio = (() => {
|
|
|
780
845
|
if (loop) loops.set(id, mergeRecords(loop, patch));
|
|
781
846
|
const sample = samples.get(id);
|
|
782
847
|
if (sample) samples.set(id, mergeRecords(sample, patch));
|
|
848
|
+
derived.clear();
|
|
783
849
|
},
|
|
784
850
|
remove(id) {
|
|
785
851
|
sounds.delete(id);
|
|
786
852
|
loops.delete(id);
|
|
787
853
|
sets.delete(id);
|
|
788
854
|
samples.delete(id);
|
|
855
|
+
aliases.delete(id);
|
|
789
856
|
owners.delete(id);
|
|
857
|
+
derived.clear();
|
|
858
|
+
},
|
|
859
|
+
removeSample(id) {
|
|
860
|
+
samples.delete(id);
|
|
861
|
+
aliases.delete(id);
|
|
862
|
+
if (!sounds.has(id) && !loops.has(id) && !sets.has(id)) owners.delete(id);
|
|
863
|
+
derived.clear();
|
|
790
864
|
},
|
|
791
865
|
sound: (id) => sounds.get(id),
|
|
792
866
|
loop: (id) => loops.get(id),
|
|
793
867
|
set: (id) => sets.get(id),
|
|
794
|
-
sample: (id) => samples.get(id),
|
|
868
|
+
sample: (id) => samples.get(id) ?? resolveAlias(id),
|
|
795
869
|
soundIds: () => [...sounds.keys()],
|
|
796
870
|
setIds: () => [...sets.keys()],
|
|
797
871
|
loopIds: () => [...loops.keys()],
|
|
798
|
-
sampleIds: () => [...samples.keys()],
|
|
872
|
+
sampleIds: () => [...samples.keys(), ...[...aliases.keys()].filter((id) => !samples.has(id) && resolveAlias(id) !== void 0)],
|
|
799
873
|
bankOf: (id) => owners.get(id)
|
|
800
874
|
};
|
|
801
875
|
for (const bank of banks) registry.register(bank);
|
|
@@ -1223,6 +1297,8 @@ var GameAudio = (() => {
|
|
|
1223
1297
|
var DEFAULT_LOOP_CROSSFADE = 0.25;
|
|
1224
1298
|
var LOOKAHEAD = 1.5;
|
|
1225
1299
|
var VOLUME_SMOOTHING = 0.05;
|
|
1300
|
+
var RATE_SMOOTHING = 0.04;
|
|
1301
|
+
var RATE_RANGE = [0.25, 4];
|
|
1226
1302
|
function loopCrossfade(sound) {
|
|
1227
1303
|
if (!sound.loop) return void 0;
|
|
1228
1304
|
return sound.loop === true ? DEFAULT_LOOP_CROSSFADE : Math.max(0, sound.loop.crossfade ?? DEFAULT_LOOP_CROSSFADE);
|
|
@@ -1234,6 +1310,7 @@ var GameAudio = (() => {
|
|
|
1234
1310
|
param.setValueAtTime(value(0), at);
|
|
1235
1311
|
for (let step = 1; step <= CROSSFADE_STEPS; step++) param.linearRampToValueAtTime(value(step / CROSSFADE_STEPS), at + seconds * step / CROSSFADE_STEPS);
|
|
1236
1312
|
};
|
|
1313
|
+
var loopRate = (sound, frequency) => sound.baseFrequency && sound.baseFrequency > 0 && frequency > 0 ? Math.max(RATE_RANGE[0], Math.min(RATE_RANGE[1], frequency / sound.baseFrequency)) : 1;
|
|
1237
1314
|
function createSampleLoopHandle(sound, host, volume = 0) {
|
|
1238
1315
|
const crossfade = loopCrossfade(sound) ?? DEFAULT_LOOP_CROSSFADE;
|
|
1239
1316
|
let level = volume;
|
|
@@ -1243,13 +1320,17 @@ var GameAudio = (() => {
|
|
|
1243
1320
|
let segments = [];
|
|
1244
1321
|
let last;
|
|
1245
1322
|
let timer;
|
|
1323
|
+
let panner;
|
|
1324
|
+
let rate = 1;
|
|
1325
|
+
let position;
|
|
1246
1326
|
const entry = {
|
|
1247
1327
|
get created() {
|
|
1248
1328
|
return master !== void 0;
|
|
1249
1329
|
},
|
|
1250
1330
|
rewire() {
|
|
1251
|
-
master
|
|
1252
|
-
|
|
1331
|
+
const out = panner ?? master;
|
|
1332
|
+
out?.disconnect();
|
|
1333
|
+
out?.connect(host.output(sound.bus));
|
|
1253
1334
|
},
|
|
1254
1335
|
stop() {
|
|
1255
1336
|
stopped = true;
|
|
@@ -1266,23 +1347,29 @@ var GameAudio = (() => {
|
|
|
1266
1347
|
segments = [];
|
|
1267
1348
|
master?.disconnect();
|
|
1268
1349
|
master = void 0;
|
|
1350
|
+
panner?.disconnect();
|
|
1351
|
+
panner = void 0;
|
|
1269
1352
|
fallback?.stop();
|
|
1270
1353
|
fallback = void 0;
|
|
1271
1354
|
host.unregister(entry);
|
|
1272
1355
|
}
|
|
1273
1356
|
};
|
|
1274
|
-
const
|
|
1357
|
+
const nextTake = () => {
|
|
1275
1358
|
const takes2 = sound.close;
|
|
1276
1359
|
const take = pickTake(takes2.length, last, host.random);
|
|
1277
1360
|
last = take;
|
|
1278
1361
|
const ref = takes2[take];
|
|
1279
|
-
|
|
1362
|
+
const buffer = ref ? host.buffer(ref.url) : void 0;
|
|
1363
|
+
return ref && buffer ? { buffer, ref } : void 0;
|
|
1280
1364
|
};
|
|
1281
1365
|
const schedule = (context, output, at, first) => {
|
|
1282
|
-
const
|
|
1283
|
-
if (!
|
|
1366
|
+
const next = nextTake();
|
|
1367
|
+
if (!next) return void 0;
|
|
1368
|
+
const { buffer, ref } = next;
|
|
1369
|
+
const offset = Math.max(0, Math.min(ref.offset ?? 0, buffer.duration));
|
|
1284
1370
|
const source = context.createBufferSource();
|
|
1285
1371
|
source.buffer = buffer;
|
|
1372
|
+
source.playbackRate.value = rate;
|
|
1286
1373
|
const gain = context.createGain();
|
|
1287
1374
|
source.connect(gain);
|
|
1288
1375
|
gain.connect(output);
|
|
@@ -1290,15 +1377,15 @@ var GameAudio = (() => {
|
|
|
1290
1377
|
if (buffer.duration < 2 * crossfade || sound.close.length === 1) {
|
|
1291
1378
|
source.loop = true;
|
|
1292
1379
|
if (!first) ramp2(gain.gain, "in", at, Math.max(1e-3, fade));
|
|
1293
|
-
source.start(at);
|
|
1380
|
+
source.start(at, offset);
|
|
1294
1381
|
segments.push({ source, gain, end: Number.POSITIVE_INFINITY });
|
|
1295
1382
|
return void 0;
|
|
1296
1383
|
}
|
|
1297
1384
|
if (first) gain.gain.setValueAtTime(1, at);
|
|
1298
1385
|
else ramp2(gain.gain, "in", at, fade);
|
|
1299
|
-
const end3 = at + buffer.duration;
|
|
1386
|
+
const end3 = at + (buffer.duration - offset) / rate;
|
|
1300
1387
|
ramp2(gain.gain, "out", end3 - fade, fade);
|
|
1301
|
-
source.start(at);
|
|
1388
|
+
source.start(at, offset);
|
|
1302
1389
|
source.stop(end3);
|
|
1303
1390
|
segments.push({ source, gain, end: end3 });
|
|
1304
1391
|
source.onended = () => {
|
|
@@ -1319,14 +1406,26 @@ var GameAudio = (() => {
|
|
|
1319
1406
|
pump(context, output, next, false);
|
|
1320
1407
|
}, wait);
|
|
1321
1408
|
};
|
|
1322
|
-
const
|
|
1409
|
+
const spatial = () => {
|
|
1410
|
+
if (!position || !host.listener) return 1;
|
|
1411
|
+
return falloffGain(sound.falloff ?? DEFAULT_SAMPLE_FALLOFF, 1, listenerDistance(host.listener(), position, host.distance));
|
|
1412
|
+
};
|
|
1413
|
+
const fileLevel = () => level * (sound.gain ?? 1) * spatial();
|
|
1414
|
+
const place = (context) => {
|
|
1415
|
+
if (panner && position && host.listener) panner.pan.setTargetAtTime(panFor(host.listener(), position), context.currentTime, VOLUME_SMOOTHING);
|
|
1416
|
+
};
|
|
1323
1417
|
const startFiles = () => {
|
|
1324
1418
|
if (stopped || master || !host.isReady(sound)) return master !== void 0;
|
|
1325
1419
|
const context = host.ready();
|
|
1326
1420
|
if (!context) return false;
|
|
1327
1421
|
master = context.createGain();
|
|
1328
1422
|
master.gain.setValueAtTime(fileLevel(), context.currentTime);
|
|
1329
|
-
|
|
1423
|
+
if (sound.pan !== false && position && typeof context.createStereoPanner === "function") {
|
|
1424
|
+
panner = context.createStereoPanner();
|
|
1425
|
+
if (host.listener) panner.pan.value = panFor(host.listener(), position);
|
|
1426
|
+
master.connect(panner);
|
|
1427
|
+
panner.connect(host.output(sound.bus));
|
|
1428
|
+
} else master.connect(host.output(sound.bus));
|
|
1330
1429
|
host.register(entry);
|
|
1331
1430
|
pump(context, master, context.currentTime, true);
|
|
1332
1431
|
if (fallback) {
|
|
@@ -1352,9 +1451,15 @@ var GameAudio = (() => {
|
|
|
1352
1451
|
set(next) {
|
|
1353
1452
|
if (stopped) return;
|
|
1354
1453
|
if (next.volume !== void 0) level = host.muted(sound.bus) ? 0 : Math.max(0, next.volume);
|
|
1454
|
+
if (next.position) position = next.position;
|
|
1455
|
+
if (next.frequency !== void 0 && sound.baseFrequency) rate = loopRate(sound, next.frequency);
|
|
1355
1456
|
if (level > 0) ensure();
|
|
1356
1457
|
const context = host.ready();
|
|
1357
|
-
if (master && context)
|
|
1458
|
+
if (master && context) {
|
|
1459
|
+
master.gain.setTargetAtTime(fileLevel(), context.currentTime, VOLUME_SMOOTHING);
|
|
1460
|
+
place(context);
|
|
1461
|
+
if (next.frequency !== void 0 && sound.baseFrequency) for (const segment of segments) segment.source.playbackRate.setTargetAtTime(rate, context.currentTime, RATE_SMOOTHING);
|
|
1462
|
+
}
|
|
1358
1463
|
fallback?.set(next.volume === void 0 ? next : { ...next, volume: level });
|
|
1359
1464
|
},
|
|
1360
1465
|
stop: entry.stop
|
|
@@ -1516,9 +1621,9 @@ var GameAudio = (() => {
|
|
|
1516
1621
|
}
|
|
1517
1622
|
|
|
1518
1623
|
// src/webaudio/realize-game.ts
|
|
1519
|
-
var end = (
|
|
1520
|
-
var firstFilter = (
|
|
1521
|
-
var offsetOf = (
|
|
1624
|
+
var end = (layer2, start) => start + layer2.duration + layer2.tail;
|
|
1625
|
+
var firstFilter = (layer2) => layer2.filters?.bank[0];
|
|
1626
|
+
var offsetOf = (layer2) => layer2.source.kind === "noise" ? layer2.source.offset : 0;
|
|
1522
1627
|
function setFilter(node, filter, time) {
|
|
1523
1628
|
if (!filter) return;
|
|
1524
1629
|
node.type = filter.type;
|
|
@@ -1527,28 +1632,28 @@ var GameAudio = (() => {
|
|
|
1527
1632
|
}
|
|
1528
1633
|
function realizeBurst(plan, target) {
|
|
1529
1634
|
const { context } = target;
|
|
1530
|
-
const
|
|
1531
|
-
const time = target.time +
|
|
1635
|
+
const layer2 = plan.layers[0];
|
|
1636
|
+
const time = target.time + layer2.at;
|
|
1532
1637
|
const gain = context.createGain();
|
|
1533
1638
|
gain.connect(target.output);
|
|
1534
|
-
const source = noiseSource(target,
|
|
1639
|
+
const source = noiseSource(target, layer2.source.kind === "noise" && layer2.source.loop);
|
|
1535
1640
|
const filter = context.createBiquadFilter();
|
|
1536
1641
|
source.connect(filter);
|
|
1537
1642
|
filter.connect(gain);
|
|
1538
|
-
setFilter(filter, firstFilter(
|
|
1539
|
-
applyEnvelope(gain.gain,
|
|
1540
|
-
source.start(time, offsetOf(
|
|
1541
|
-
source.stop(end(
|
|
1643
|
+
setFilter(filter, firstFilter(layer2), time);
|
|
1644
|
+
applyEnvelope(gain.gain, layer2.envelope, time);
|
|
1645
|
+
source.start(time, offsetOf(layer2));
|
|
1646
|
+
source.stop(end(layer2, time));
|
|
1542
1647
|
return voiceOf([source]);
|
|
1543
1648
|
}
|
|
1544
1649
|
function realizeScream(plan, target) {
|
|
1545
1650
|
const { context } = target;
|
|
1546
|
-
const
|
|
1547
|
-
const time = target.time +
|
|
1548
|
-
const source = noiseSource(target,
|
|
1651
|
+
const layer2 = plan.layers[0];
|
|
1652
|
+
const time = target.time + layer2.at;
|
|
1653
|
+
const source = noiseSource(target, layer2.source.kind === "noise" && layer2.source.loop);
|
|
1549
1654
|
const gain = context.createGain();
|
|
1550
1655
|
gain.connect(target.output);
|
|
1551
|
-
for (const band of
|
|
1656
|
+
for (const band of layer2.filters?.bank ?? []) {
|
|
1552
1657
|
const filter = context.createBiquadFilter();
|
|
1553
1658
|
filter.type = band.type;
|
|
1554
1659
|
if (band.q !== void 0) filter.Q.value = band.q;
|
|
@@ -1561,7 +1666,7 @@ var GameAudio = (() => {
|
|
|
1561
1666
|
level.connect(gain);
|
|
1562
1667
|
}
|
|
1563
1668
|
const sources = [source];
|
|
1564
|
-
const lfos =
|
|
1669
|
+
const lfos = layer2.modulators.map((modulator) => {
|
|
1565
1670
|
const lfo = context.createOscillator();
|
|
1566
1671
|
const depth = context.createGain();
|
|
1567
1672
|
if (modulator.wave) lfo.type = modulator.wave;
|
|
@@ -1571,75 +1676,75 @@ var GameAudio = (() => {
|
|
|
1571
1676
|
depth.connect(gain.gain);
|
|
1572
1677
|
return lfo;
|
|
1573
1678
|
});
|
|
1574
|
-
applyEnvelope(gain.gain,
|
|
1575
|
-
source.start(time, offsetOf(
|
|
1576
|
-
source.stop(end(
|
|
1679
|
+
applyEnvelope(gain.gain, layer2.envelope, time);
|
|
1680
|
+
source.start(time, offsetOf(layer2));
|
|
1681
|
+
source.stop(end(layer2, time));
|
|
1577
1682
|
for (const lfo of lfos) {
|
|
1578
1683
|
lfo.start(time);
|
|
1579
|
-
lfo.stop(end(
|
|
1684
|
+
lfo.stop(end(layer2, time));
|
|
1580
1685
|
sources.push(lfo);
|
|
1581
1686
|
}
|
|
1582
1687
|
return voiceOf(sources);
|
|
1583
1688
|
}
|
|
1584
1689
|
function realizeGroan(plan, target) {
|
|
1585
1690
|
const { context } = target;
|
|
1586
|
-
const
|
|
1587
|
-
const time = target.time +
|
|
1691
|
+
const layer2 = plan.layers[0];
|
|
1692
|
+
const time = target.time + layer2.at;
|
|
1588
1693
|
const oscillator = context.createOscillator();
|
|
1589
1694
|
const gain = context.createGain();
|
|
1590
1695
|
const filter = context.createBiquadFilter();
|
|
1591
|
-
const band = firstFilter(
|
|
1592
|
-
if (
|
|
1696
|
+
const band = firstFilter(layer2);
|
|
1697
|
+
if (layer2.source.kind === "osc") oscillator.type = layer2.source.wave;
|
|
1593
1698
|
if (band) {
|
|
1594
1699
|
filter.type = band.type;
|
|
1595
1700
|
if (band.q !== void 0) filter.Q.value = band.q;
|
|
1596
1701
|
}
|
|
1597
|
-
if (
|
|
1598
|
-
assign(oscillator.frequency,
|
|
1599
|
-
rampTo(oscillator.frequency,
|
|
1702
|
+
if (layer2.source.kind === "osc") {
|
|
1703
|
+
assign(oscillator.frequency, layer2.source.frequency, time);
|
|
1704
|
+
rampTo(oscillator.frequency, layer2.source.frequency, time);
|
|
1600
1705
|
}
|
|
1601
1706
|
if (band) assign(filter.frequency, band.frequency, time);
|
|
1602
|
-
applyEnvelope(gain.gain,
|
|
1707
|
+
applyEnvelope(gain.gain, layer2.envelope, time);
|
|
1603
1708
|
oscillator.connect(filter);
|
|
1604
1709
|
filter.connect(gain);
|
|
1605
1710
|
gain.connect(target.output);
|
|
1606
1711
|
oscillator.start(time);
|
|
1607
|
-
oscillator.stop(end(
|
|
1712
|
+
oscillator.stop(end(layer2, time));
|
|
1608
1713
|
return voiceOf([oscillator]);
|
|
1609
1714
|
}
|
|
1610
1715
|
function realizeBoom(plan, target) {
|
|
1611
1716
|
const { context } = target;
|
|
1612
|
-
const
|
|
1613
|
-
const time = target.time +
|
|
1717
|
+
const layer2 = plan.layers[0];
|
|
1718
|
+
const time = target.time + layer2.at;
|
|
1614
1719
|
const oscillator = context.createOscillator();
|
|
1615
1720
|
const gain = context.createGain();
|
|
1616
|
-
if (
|
|
1617
|
-
oscillator.type =
|
|
1618
|
-
assign(oscillator.frequency,
|
|
1619
|
-
rampTo(oscillator.frequency,
|
|
1721
|
+
if (layer2.source.kind === "osc") {
|
|
1722
|
+
oscillator.type = layer2.source.wave;
|
|
1723
|
+
assign(oscillator.frequency, layer2.source.frequency, time);
|
|
1724
|
+
rampTo(oscillator.frequency, layer2.source.frequency, time);
|
|
1620
1725
|
}
|
|
1621
|
-
applyEnvelope(gain.gain,
|
|
1726
|
+
applyEnvelope(gain.gain, layer2.envelope, time);
|
|
1622
1727
|
oscillator.connect(gain);
|
|
1623
1728
|
gain.connect(target.output);
|
|
1624
1729
|
oscillator.start(time);
|
|
1625
|
-
oscillator.stop(end(
|
|
1730
|
+
oscillator.stop(end(layer2, time));
|
|
1626
1731
|
return voiceOf([oscillator]);
|
|
1627
1732
|
}
|
|
1628
1733
|
function realizeStatic(plan, target) {
|
|
1629
1734
|
const { context } = target;
|
|
1630
|
-
const
|
|
1631
|
-
const time = target.time +
|
|
1735
|
+
const layer2 = plan.layers[0];
|
|
1736
|
+
const time = target.time + layer2.at;
|
|
1632
1737
|
const gain = context.createGain();
|
|
1633
1738
|
const source = context.createBufferSource();
|
|
1634
1739
|
const filter = context.createBiquadFilter();
|
|
1635
1740
|
source.buffer = target.noise();
|
|
1636
|
-
setFilter(filter, firstFilter(
|
|
1637
|
-
applyEnvelope(gain.gain,
|
|
1741
|
+
setFilter(filter, firstFilter(layer2), time);
|
|
1742
|
+
applyEnvelope(gain.gain, layer2.envelope, time);
|
|
1638
1743
|
source.connect(filter);
|
|
1639
1744
|
filter.connect(gain);
|
|
1640
1745
|
gain.connect(target.output);
|
|
1641
|
-
source.start(time, offsetOf(
|
|
1642
|
-
source.stop(end(
|
|
1746
|
+
source.start(time, offsetOf(layer2));
|
|
1747
|
+
source.stop(end(layer2, time));
|
|
1643
1748
|
return voiceOf([source]);
|
|
1644
1749
|
}
|
|
1645
1750
|
function realizeChord(plan, target) {
|
|
@@ -1651,14 +1756,14 @@ var GameAudio = (() => {
|
|
|
1651
1756
|
const source = layers[index].source;
|
|
1652
1757
|
if (source.kind === "osc") oscillators[index].type = source.wave;
|
|
1653
1758
|
}
|
|
1654
|
-
layers.forEach((
|
|
1655
|
-
if (
|
|
1759
|
+
layers.forEach((layer2, index) => {
|
|
1760
|
+
if (layer2.source.kind === "osc") assign(oscillators[index].frequency, layer2.source.frequency, target.time + layer2.at);
|
|
1656
1761
|
});
|
|
1657
1762
|
applyEnvelope(gain.gain, layers[0].envelope, target.time + layers[0].at);
|
|
1658
1763
|
for (const oscillator of oscillators) oscillator.connect(gain);
|
|
1659
1764
|
gain.connect(target.output);
|
|
1660
|
-
layers.forEach((
|
|
1661
|
-
layers.forEach((
|
|
1765
|
+
layers.forEach((layer2, index) => oscillators[index].start(target.time + layer2.at));
|
|
1766
|
+
layers.forEach((layer2, index) => oscillators[index].stop(end(layer2, target.time + layer2.at)));
|
|
1662
1767
|
return voiceOf(oscillators);
|
|
1663
1768
|
}
|
|
1664
1769
|
function realizeCalls(plan, target) {
|
|
@@ -1670,34 +1775,34 @@ var GameAudio = (() => {
|
|
|
1670
1775
|
if (band) filter.type = band.type;
|
|
1671
1776
|
filter.connect(gain);
|
|
1672
1777
|
gain.connect(target.output);
|
|
1673
|
-
const oscillators = plan.layers.map((
|
|
1674
|
-
const time = target.time +
|
|
1778
|
+
const oscillators = plan.layers.map((layer2) => {
|
|
1779
|
+
const time = target.time + layer2.at;
|
|
1675
1780
|
const oscillator = context.createOscillator();
|
|
1676
|
-
if (
|
|
1677
|
-
oscillator.type =
|
|
1678
|
-
assign(oscillator.frequency,
|
|
1679
|
-
rampTo(oscillator.frequency,
|
|
1781
|
+
if (layer2.source.kind === "osc") {
|
|
1782
|
+
oscillator.type = layer2.source.wave;
|
|
1783
|
+
assign(oscillator.frequency, layer2.source.frequency, time);
|
|
1784
|
+
rampTo(oscillator.frequency, layer2.source.frequency, time);
|
|
1680
1785
|
}
|
|
1681
1786
|
if (band) {
|
|
1682
1787
|
assign(filter.frequency, band.frequency, time);
|
|
1683
1788
|
if (band.q !== void 0) filter.Q.value = band.q;
|
|
1684
1789
|
}
|
|
1685
1790
|
const envelope2 = context.createGain();
|
|
1686
|
-
applyEnvelope(envelope2.gain,
|
|
1791
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1687
1792
|
oscillator.connect(envelope2);
|
|
1688
1793
|
envelope2.connect(filter);
|
|
1689
1794
|
oscillator.start(time);
|
|
1690
|
-
oscillator.stop(end(
|
|
1795
|
+
oscillator.stop(end(layer2, time));
|
|
1691
1796
|
return oscillator;
|
|
1692
1797
|
});
|
|
1693
1798
|
return voiceOf(oscillators);
|
|
1694
1799
|
}
|
|
1695
1800
|
|
|
1696
1801
|
// src/webaudio/realize-layered.ts
|
|
1697
|
-
var end2 = (
|
|
1698
|
-
function outputStage2(plan,
|
|
1802
|
+
var end2 = (layer2, start) => start + layer2.duration + layer2.tail;
|
|
1803
|
+
function outputStage2(plan, layer2, target) {
|
|
1699
1804
|
const { context } = target;
|
|
1700
|
-
const level = gainNode(context,
|
|
1805
|
+
const level = gainNode(context, layer2.level);
|
|
1701
1806
|
let node = level;
|
|
1702
1807
|
if (plan.pan !== void 0 && typeof context.createStereoPanner === "function") {
|
|
1703
1808
|
const panner = context.createStereoPanner();
|
|
@@ -1706,54 +1811,54 @@ var GameAudio = (() => {
|
|
|
1706
1811
|
node = panner;
|
|
1707
1812
|
}
|
|
1708
1813
|
node.connect(target.output);
|
|
1709
|
-
if (
|
|
1710
|
-
const send = gainNode(context,
|
|
1814
|
+
if (layer2.wet && target.wet) {
|
|
1815
|
+
const send = gainNode(context, layer2.wet);
|
|
1711
1816
|
node.connect(send);
|
|
1712
1817
|
send.connect(target.wet);
|
|
1713
1818
|
}
|
|
1714
1819
|
return level;
|
|
1715
1820
|
}
|
|
1716
|
-
function realizeNoiseLayer(plan,
|
|
1821
|
+
function realizeNoiseLayer(plan, layer2, target) {
|
|
1717
1822
|
const { context } = target;
|
|
1718
|
-
const time = target.time +
|
|
1719
|
-
const source = noiseSource(target,
|
|
1720
|
-
const filters = (
|
|
1823
|
+
const time = target.time + layer2.at;
|
|
1824
|
+
const source = noiseSource(target, layer2.source.kind === "noise" && layer2.source.loop);
|
|
1825
|
+
const filters = (layer2.filters?.bank ?? []).map((filter) => {
|
|
1721
1826
|
const node = filterNode(context, filter, time);
|
|
1722
1827
|
rampTo(node.frequency, filter.frequency, time);
|
|
1723
1828
|
return node;
|
|
1724
1829
|
});
|
|
1725
1830
|
const envelope2 = context.createGain();
|
|
1726
|
-
applyEnvelope(envelope2.gain,
|
|
1831
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1727
1832
|
let tail = source;
|
|
1728
1833
|
for (const filter of filters) tail = tail.connect(filter);
|
|
1729
1834
|
tail.connect(envelope2);
|
|
1730
|
-
envelope2.connect(outputStage2(plan,
|
|
1731
|
-
source.start(time,
|
|
1732
|
-
source.stop(end2(
|
|
1835
|
+
envelope2.connect(outputStage2(plan, layer2, target));
|
|
1836
|
+
source.start(time, layer2.source.kind === "noise" ? layer2.source.offset : 0);
|
|
1837
|
+
source.stop(end2(layer2, time));
|
|
1733
1838
|
return [source];
|
|
1734
1839
|
}
|
|
1735
|
-
function realizeToneLayer(plan,
|
|
1840
|
+
function realizeToneLayer(plan, layer2, target) {
|
|
1736
1841
|
const { context } = target;
|
|
1737
|
-
const time = target.time +
|
|
1842
|
+
const time = target.time + layer2.at;
|
|
1738
1843
|
const oscillator = context.createOscillator();
|
|
1739
|
-
if (
|
|
1740
|
-
oscillator.type =
|
|
1741
|
-
assign(oscillator.frequency,
|
|
1742
|
-
rampTo(oscillator.frequency,
|
|
1844
|
+
if (layer2.source.kind === "osc") {
|
|
1845
|
+
oscillator.type = layer2.source.wave;
|
|
1846
|
+
assign(oscillator.frequency, layer2.source.frequency, time);
|
|
1847
|
+
rampTo(oscillator.frequency, layer2.source.frequency, time);
|
|
1743
1848
|
}
|
|
1744
1849
|
const envelope2 = context.createGain();
|
|
1745
|
-
applyEnvelope(envelope2.gain,
|
|
1850
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1746
1851
|
oscillator.connect(envelope2);
|
|
1747
|
-
envelope2.connect(outputStage2(plan,
|
|
1852
|
+
envelope2.connect(outputStage2(plan, layer2, target));
|
|
1748
1853
|
oscillator.start(time);
|
|
1749
|
-
oscillator.stop(end2(
|
|
1854
|
+
oscillator.stop(end2(layer2, time));
|
|
1750
1855
|
return [oscillator];
|
|
1751
1856
|
}
|
|
1752
|
-
function realizeVoiceLayer(plan,
|
|
1753
|
-
const source =
|
|
1857
|
+
function realizeVoiceLayer(plan, layer2, target) {
|
|
1858
|
+
const source = layer2.source;
|
|
1754
1859
|
if (source.kind !== "formant_voice") return [];
|
|
1755
1860
|
const { context } = target;
|
|
1756
|
-
const time = target.time +
|
|
1861
|
+
const time = target.time + layer2.at;
|
|
1757
1862
|
const oscillator = context.createOscillator();
|
|
1758
1863
|
oscillator.type = source.wave;
|
|
1759
1864
|
assign(oscillator.frequency, source.frequency, time);
|
|
@@ -1774,10 +1879,10 @@ var GameAudio = (() => {
|
|
|
1774
1879
|
for (const formant of formants) formant.connect(mix);
|
|
1775
1880
|
breathLevel.connect(mix);
|
|
1776
1881
|
const envelope2 = context.createGain();
|
|
1777
|
-
applyEnvelope(envelope2.gain,
|
|
1882
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1778
1883
|
mix.connect(envelope2);
|
|
1779
|
-
envelope2.connect(outputStage2(plan,
|
|
1780
|
-
const stop = end2(
|
|
1884
|
+
envelope2.connect(outputStage2(plan, layer2, target));
|
|
1885
|
+
const stop = end2(layer2, time);
|
|
1781
1886
|
oscillator.start(time);
|
|
1782
1887
|
vibrato.start(time);
|
|
1783
1888
|
breath.start(time, source.breath.offset);
|
|
@@ -1787,24 +1892,24 @@ var GameAudio = (() => {
|
|
|
1787
1892
|
return [oscillator, vibrato, breath];
|
|
1788
1893
|
}
|
|
1789
1894
|
function realizeLayered(plan, target) {
|
|
1790
|
-
const sources = plan.layers.flatMap((
|
|
1791
|
-
if (
|
|
1792
|
-
if (
|
|
1793
|
-
return realizeVoiceLayer(plan,
|
|
1895
|
+
const sources = plan.layers.flatMap((layer2) => {
|
|
1896
|
+
if (layer2.source.kind === "noise") return realizeNoiseLayer(plan, layer2, target);
|
|
1897
|
+
if (layer2.source.kind === "osc") return realizeToneLayer(plan, layer2, target);
|
|
1898
|
+
return realizeVoiceLayer(plan, layer2, target);
|
|
1794
1899
|
});
|
|
1795
1900
|
return voiceOf(sources);
|
|
1796
1901
|
}
|
|
1797
1902
|
function realizeSiren(plan, target) {
|
|
1798
1903
|
const { context } = target;
|
|
1799
|
-
const
|
|
1800
|
-
const time = target.time +
|
|
1904
|
+
const layer2 = plan.layers[0];
|
|
1905
|
+
const time = target.time + layer2.at;
|
|
1801
1906
|
const oscillator = context.createOscillator();
|
|
1802
|
-
if (
|
|
1803
|
-
oscillator.type =
|
|
1804
|
-
assign(oscillator.frequency,
|
|
1805
|
-
rampTo(oscillator.frequency,
|
|
1907
|
+
if (layer2.source.kind === "osc") {
|
|
1908
|
+
oscillator.type = layer2.source.wave;
|
|
1909
|
+
assign(oscillator.frequency, layer2.source.frequency, time);
|
|
1910
|
+
rampTo(oscillator.frequency, layer2.source.frequency, time);
|
|
1806
1911
|
}
|
|
1807
|
-
const depths =
|
|
1912
|
+
const depths = layer2.modulators.map((modulator) => {
|
|
1808
1913
|
const lfo = context.createOscillator();
|
|
1809
1914
|
if (modulator.wave) lfo.type = modulator.wave;
|
|
1810
1915
|
lfo.frequency.value = modulator.rate;
|
|
@@ -1815,19 +1920,19 @@ var GameAudio = (() => {
|
|
|
1815
1920
|
});
|
|
1816
1921
|
const lfos = depths.map(({ lfo }) => lfo);
|
|
1817
1922
|
const envelope2 = context.createGain();
|
|
1818
|
-
applyEnvelope(envelope2.gain,
|
|
1923
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1819
1924
|
for (const { depth, target: modulated } of depths) if (modulated === "gain") depth.connect(envelope2.gain);
|
|
1820
|
-
const filters = (
|
|
1925
|
+
const filters = (layer2.filters?.bank ?? []).map((filter) => filterNode(context, filter, time));
|
|
1821
1926
|
let tail = oscillator;
|
|
1822
1927
|
for (const filter of filters) tail = tail.connect(filter);
|
|
1823
1928
|
tail.connect(envelope2);
|
|
1824
1929
|
envelope2.connect(target.output);
|
|
1825
|
-
if (
|
|
1826
|
-
const send = gainNode(context,
|
|
1930
|
+
if (layer2.wet && target.wet) {
|
|
1931
|
+
const send = gainNode(context, layer2.wet);
|
|
1827
1932
|
envelope2.connect(send);
|
|
1828
1933
|
send.connect(target.wet);
|
|
1829
1934
|
}
|
|
1830
|
-
const stop = end2(
|
|
1935
|
+
const stop = end2(layer2, time);
|
|
1831
1936
|
oscillator.start(time);
|
|
1832
1937
|
for (const lfo of lfos) lfo.start(time);
|
|
1833
1938
|
oscillator.stop(stop);
|
|
@@ -1836,38 +1941,38 @@ var GameAudio = (() => {
|
|
|
1836
1941
|
}
|
|
1837
1942
|
|
|
1838
1943
|
// src/webaudio/realize-weapon.ts
|
|
1839
|
-
function noiseLayer(
|
|
1944
|
+
function noiseLayer(layer2, target, time) {
|
|
1840
1945
|
const { context } = target;
|
|
1841
|
-
const source = noiseSource(target,
|
|
1842
|
-
const filters = (
|
|
1946
|
+
const source = noiseSource(target, layer2.source.kind === "noise" && layer2.source.loop);
|
|
1947
|
+
const filters = (layer2.filters?.bank ?? []).map((filter) => filterNode(context, filter, time));
|
|
1843
1948
|
const envelope2 = context.createGain();
|
|
1844
|
-
applyEnvelope(envelope2.gain,
|
|
1949
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1845
1950
|
let tail = source;
|
|
1846
1951
|
for (const filter of filters) tail = tail.connect(filter);
|
|
1847
1952
|
tail.connect(envelope2).connect(target.output);
|
|
1848
|
-
source.start(time,
|
|
1849
|
-
source.stop(time +
|
|
1953
|
+
source.start(time, layer2.source.kind === "noise" ? layer2.source.offset : 0);
|
|
1954
|
+
source.stop(time + layer2.duration + layer2.tail);
|
|
1850
1955
|
return source;
|
|
1851
1956
|
}
|
|
1852
|
-
function toneLayer(
|
|
1957
|
+
function toneLayer(layer2, target, time) {
|
|
1853
1958
|
const { context } = target;
|
|
1854
1959
|
const oscillator = context.createOscillator();
|
|
1855
|
-
if (
|
|
1856
|
-
oscillator.type =
|
|
1857
|
-
assign(oscillator.frequency,
|
|
1858
|
-
rampTo(oscillator.frequency,
|
|
1960
|
+
if (layer2.source.kind === "osc") {
|
|
1961
|
+
oscillator.type = layer2.source.wave;
|
|
1962
|
+
assign(oscillator.frequency, layer2.source.frequency, time);
|
|
1963
|
+
rampTo(oscillator.frequency, layer2.source.frequency, time);
|
|
1859
1964
|
}
|
|
1860
1965
|
const envelope2 = context.createGain();
|
|
1861
|
-
applyEnvelope(envelope2.gain,
|
|
1966
|
+
applyEnvelope(envelope2.gain, layer2.envelope, time);
|
|
1862
1967
|
oscillator.connect(envelope2).connect(target.output);
|
|
1863
1968
|
oscillator.start(time);
|
|
1864
|
-
oscillator.stop(time +
|
|
1969
|
+
oscillator.stop(time + layer2.duration + layer2.tail);
|
|
1865
1970
|
return oscillator;
|
|
1866
1971
|
}
|
|
1867
1972
|
function realizeWeapon(plan, target) {
|
|
1868
|
-
const sources = plan.layers.map((
|
|
1869
|
-
const time = target.time +
|
|
1870
|
-
return
|
|
1973
|
+
const sources = plan.layers.map((layer2) => {
|
|
1974
|
+
const time = target.time + layer2.at;
|
|
1975
|
+
return layer2.source.kind === "noise" ? noiseLayer(layer2, target, time) : toneLayer(layer2, target, time);
|
|
1871
1976
|
});
|
|
1872
1977
|
return voiceOf(sources);
|
|
1873
1978
|
}
|
|
@@ -1919,19 +2024,19 @@ var GameAudio = (() => {
|
|
|
1919
2024
|
rate: modulator.rate * rate,
|
|
1920
2025
|
...modulator.target === "frequency" ? { depth: modulator.depth * rate } : {}
|
|
1921
2026
|
});
|
|
1922
|
-
var tuneLayer = (
|
|
1923
|
-
...
|
|
1924
|
-
at:
|
|
1925
|
-
duration:
|
|
1926
|
-
tail:
|
|
1927
|
-
source: tuneSource(
|
|
1928
|
-
...
|
|
1929
|
-
modulators:
|
|
1930
|
-
envelope:
|
|
2027
|
+
var tuneLayer = (layer2, rate) => ({
|
|
2028
|
+
...layer2,
|
|
2029
|
+
at: layer2.at / rate,
|
|
2030
|
+
duration: layer2.duration / rate,
|
|
2031
|
+
tail: layer2.tail / rate,
|
|
2032
|
+
source: tuneSource(layer2.source, rate),
|
|
2033
|
+
...layer2.filters ? { filters: { ...layer2.filters, bank: layer2.filters.bank.map((filter) => tuneFilter(filter, rate)) } } : {},
|
|
2034
|
+
modulators: layer2.modulators.map((modulator) => tuneModulator(modulator, rate)),
|
|
2035
|
+
envelope: layer2.envelope.map((point) => ({ ...point, time: point.time / rate }))
|
|
1931
2036
|
});
|
|
1932
2037
|
function retunePlan(plan, rate) {
|
|
1933
2038
|
if (rate === 1 || !(rate > 0)) return plan;
|
|
1934
|
-
return { ...plan, length: plan.length / rate, layers: plan.layers.map((
|
|
2039
|
+
return { ...plan, length: plan.length / rate, layers: plan.layers.map((layer2) => tuneLayer(layer2, rate)) };
|
|
1935
2040
|
}
|
|
1936
2041
|
function createSetPicker() {
|
|
1937
2042
|
const last = /* @__PURE__ */ new Map();
|
|
@@ -2034,6 +2139,7 @@ var GameAudio = (() => {
|
|
|
2034
2139
|
}
|
|
2035
2140
|
|
|
2036
2141
|
// src/webaudio/realize-sample.ts
|
|
2142
|
+
var TRIM_FADE = 0.04;
|
|
2037
2143
|
function realizeSample(plan, target) {
|
|
2038
2144
|
const context = target.context;
|
|
2039
2145
|
let head = target.output;
|
|
@@ -2055,16 +2161,26 @@ var GameAudio = (() => {
|
|
|
2055
2161
|
voice2.connect(head);
|
|
2056
2162
|
head = voice2;
|
|
2057
2163
|
const sources = [];
|
|
2058
|
-
for (const
|
|
2059
|
-
const buffer = target.buffer(
|
|
2164
|
+
for (const layer2 of plan.layers) {
|
|
2165
|
+
const buffer = target.buffer(layer2.url);
|
|
2060
2166
|
if (!buffer) continue;
|
|
2061
2167
|
const source = context.createBufferSource();
|
|
2062
2168
|
source.buffer = buffer;
|
|
2063
|
-
source.playbackRate.value =
|
|
2064
|
-
const gain = gainNode(context,
|
|
2169
|
+
source.playbackRate.value = layer2.rate;
|
|
2170
|
+
const gain = gainNode(context, layer2.gain);
|
|
2065
2171
|
source.connect(gain);
|
|
2066
2172
|
gain.connect(head);
|
|
2067
|
-
|
|
2173
|
+
const at = target.time + layer2.at;
|
|
2174
|
+
const offset = Math.max(0, Math.min(layer2.offset ?? 0, buffer.duration));
|
|
2175
|
+
if (layer2.duration === void 0) source.start(at, offset);
|
|
2176
|
+
else {
|
|
2177
|
+
const duration = Math.max(0, Math.min(layer2.duration, buffer.duration - offset));
|
|
2178
|
+
const end3 = at + duration / layer2.rate;
|
|
2179
|
+
const fade = Math.min(TRIM_FADE, (end3 - at) / 4);
|
|
2180
|
+
gain.gain.setValueAtTime(layer2.gain, end3 - fade);
|
|
2181
|
+
gain.gain.linearRampToValueAtTime(0, end3);
|
|
2182
|
+
source.start(at, offset, duration);
|
|
2183
|
+
}
|
|
2068
2184
|
sources.push(source);
|
|
2069
2185
|
}
|
|
2070
2186
|
const realized = voiceOf(sources);
|
|
@@ -2084,7 +2200,11 @@ var GameAudio = (() => {
|
|
|
2084
2200
|
}
|
|
2085
2201
|
function sampleLength(plan, seconds) {
|
|
2086
2202
|
let length = 0;
|
|
2087
|
-
for (const
|
|
2203
|
+
for (const layer2 of plan.layers) {
|
|
2204
|
+
const file = seconds(layer2.url) ?? 0;
|
|
2205
|
+
const played = layer2.duration === void 0 ? file - (layer2.offset ?? 0) : Math.min(layer2.duration, file - (layer2.offset ?? 0));
|
|
2206
|
+
length = Math.max(length, layer2.at + Math.max(0, played) / layer2.rate);
|
|
2207
|
+
}
|
|
2088
2208
|
return length;
|
|
2089
2209
|
}
|
|
2090
2210
|
|
|
@@ -2100,8 +2220,8 @@ var GameAudio = (() => {
|
|
|
2100
2220
|
}
|
|
2101
2221
|
return curve;
|
|
2102
2222
|
}
|
|
2103
|
-
var usesNoise = (recipe2) => recipe2.layers.some((
|
|
2104
|
-
var planUsesNoise = (plan) => plan.layers.some((
|
|
2223
|
+
var usesNoise = (recipe2) => recipe2.layers.some((layer2) => layer2.source.kind !== "osc");
|
|
2224
|
+
var planUsesNoise = (plan) => plan.layers.some((layer2) => layer2.source.kind !== "osc");
|
|
2105
2225
|
function createAudioEngine(options = {}) {
|
|
2106
2226
|
const seed = options.seed ?? 1;
|
|
2107
2227
|
const registry = createSoundRegistry(options.banks);
|
|
@@ -2340,7 +2460,7 @@ var GameAudio = (() => {
|
|
|
2340
2460
|
level: plan.level,
|
|
2341
2461
|
distance: plan.distance,
|
|
2342
2462
|
...plan.pan === void 0 ? {} : { pan: plan.pan },
|
|
2343
|
-
layers: plan.layers.map((
|
|
2463
|
+
layers: plan.layers.map((layer2) => ({ role: layer2.role, url: layer2.url, take: layer2.take, rate: layer2.rate })),
|
|
2344
2464
|
...plan.tier ? { tier: plan.tier } : {}
|
|
2345
2465
|
});
|
|
2346
2466
|
voices.setLength(voiceId, sampleLength(plan, (url2) => sampleStore.seconds(url2)) + (playOptions.delay ?? 0));
|
|
@@ -2473,7 +2593,9 @@ var GameAudio = (() => {
|
|
|
2473
2593
|
random: engineRandom,
|
|
2474
2594
|
register: loopHost.register,
|
|
2475
2595
|
unregister: loopHost.unregister,
|
|
2476
|
-
muted: (bus) => busSettings.get(bus)?.muted === true
|
|
2596
|
+
muted: (bus) => busSettings.get(bus)?.muted === true,
|
|
2597
|
+
listener: () => listener,
|
|
2598
|
+
...options.distance ? { distance: options.distance } : {}
|
|
2477
2599
|
},
|
|
2478
2600
|
loopOptions.volume
|
|
2479
2601
|
);
|
|
@@ -2787,12 +2909,12 @@ var GameAudio = (() => {
|
|
|
2787
2909
|
brightness.push(onset < 0 ? 0 : centroidHz(result.channels, result.sampleRate, onset));
|
|
2788
2910
|
}
|
|
2789
2911
|
const far = planSample(sound, { random: createRng(1), distance: CRITERIA_TARGETS.distances.at(-1) });
|
|
2790
|
-
const switched = (far?.farMix ?? 0) === 1 && (far?.layers.some((
|
|
2912
|
+
const switched = (far?.farMix ?? 0) === 1 && (far?.layers.some((layer2) => layer2.role === "far") ?? false);
|
|
2791
2913
|
const pass = decreasing(levels) && decreasing(brightness) && switched;
|
|
2792
2914
|
return {
|
|
2793
2915
|
id: "C3",
|
|
2794
2916
|
pass,
|
|
2795
|
-
value: `${levels.map((level) => db(level)).join(" \u203A ")}; ${brightness.map((
|
|
2917
|
+
value: `${levels.map((level) => db(level)).join(" \u203A ")}; ${brightness.map((hz2) => `${Math.round(hz2)} Hz`).join(" \u203A ")}${switched ? "; longe = far" : "; sem camada far"}`,
|
|
2796
2918
|
target: "cai e escurece com a dist\xE2ncia; troca para a vers\xE3o de longe depois de ~50 m",
|
|
2797
2919
|
data: { distances: CRITERIA_TARGETS.distances, levels, brightness, switched }
|
|
2798
2920
|
};
|
|
@@ -2827,11 +2949,11 @@ var GameAudio = (() => {
|
|
|
2827
2949
|
for (let index = 0; index < CRITERIA_TARGETS.plays; index++) if (engine.play(options.sound, { distance: 1, delay: 0.1 + index * 0.3 })) played++;
|
|
2828
2950
|
return played;
|
|
2829
2951
|
});
|
|
2830
|
-
const close = result.events.map((event) => event.layers?.find((
|
|
2831
|
-
const takes2 = close.map((
|
|
2952
|
+
const close = result.events.map((event) => event.layers?.find((layer2) => layer2.role === "close"));
|
|
2953
|
+
const takes2 = close.map((layer2) => layer2?.url ?? "");
|
|
2832
2954
|
const repeats = takes2.filter((take, index) => index > 0 && take === takes2[index - 1]).length;
|
|
2833
2955
|
const distinct = new Set(takes2).size;
|
|
2834
|
-
const rates = close.map((
|
|
2956
|
+
const rates = close.map((layer2) => layer2?.rate ?? 1);
|
|
2835
2957
|
const spread = (Math.max(...rates) - Math.min(...rates)) / 2;
|
|
2836
2958
|
const pitch = sound.pitch ?? 0.04;
|
|
2837
2959
|
const pass = distinct >= CRITERIA_TARGETS.minTakes && repeats === 0 && pitch >= CRITERIA_TARGETS.pitch[0] && pitch <= CRITERIA_TARGETS.pitch[1] && spread > 0.01;
|
|
@@ -2869,7 +2991,7 @@ var GameAudio = (() => {
|
|
|
2869
2991
|
const result = await render(options, 1.2, (engine) => engine.play(options.sound, { distance: 1, seed: 1, intensity, delay: EVENT_AT }) ? 1 : 0);
|
|
2870
2992
|
const onset = onsetIndex(result.channels, 0, 1e-5);
|
|
2871
2993
|
const event = result.events[0];
|
|
2872
|
-
return { tier: event?.tier ?? "", rms: onset < 0 ? -Infinity : rmsDb(result.channels, onset, onset + result.sampleRate * 0.3), files: event?.layers?.find((
|
|
2994
|
+
return { tier: event?.tier ?? "", rms: onset < 0 ? -Infinity : rmsDb(result.channels, onset, onset + result.sampleRate * 0.3), files: event?.layers?.find((layer2) => layer2.role === "close")?.url ?? "" };
|
|
2873
2995
|
};
|
|
2874
2996
|
const light = await at(0.1);
|
|
2875
2997
|
const heavy = await at(0.9);
|
|
@@ -3026,7 +3148,22 @@ var GameAudio = (() => {
|
|
|
3026
3148
|
["smg_45_auto", 2, "sfx_pistol"],
|
|
3027
3149
|
["weapon_draw", 2],
|
|
3028
3150
|
["suppressor_attach", 3],
|
|
3029
|
-
["suppressor_detach", 3]
|
|
3151
|
+
["suppressor_detach", 3],
|
|
3152
|
+
["minigun_loop", 3],
|
|
3153
|
+
["smg_5_7x28", 3],
|
|
3154
|
+
["mg_belt_adjust", 3],
|
|
3155
|
+
["mg_belt_box_attach", 3],
|
|
3156
|
+
["mg_cover_open", 3],
|
|
3157
|
+
["mg_cover_close", 3],
|
|
3158
|
+
["weapon_holster", 3],
|
|
3159
|
+
["scope_zoom", 3]
|
|
3160
|
+
]),
|
|
3161
|
+
...entries("impactos", [
|
|
3162
|
+
["knife_hit_wall", 3],
|
|
3163
|
+
["helmet_hit", 3],
|
|
3164
|
+
["vest_hit", 3],
|
|
3165
|
+
["headshot", 3],
|
|
3166
|
+
["blood_squirt", 3]
|
|
3030
3167
|
]),
|
|
3031
3168
|
...entries("explosoes-fogo", [
|
|
3032
3169
|
["explosion_grenade", 1, "boom"],
|
|
@@ -3044,7 +3181,13 @@ var GameAudio = (() => {
|
|
|
3044
3181
|
["grenade_bounce", 1],
|
|
3045
3182
|
["c4_plant", 2],
|
|
3046
3183
|
["c4_beep", 2],
|
|
3047
|
-
["c4_disarm", 2]
|
|
3184
|
+
["c4_disarm", 2],
|
|
3185
|
+
["c4_disarming_loop", 3],
|
|
3186
|
+
["c4_remote_detonate", 3],
|
|
3187
|
+
["smoke_grenade_hiss", 3],
|
|
3188
|
+
["grenade_pin_pull", 3],
|
|
3189
|
+
["electric_shock", 3],
|
|
3190
|
+
["electric_spark", 3]
|
|
3048
3191
|
]),
|
|
3049
3192
|
...entries("personagem", [
|
|
3050
3193
|
["footstep_concrete_walk", 1, "sfx_step"],
|
|
@@ -3072,7 +3215,13 @@ var GameAudio = (() => {
|
|
|
3072
3215
|
["zombie_attack", 1],
|
|
3073
3216
|
["zombie_pain", 1],
|
|
3074
3217
|
["zombie_claw_hit", 1, "sfx_flesh"],
|
|
3075
|
-
["zombie_claw_miss", 2]
|
|
3218
|
+
["zombie_claw_miss", 2],
|
|
3219
|
+
["swing_whoosh", 3],
|
|
3220
|
+
["heartbeat_critical", 3],
|
|
3221
|
+
["fall_water", 3],
|
|
3222
|
+
["fall_damage", 3],
|
|
3223
|
+
["fall_scream", 3],
|
|
3224
|
+
["footstep_glass_walk", 3]
|
|
3076
3225
|
]),
|
|
3077
3226
|
...entries("veiculos", [
|
|
3078
3227
|
["engine_loop_car", 1],
|
|
@@ -3082,7 +3231,12 @@ var GameAudio = (() => {
|
|
|
3082
3231
|
["car_door_open", 1, "latch"],
|
|
3083
3232
|
["car_door_close", 1, "shut_metal"],
|
|
3084
3233
|
["horn_car", 2, "horn"],
|
|
3085
|
-
["tire_skid_asphalt", 2]
|
|
3234
|
+
["tire_skid_asphalt", 2],
|
|
3235
|
+
["jet_flyby", 3],
|
|
3236
|
+
["helicopter_turbine", 3],
|
|
3237
|
+
["tire_burnout", 3],
|
|
3238
|
+
["handbrake_turn", 3],
|
|
3239
|
+
["siren_police", 3]
|
|
3086
3240
|
]),
|
|
3087
3241
|
...entries("itens-portas", [
|
|
3088
3242
|
["item_pickup_metal", 1],
|
|
@@ -3093,7 +3247,27 @@ var GameAudio = (() => {
|
|
|
3093
3247
|
["door_creak", 1, "creak_wood"],
|
|
3094
3248
|
["door_locked_rattle", 1, "rattle"],
|
|
3095
3249
|
["drawer_open", 2, "slide"],
|
|
3096
|
-
["fridge_close", 2, "shut_metal"]
|
|
3250
|
+
["fridge_close", 2, "shut_metal"],
|
|
3251
|
+
["inventory_open", 3],
|
|
3252
|
+
["inventory_close", 3],
|
|
3253
|
+
["inventory_select", 3],
|
|
3254
|
+
["inventory_place", 3],
|
|
3255
|
+
["pickup_chime", 3],
|
|
3256
|
+
["item_pickup_coins", 3],
|
|
3257
|
+
["bandage_use", 3],
|
|
3258
|
+
["bandage_refuse", 3],
|
|
3259
|
+
["flashlight_toggle", 3],
|
|
3260
|
+
["gear_draw", 3],
|
|
3261
|
+
["gear_holster", 3],
|
|
3262
|
+
["button_press", 3],
|
|
3263
|
+
["lock_desk_open", 3],
|
|
3264
|
+
["elevator_move_loop", 3],
|
|
3265
|
+
["elevator_stop", 3],
|
|
3266
|
+
["door_sliding", 3],
|
|
3267
|
+
["door_kick", 3],
|
|
3268
|
+
["door_wood_break", 3],
|
|
3269
|
+
["gate_iron_open", 3],
|
|
3270
|
+
["gate_iron_close", 3]
|
|
3097
3271
|
]),
|
|
3098
3272
|
...entries("ambiente", [
|
|
3099
3273
|
["rain_loop", 2],
|
|
@@ -3101,7 +3275,16 @@ var GameAudio = (() => {
|
|
|
3101
3275
|
["thunder_near", 2],
|
|
3102
3276
|
["thunder_far", 2],
|
|
3103
3277
|
["water_splash", 2],
|
|
3104
|
-
["helicopter_loop", 3]
|
|
3278
|
+
["helicopter_loop", 3],
|
|
3279
|
+
["bird_flush", 3],
|
|
3280
|
+
["dog_growl", 3],
|
|
3281
|
+
["dog_whimper", 3],
|
|
3282
|
+
["dog_howl", 3],
|
|
3283
|
+
["zombie_dog_bark", 3],
|
|
3284
|
+
["zombie_dog_howl_far", 3],
|
|
3285
|
+
["insect_squash", 3],
|
|
3286
|
+
["insect_crawl", 3],
|
|
3287
|
+
["fan_loop", 3]
|
|
3105
3288
|
])
|
|
3106
3289
|
];
|
|
3107
3290
|
var SFX_MATERIALS = [
|
|
@@ -3151,9 +3334,9 @@ var GameAudio = (() => {
|
|
|
3151
3334
|
function parseSfxName(name) {
|
|
3152
3335
|
const match = /^(.*?)(?:_(close|far|tail_in|tail_out))?(?:_(\d+))?$/.exec(name);
|
|
3153
3336
|
const id = match?.[1] || name;
|
|
3154
|
-
const
|
|
3337
|
+
const layer2 = match?.[2] ?? "close";
|
|
3155
3338
|
const take = match?.[3] ? Number(match[3]) : 1;
|
|
3156
|
-
return { id, layer, take };
|
|
3339
|
+
return { id, layer: layer2, take };
|
|
3157
3340
|
}
|
|
3158
3341
|
function splitTier(id) {
|
|
3159
3342
|
const match = /^(.*)_(light|medium|heavy)$/.exec(id);
|
|
@@ -3229,7 +3412,16 @@ var GameAudio = (() => {
|
|
|
3229
3412
|
// a drawer stays on its recipe: the recorded runs (1 to 1.9 s) outlast a drawer's pull
|
|
3230
3413
|
// an item taken in the hand (game-destruction-three grab_* keys)
|
|
3231
3414
|
grab_hard: "item_pickup_generic",
|
|
3232
|
-
grab_soft: "item_pickup_leather"
|
|
3415
|
+
grab_soft: "item_pickup_leather",
|
|
3416
|
+
// the hand foley of the test room (game-audio FOLEY_BANK) whose id is not a file id: a wooden leaf shut and slammed, an item picked up by material.
|
|
3417
|
+
// The metal door stays on its recipe (two of its takes run 10 s), and so do the fridge, the microwave and paper (no file for them).
|
|
3418
|
+
door_wood_close: "door_wood_shut",
|
|
3419
|
+
door_wood_slam: "door_slam_wood",
|
|
3420
|
+
item_pickup_metal: "item_pickup_generic",
|
|
3421
|
+
item_pickup_plastic: "item_pickup_generic",
|
|
3422
|
+
item_pickup_glass: "item_pickup_generic",
|
|
3423
|
+
item_pickup_wood: "item_pickup_generic",
|
|
3424
|
+
item_pickup_fabric: "item_pickup_leather"
|
|
3233
3425
|
};
|
|
3234
3426
|
function kitSampleDefaults(sound) {
|
|
3235
3427
|
const bus = VOICE_IDS.test(sound.id) ? "voices" : KIT_CATEGORY_BUS[sound.category];
|
|
@@ -3333,6 +3525,145 @@ var GameAudio = (() => {
|
|
|
3333
3525
|
return result;
|
|
3334
3526
|
}
|
|
3335
3527
|
|
|
3528
|
+
// src/local-pack.ts
|
|
3529
|
+
var LOCAL_PACK_LICENSES = ["CC0", "CC-BY", "unknown", "proprietary"];
|
|
3530
|
+
var LOCAL_PACK_PREFERENCES = ["pack", "sdk"];
|
|
3531
|
+
var LocalSoundPackError = class extends Error {
|
|
3532
|
+
constructor(problems) {
|
|
3533
|
+
super(`invalid local sound pack: ${problems.join("; ")}`);
|
|
3534
|
+
__publicField(this, "problems");
|
|
3535
|
+
this.name = "LocalSoundPackError";
|
|
3536
|
+
this.problems = problems;
|
|
3537
|
+
}
|
|
3538
|
+
};
|
|
3539
|
+
var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3540
|
+
var isLicense = (value) => LOCAL_PACK_LICENSES.includes(value);
|
|
3541
|
+
var isBus = (value) => BUS_IDS.includes(value);
|
|
3542
|
+
function entryProblems(id, entry) {
|
|
3543
|
+
if (!isRecord(entry)) return [`${id}: not an object`];
|
|
3544
|
+
const problems = [];
|
|
3545
|
+
const files = entry.files;
|
|
3546
|
+
if (!Array.isArray(files) || files.length === 0 || !files.every((file) => typeof file === "string" && file.length > 0)) problems.push(`${id}: files must be a non-empty list of paths`);
|
|
3547
|
+
if (!isLicense(entry.license)) problems.push(`${id}: license must be one of ${LOCAL_PACK_LICENSES.join(", ")}`);
|
|
3548
|
+
if (entry.prefer !== void 0 && !LOCAL_PACK_PREFERENCES.includes(entry.prefer)) problems.push(`${id}: prefer must be pack or sdk`);
|
|
3549
|
+
if (entry.bus !== void 0 && !isBus(entry.bus)) problems.push(`${id}: unknown bus ${String(entry.bus)}`);
|
|
3550
|
+
if (entry.gain !== void 0 && (typeof entry.gain !== "number" || entry.gain < 0)) problems.push(`${id}: gain must be a number \u2265 0`);
|
|
3551
|
+
if (entry.score !== void 0 && (typeof entry.score !== "number" || entry.score < 0 || entry.score > 10)) problems.push(`${id}: score must be 0\u201310`);
|
|
3552
|
+
return problems;
|
|
3553
|
+
}
|
|
3554
|
+
function parseLocalSoundPack(value) {
|
|
3555
|
+
if (!isRecord(value)) throw new LocalSoundPackError(["the pack is not an object"]);
|
|
3556
|
+
const problems = [];
|
|
3557
|
+
if (value.version !== 1) problems.push("version must be 1");
|
|
3558
|
+
if (value.baseUrl !== void 0 && typeof value.baseUrl !== "string") problems.push("baseUrl must be a string");
|
|
3559
|
+
if (!isRecord(value.sounds)) problems.push("sounds must be an object of id \u2192 entry");
|
|
3560
|
+
else for (const [id, entry] of Object.entries(value.sounds)) problems.push(...entryProblems(id, entry));
|
|
3561
|
+
if (problems.length > 0) throw new LocalSoundPackError(problems);
|
|
3562
|
+
return value;
|
|
3563
|
+
}
|
|
3564
|
+
var isShippableLicense = (license) => SDK_LICENSES.includes(license);
|
|
3565
|
+
var CATALOG = new Map([...SFX_CATALOG, ...SFX_IMPACTS].map((entry) => [entry.id, entry]));
|
|
3566
|
+
var busOf = (id, entry) => {
|
|
3567
|
+
if (entry.bus) return entry.bus;
|
|
3568
|
+
const category = CATALOG.get(id)?.category ?? "";
|
|
3569
|
+
return kitSampleDefaults({ id, category })?.bus ?? "world";
|
|
3570
|
+
};
|
|
3571
|
+
function localPackSamples(pack, options = {}) {
|
|
3572
|
+
const baseUrl = options.baseUrl ?? pack.baseUrl ?? "";
|
|
3573
|
+
return Object.entries(pack.sounds).map(([id, entry]) => {
|
|
3574
|
+
const current = CATALOG.get(id)?.current;
|
|
3575
|
+
const isLoop = /_loop(_|$)/.test(id);
|
|
3576
|
+
return {
|
|
3577
|
+
id,
|
|
3578
|
+
bus: busOf(id, entry),
|
|
3579
|
+
close: entry.files.map((file) => ({ url: `${baseUrl}${file}` })),
|
|
3580
|
+
pitch: isLoop ? 0 : 0.04,
|
|
3581
|
+
...isLoop ? { loop: true } : {},
|
|
3582
|
+
...entry.gain === void 0 ? {} : { gain: entry.gain },
|
|
3583
|
+
...current ? { fallback: current } : {},
|
|
3584
|
+
license: entry.license,
|
|
3585
|
+
sources: entry.files.map((file) => `local: ${file} ${entry.license}`)
|
|
3586
|
+
};
|
|
3587
|
+
});
|
|
3588
|
+
}
|
|
3589
|
+
|
|
3590
|
+
// src/local-pack-loader.ts
|
|
3591
|
+
var LOCAL_PACK_BANK_ID = "local_sound_pack";
|
|
3592
|
+
var STAGING_PREFIX = "local_pack_staging:";
|
|
3593
|
+
var defaultIdleScheduler = (task) => {
|
|
3594
|
+
const idle = globalThis;
|
|
3595
|
+
if (idle.requestIdleCallback && idle.cancelIdleCallback) {
|
|
3596
|
+
const handle2 = idle.requestIdleCallback(task);
|
|
3597
|
+
const cancel = idle.cancelIdleCallback;
|
|
3598
|
+
return () => cancel(handle2);
|
|
3599
|
+
}
|
|
3600
|
+
const handle = setTimeout(task, 0);
|
|
3601
|
+
return () => clearTimeout(handle);
|
|
3602
|
+
};
|
|
3603
|
+
function applyLocalSoundPack(engine, pack, options = {}) {
|
|
3604
|
+
const schedule = options.schedule ?? defaultIdleScheduler;
|
|
3605
|
+
const samples = localPackSamples(pack, options);
|
|
3606
|
+
const statuses = new Map(samples.map((sample) => [sample.id, "pending"]));
|
|
3607
|
+
const priors = /* @__PURE__ */ new Map();
|
|
3608
|
+
const report = { file: [], sdk: [], fallback: [] };
|
|
3609
|
+
const queue = [...samples];
|
|
3610
|
+
let cancel;
|
|
3611
|
+
let disposed = false;
|
|
3612
|
+
let finish = () => void 0;
|
|
3613
|
+
const done = new Promise((resolve) => {
|
|
3614
|
+
finish = resolve;
|
|
3615
|
+
});
|
|
3616
|
+
const swapIn = (sample) => {
|
|
3617
|
+
const prior = engine.registry.sample(sample.id);
|
|
3618
|
+
const bank = engine.registry.bankOf(sample.id);
|
|
3619
|
+
priors.set(sample.id, { ...prior ? { sample: prior } : {}, ...bank ? { bank } : {} });
|
|
3620
|
+
engine.register({ id: LOCAL_PACK_BANK_ID, samples: [{ ...sample, ...prior?.fallback ? { fallback: prior.fallback } : {} }] });
|
|
3621
|
+
statuses.set(sample.id, "file");
|
|
3622
|
+
report.file.push(sample.id);
|
|
3623
|
+
};
|
|
3624
|
+
const loadOne = async (sample) => {
|
|
3625
|
+
if (pack.sounds[sample.id]?.prefer === "sdk" && engine.registry.sample(sample.id)) {
|
|
3626
|
+
statuses.set(sample.id, "sdk");
|
|
3627
|
+
report.sdk.push(sample.id);
|
|
3628
|
+
return;
|
|
3629
|
+
}
|
|
3630
|
+
const staging = `${STAGING_PREFIX}${sample.id}`;
|
|
3631
|
+
engine.register({ id: LOCAL_PACK_BANK_ID, samples: [{ ...sample, id: staging }] });
|
|
3632
|
+
const loaded = await engine.loadSamples([staging]);
|
|
3633
|
+
engine.registry.removeSample(staging);
|
|
3634
|
+
if (disposed) return;
|
|
3635
|
+
if (loaded.failed.length === 0) return swapIn(sample);
|
|
3636
|
+
statuses.set(sample.id, "fallback");
|
|
3637
|
+
report.fallback.push({ id: sample.id, error: loaded.failed.map((entry) => `${entry.url}: ${entry.error}`).join("; ") });
|
|
3638
|
+
};
|
|
3639
|
+
const next = () => {
|
|
3640
|
+
const sample = queue.shift();
|
|
3641
|
+
if (!sample || disposed) {
|
|
3642
|
+
if (!disposed) finish(report);
|
|
3643
|
+
return;
|
|
3644
|
+
}
|
|
3645
|
+
void loadOne(sample).finally(() => {
|
|
3646
|
+
if (!disposed) cancel = schedule(next);
|
|
3647
|
+
});
|
|
3648
|
+
};
|
|
3649
|
+
cancel = schedule(next);
|
|
3650
|
+
return {
|
|
3651
|
+
done,
|
|
3652
|
+
status: (id) => statuses.get(id),
|
|
3653
|
+
unlicensed: () => samples.filter((sample) => statuses.get(sample.id) === "file" && !isShippableLicense(sample.license)).map((sample) => sample.id),
|
|
3654
|
+
dispose() {
|
|
3655
|
+
disposed = true;
|
|
3656
|
+
cancel?.();
|
|
3657
|
+
for (const [id, prior] of priors) {
|
|
3658
|
+
if (prior.sample) engine.register({ id: prior.bank ?? LOCAL_PACK_BANK_ID, samples: [prior.sample] });
|
|
3659
|
+
else engine.registry.removeSample(id);
|
|
3660
|
+
}
|
|
3661
|
+
priors.clear();
|
|
3662
|
+
finish(report);
|
|
3663
|
+
}
|
|
3664
|
+
};
|
|
3665
|
+
}
|
|
3666
|
+
|
|
3336
3667
|
// src/data/game-sfx.json
|
|
3337
3668
|
var game_sfx_default = {
|
|
3338
3669
|
sources: ["jogo:L62089-62107"],
|
|
@@ -3632,10 +3963,80 @@ var GameAudio = (() => {
|
|
|
3632
3963
|
duration: 0.5,
|
|
3633
3964
|
layers: [{ source: { kind: "osc", wave: "sine", frequency: { set: 880 } }, repeat: { count: 3, spacing: 0.7 }, envelope: [[0, 0.06, "set"], [0.5, 1e-4, "exp", "fixed"]] }],
|
|
3634
3965
|
falloff: { model: "none" }
|
|
3966
|
+
},
|
|
3967
|
+
{
|
|
3968
|
+
// the parking sensor: a short high beep, repeated by the cabin faster as the obstacle comes close
|
|
3969
|
+
id: "parking_beep",
|
|
3970
|
+
bus: "world",
|
|
3971
|
+
duration: 0.09,
|
|
3972
|
+
layers: [{ source: { kind: "osc", wave: "sine", frequency: { set: 2300 } }, envelope: [[0, 0.07, "set"], [0.08, 1e-4, "exp", "fixed"]] }],
|
|
3973
|
+
falloff: { model: "none" }
|
|
3635
3974
|
}
|
|
3636
3975
|
];
|
|
3637
3976
|
var CABIN_BANK = { id: "vehicle_cabin", sounds: CABIN_SOUNDS, loops: [] };
|
|
3638
3977
|
|
|
3978
|
+
// src/library/radio.ts
|
|
3979
|
+
var hz = (midi) => 440 * 2 ** ((midi - 69) / 12);
|
|
3980
|
+
var layer = (note, beat, wave, level) => {
|
|
3981
|
+
const [at, midi, beats] = note;
|
|
3982
|
+
const length = beats * beat;
|
|
3983
|
+
return {
|
|
3984
|
+
at: at * beat,
|
|
3985
|
+
duration: length,
|
|
3986
|
+
source: { kind: "osc", wave, frequency: { set: hz(midi) } },
|
|
3987
|
+
envelope: [[0, 1e-4, "set"], [0.01, level, "linear"], [Math.max(0.02, length * 0.9), level * 0.35, "linear"], [length, 1e-4, "exp", "fixed"]]
|
|
3988
|
+
};
|
|
3989
|
+
};
|
|
3990
|
+
function radioTrack(spec) {
|
|
3991
|
+
const beat = 60 / spec.bpm;
|
|
3992
|
+
const recipes = Array.from({ length: spec.bars }, (_, bar) => {
|
|
3993
|
+
const inBar = (notes) => notes.filter((n) => n[0] >= bar * 4 && n[0] < bar * 4 + 4).map((n) => [n[0] - bar * 4, n[1], n[2]]);
|
|
3994
|
+
const layers = [
|
|
3995
|
+
...inBar(spec.bass).map((n) => layer(n, beat, "triangle", 0.16)),
|
|
3996
|
+
...inBar(spec.chords).map((n) => layer(n, beat, "sine", 0.05)),
|
|
3997
|
+
...inBar(spec.melody).map((n) => layer(n, beat, spec.wave, 0.07))
|
|
3998
|
+
];
|
|
3999
|
+
return { id: `${spec.id}_${bar}`, bus: "world", duration: 4 * beat, layers, falloff: { model: "none" } };
|
|
4000
|
+
});
|
|
4001
|
+
return { song: { id: spec.id, barSeconds: 4 * beat, bars: recipes.map((r) => r.id) }, recipes };
|
|
4002
|
+
}
|
|
4003
|
+
var chord = (bar, root, minor = false) => [[bar * 4, root, 4], [bar * 4, root + (minor ? 3 : 4), 4], [bar * 4, root + 7, 4]];
|
|
4004
|
+
var bassLine = (roots, pattern) => roots.flatMap((root, bar) => pattern.map((b) => [bar * 4 + b, root - 12, 0.9]));
|
|
4005
|
+
var TRACKS = [
|
|
4006
|
+
// a bright pop loop: I–V–vi–IV in C
|
|
4007
|
+
radioTrack({
|
|
4008
|
+
id: "radio_track_pop",
|
|
4009
|
+
bpm: 112,
|
|
4010
|
+
bars: 4,
|
|
4011
|
+
wave: "square",
|
|
4012
|
+
bass: bassLine([48, 55, 57, 53], [0, 1.5, 2, 3]),
|
|
4013
|
+
chords: [...chord(0, 60), ...chord(1, 55), ...chord(2, 57, true), ...chord(3, 53)],
|
|
4014
|
+
melody: [[0, 76, 1], [1, 74, 0.5], [1.5, 72, 1.5], [4, 74, 1], [5, 76, 1], [6, 79, 2], [8, 76, 1], [9, 74, 1], [10, 72, 2], [12, 72, 1], [13, 74, 1], [14, 72, 2]]
|
|
4015
|
+
}),
|
|
4016
|
+
// a syncopated loop in A minor, the bass on the off-beats
|
|
4017
|
+
radioTrack({
|
|
4018
|
+
id: "radio_track_groove",
|
|
4019
|
+
bpm: 100,
|
|
4020
|
+
bars: 4,
|
|
4021
|
+
wave: "triangle",
|
|
4022
|
+
bass: bassLine([57, 62, 64, 57], [0, 0.75, 1.5, 2.5, 3.25]),
|
|
4023
|
+
chords: [...chord(0, 57, true), ...chord(1, 62, true), ...chord(2, 64), ...chord(3, 57, true)],
|
|
4024
|
+
melody: [[0.5, 72, 0.5], [1.25, 76, 0.75], [2.5, 74, 1], [4.5, 77, 0.5], [5.25, 74, 0.75], [6.5, 72, 1.5], [8.5, 71, 0.5], [9.25, 74, 0.75], [10.5, 76, 1.5], [12.5, 72, 0.5], [13.25, 69, 2]]
|
|
4025
|
+
}),
|
|
4026
|
+
// a slow blues-like loop in F with a swung melody
|
|
4027
|
+
radioTrack({
|
|
4028
|
+
id: "radio_track_slow",
|
|
4029
|
+
bpm: 76,
|
|
4030
|
+
bars: 4,
|
|
4031
|
+
wave: "sine",
|
|
4032
|
+
bass: bassLine([53, 58, 53, 60], [0, 2]),
|
|
4033
|
+
chords: [...chord(0, 65), ...chord(1, 58), ...chord(2, 65), ...chord(3, 60)],
|
|
4034
|
+
melody: [[0, 72, 1.5], [1.67, 75, 0.33], [2, 77, 2], [4, 74, 1], [5, 72, 1], [6, 70, 2], [8, 72, 1.5], [9.67, 69, 0.33], [10, 65, 2], [12, 67, 1], [13, 70, 1], [14, 72, 2]]
|
|
4035
|
+
})
|
|
4036
|
+
];
|
|
4037
|
+
var RADIO_TRACKS = TRACKS.map((t) => t.song);
|
|
4038
|
+
var RADIO_BANK = { id: "vehicle_radio", sounds: TRACKS.flatMap((t) => t.recipes), loops: [] };
|
|
4039
|
+
|
|
3639
4040
|
// src/recipes/foley.ts
|
|
3640
4041
|
var FOLEY_FALLOFF = {
|
|
3641
4042
|
model: "inverse_square",
|
|
@@ -4277,11 +4678,11 @@ var GameAudio = (() => {
|
|
|
4277
4678
|
...s.splash ? [sceneNoise({ type: "bandpass", f: s.splash.f * take.f, f2: s.splash.f2 * take.f, q: 1.4, d: s.splash.d * take.t * weight ** 0.4, vol: s.splash.vol * gait.vol * take.v * weight ** 0.5 })] : []
|
|
4278
4679
|
];
|
|
4279
4680
|
}
|
|
4280
|
-
var quieter = (level, layers) => layers.map((
|
|
4281
|
-
const gain =
|
|
4282
|
-
if (typeof gain === "number") return { ...
|
|
4283
|
-
if (Array.isArray(gain)) return { ...
|
|
4284
|
-
return
|
|
4681
|
+
var quieter = (level, layers) => layers.map((layer2) => {
|
|
4682
|
+
const gain = layer2.gain ?? 1;
|
|
4683
|
+
if (typeof gain === "number") return { ...layer2, gain: gain * level };
|
|
4684
|
+
if (Array.isArray(gain)) return { ...layer2, gain: [gain[0] * level, gain[1] * level] };
|
|
4685
|
+
return layer2;
|
|
4285
4686
|
});
|
|
4286
4687
|
var recipe = (id, layers, falloff, bus = "world") => ({ id, bus, pan: true, layers, falloff, sources: ["sdk"] });
|
|
4287
4688
|
var takeId = (id, index) => `${id}_${String(index + 1).padStart(2, "0")}`;
|
|
@@ -4297,7 +4698,7 @@ var GameAudio = (() => {
|
|
|
4297
4698
|
(take) => quieter(LANDING_LEVEL, [
|
|
4298
4699
|
// both feet, a hair apart, then the knees taking the weight (a low body thump) and the clothes settling
|
|
4299
4700
|
...footLayers(surface, take, GAITS.run, LANDINGS[landing2].weight),
|
|
4300
|
-
...footLayers(surface, { ...take, v: take.v * 0.6 }, GAITS.run, LANDINGS[landing2].weight * 0.6).map((
|
|
4701
|
+
...footLayers(surface, { ...take, v: take.v * 0.6 }, GAITS.run, LANDINGS[landing2].weight * 0.6).map((layer2) => ({ ...layer2, at: (typeof layer2.at === "number" ? layer2.at : 0) + 0.018 * take.t })),
|
|
4301
4702
|
sceneTone({ f: 60 * take.f, f2: 38, d: 0.14 * LANDINGS[landing2].weight * take.t, vol: 0.22 * LANDINGS[landing2].weight ** 0.7 * take.v, delay: 0.02 }),
|
|
4302
4703
|
sceneNoise({ type: "bandpass", f: [1800, 2600], q: 0.8, d: 0.18, vol: LANDINGS[landing2].cloth * take.v, delay: 0.04 })
|
|
4303
4704
|
]),
|
|
@@ -4343,7 +4744,7 @@ var GameAudio = (() => {
|
|
|
4343
4744
|
fall_damage: (take) => [
|
|
4344
4745
|
...BODY.body_fall(take),
|
|
4345
4746
|
sceneNoise({ type: "highpass", f: 2800, d: 0.02, vol: 0.35 * take.v, delay: 0.01 }),
|
|
4346
|
-
...voice({ f0: 170, f1: 110, d: 0.32, fA: 650, fB: 1150, noise: 0.25, vol: 0.32 })(take).map((
|
|
4747
|
+
...voice({ f0: 170, f1: 110, d: 0.32, fA: 650, fB: 1150, noise: 0.25, vol: 0.32 })(take).map((layer2) => ({ ...layer2, at: 0.08 }))
|
|
4347
4748
|
],
|
|
4348
4749
|
player_hurt: voice({ f0: 150, f1: 105, d: 0.26, fA: 620, fB: 1100, noise: 0.3, vol: 0.35 }),
|
|
4349
4750
|
player_breath_run: (take) => [
|
|
@@ -4705,11 +5106,11 @@ var GameAudio = (() => {
|
|
|
4705
5106
|
const planned = plan();
|
|
4706
5107
|
if (!planned) return `${text.sheet.title}: ${engine.registry.sound(state.sound) ? text.sheet.silent : text.sheet.none}`;
|
|
4707
5108
|
const head = `${text.sheet.title}: ${planned.id} (${planned.bus}) ${text.sheet.level} ${planned.level.toFixed(4)} ${text.sheet.distance} ${planned.distance.toFixed(1)} m${planned.pan === void 0 ? "" : ` ${text.sheet.pan} ${planned.pan.toFixed(3)}`} ${planned.length.toFixed(3)} ${text.sheet.length}`;
|
|
4708
|
-
const layers2 = planned.layers.map((
|
|
4709
|
-
const source =
|
|
4710
|
-
const filters = (
|
|
4711
|
-
const envelope2 =
|
|
4712
|
-
return ` ${text.sheet.layer} ${index + 1}: ${source} at ${
|
|
5109
|
+
const layers2 = planned.layers.map((layer2, index) => {
|
|
5110
|
+
const source = layer2.source.kind === "noise" ? `noise@${layer2.source.offset.toFixed(4)}` : layer2.source.kind === "osc" ? `${layer2.source.wave}@${layer2.source.frequency.value ?? layer2.source.frequency.from}` : layer2.source.kind;
|
|
5111
|
+
const filters = (layer2.filters?.bank ?? []).map((filter) => `${filter.type}@${(filter.frequency.value ?? filter.frequency.from ?? 0).toFixed(1)}`).join(" ");
|
|
5112
|
+
const envelope2 = layer2.envelope.map((point) => `${point.time.toFixed(3)}:${point.value.toPrecision(3)}`).join(" ");
|
|
5113
|
+
return ` ${text.sheet.layer} ${index + 1}: ${source} at ${layer2.at.toFixed(3)} for ${layer2.duration.toFixed(3)} ${filters} [${envelope2}]`;
|
|
4713
5114
|
});
|
|
4714
5115
|
return [head, ...layers2].join("\n");
|
|
4715
5116
|
};
|