@adatechnology/game-audio 0.8.0 → 0.9.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.
Files changed (1071) hide show
  1. package/README.md +31 -6
  2. package/assets/sfx/CREDITOS.md +2 -2
  3. package/assets/sfx/ambiente/ambience_city_day_01.ogg +0 -0
  4. package/assets/sfx/ambiente/ambience_city_day_02.ogg +0 -0
  5. package/assets/sfx/ambiente/ambience_construction_01.ogg +0 -0
  6. package/assets/sfx/ambiente/ambience_night_01.ogg +0 -0
  7. package/assets/sfx/ambiente/ambience_room_tone_01.ogg +0 -0
  8. package/assets/sfx/ambiente/ambience_room_tone_02.ogg +0 -0
  9. package/assets/sfx/ambiente/ambience_rural_day_01.ogg +0 -0
  10. package/assets/sfx/ambiente/ambience_rural_day_02.ogg +0 -0
  11. package/assets/sfx/ambiente/rain_loop_01.ogg +0 -0
  12. package/assets/sfx/ambiente/water_river_loop_01.ogg +0 -0
  13. package/assets/sfx/ambiente/water_river_loop_02.ogg +0 -0
  14. package/assets/sfx/ambiente/water_river_loop_03.ogg +0 -0
  15. package/assets/sfx/ambiente/water_splash_01.ogg +0 -0
  16. package/assets/sfx/ambiente/water_splash_02.ogg +0 -0
  17. package/assets/sfx/ambiente/water_splash_03.ogg +0 -0
  18. package/assets/sfx/ambiente/water_splash_04.ogg +0 -0
  19. package/assets/sfx/ambiente/water_splash_05.ogg +0 -0
  20. package/assets/sfx/ambiente/water_splash_06.ogg +0 -0
  21. package/assets/sfx/ambiente/water_splash_07.ogg +0 -0
  22. package/assets/sfx/ambiente/water_splash_08.ogg +0 -0
  23. package/assets/sfx/ambiente/water_splash_09.ogg +0 -0
  24. package/assets/sfx/ambiente/water_splash_10.ogg +0 -0
  25. package/assets/sfx/ambiente/water_splash_11.ogg +0 -0
  26. package/assets/sfx/ambiente/water_splash_12.ogg +0 -0
  27. package/assets/sfx/ambiente/water_splash_13.ogg +0 -0
  28. package/assets/sfx/ambiente/water_splash_14.ogg +0 -0
  29. package/assets/sfx/ambiente/water_splash_15.ogg +0 -0
  30. package/assets/sfx/armas/bolt_lift_medium_01.ogg +0 -0
  31. package/assets/sfx/armas/bolt_lift_medium_02.ogg +0 -0
  32. package/assets/sfx/armas/bolt_lift_medium_03.ogg +0 -0
  33. package/assets/sfx/armas/bolt_lift_medium_04.ogg +0 -0
  34. package/assets/sfx/armas/bolt_lift_medium_05.ogg +0 -0
  35. package/assets/sfx/armas/bolt_lock_medium_01.ogg +0 -0
  36. package/assets/sfx/armas/bolt_lock_medium_02.ogg +0 -0
  37. package/assets/sfx/armas/bolt_lock_medium_03.ogg +0 -0
  38. package/assets/sfx/armas/bolt_lock_medium_04.ogg +0 -0
  39. package/assets/sfx/armas/bolt_lock_medium_05.ogg +0 -0
  40. package/assets/sfx/armas/bolt_pull_heavy_01.ogg +0 -0
  41. package/assets/sfx/armas/bolt_pull_medium_01.ogg +0 -0
  42. package/assets/sfx/armas/bolt_pull_medium_02.ogg +0 -0
  43. package/assets/sfx/armas/bolt_pull_medium_03.ogg +0 -0
  44. package/assets/sfx/armas/bolt_pull_medium_04.ogg +0 -0
  45. package/assets/sfx/armas/bolt_pull_medium_05.ogg +0 -0
  46. package/assets/sfx/armas/bolt_pull_medium_06.ogg +0 -0
  47. package/assets/sfx/armas/bolt_push_heavy_01.ogg +0 -0
  48. package/assets/sfx/armas/bolt_push_medium_01.ogg +0 -0
  49. package/assets/sfx/armas/bolt_push_medium_02.ogg +0 -0
  50. package/assets/sfx/armas/bolt_push_medium_03.ogg +0 -0
  51. package/assets/sfx/armas/bolt_push_medium_04.ogg +0 -0
  52. package/assets/sfx/armas/bolt_push_medium_05.ogg +0 -0
  53. package/assets/sfx/armas/bolt_push_medium_06.ogg +0 -0
  54. package/assets/sfx/armas/casing_drop_concreto_01.ogg +0 -0
  55. package/assets/sfx/armas/casing_drop_concreto_02.ogg +0 -0
  56. package/assets/sfx/armas/casing_drop_concreto_03.ogg +0 -0
  57. package/assets/sfx/armas/casing_drop_metal_01.ogg +0 -0
  58. package/assets/sfx/armas/casing_drop_metal_02.ogg +0 -0
  59. package/assets/sfx/armas/casing_drop_metal_03.ogg +0 -0
  60. package/assets/sfx/armas/casing_drop_terra_01.ogg +0 -0
  61. package/assets/sfx/armas/casing_drop_terra_02.ogg +0 -0
  62. package/assets/sfx/armas/casing_drop_terra_03.ogg +0 -0
  63. package/assets/sfx/armas/charging_handle_pull_light_01.ogg +0 -0
  64. package/assets/sfx/armas/charging_handle_pull_light_02.ogg +0 -0
  65. package/assets/sfx/armas/charging_handle_pull_light_03.ogg +0 -0
  66. package/assets/sfx/armas/charging_handle_pull_light_04.ogg +0 -0
  67. package/assets/sfx/armas/charging_handle_pull_medium_01.ogg +0 -0
  68. package/assets/sfx/armas/charging_handle_pull_medium_02.ogg +0 -0
  69. package/assets/sfx/armas/charging_handle_pull_medium_03.ogg +0 -0
  70. package/assets/sfx/armas/charging_handle_pull_medium_04.ogg +0 -0
  71. package/assets/sfx/armas/charging_handle_pull_medium_05.ogg +0 -0
  72. package/assets/sfx/armas/charging_handle_release_medium_01.ogg +0 -0
  73. package/assets/sfx/armas/charging_handle_release_medium_02.ogg +0 -0
  74. package/assets/sfx/armas/charging_handle_release_medium_03.ogg +0 -0
  75. package/assets/sfx/armas/charging_handle_release_medium_04.ogg +0 -0
  76. package/assets/sfx/armas/charging_handle_release_medium_05.ogg +0 -0
  77. package/assets/sfx/armas/cylinder_close_light_01.ogg +0 -0
  78. package/assets/sfx/armas/cylinder_close_light_02.ogg +0 -0
  79. package/assets/sfx/armas/cylinder_close_light_03.ogg +0 -0
  80. package/assets/sfx/armas/cylinder_close_light_04.ogg +0 -0
  81. package/assets/sfx/armas/cylinder_close_light_05.ogg +0 -0
  82. package/assets/sfx/armas/cylinder_eject_light_01.ogg +0 -0
  83. package/assets/sfx/armas/cylinder_eject_light_02.ogg +0 -0
  84. package/assets/sfx/armas/cylinder_eject_light_03.ogg +0 -0
  85. package/assets/sfx/armas/cylinder_open_light_01.ogg +0 -0
  86. package/assets/sfx/armas/cylinder_open_light_02.ogg +0 -0
  87. package/assets/sfx/armas/cylinder_open_light_03.ogg +0 -0
  88. package/assets/sfx/armas/cylinder_open_light_04.ogg +0 -0
  89. package/assets/sfx/armas/cylinder_open_light_05.ogg +0 -0
  90. package/assets/sfx/armas/lever_close_medium_01.ogg +0 -0
  91. package/assets/sfx/armas/lever_close_medium_02.ogg +0 -0
  92. package/assets/sfx/armas/lever_open_medium_01.ogg +0 -0
  93. package/assets/sfx/armas/lever_open_medium_02.ogg +0 -0
  94. package/assets/sfx/armas/mag_out_heavy_01.ogg +0 -0
  95. package/assets/sfx/armas/mag_out_heavy_02.ogg +0 -0
  96. package/assets/sfx/armas/mag_out_light_01.ogg +0 -0
  97. package/assets/sfx/armas/mag_out_light_02.ogg +0 -0
  98. package/assets/sfx/armas/mag_out_light_03.ogg +0 -0
  99. package/assets/sfx/armas/mag_out_light_04.ogg +0 -0
  100. package/assets/sfx/armas/mag_out_medium_01.ogg +0 -0
  101. package/assets/sfx/armas/mag_out_medium_02.ogg +0 -0
  102. package/assets/sfx/armas/mag_out_medium_03.ogg +0 -0
  103. package/assets/sfx/armas/mag_seat_heavy_01.ogg +0 -0
  104. package/assets/sfx/armas/mag_seat_heavy_02.ogg +0 -0
  105. package/assets/sfx/armas/mag_seat_light_01.ogg +0 -0
  106. package/assets/sfx/armas/mag_seat_light_02.ogg +0 -0
  107. package/assets/sfx/armas/mag_seat_light_03.ogg +0 -0
  108. package/assets/sfx/armas/mag_seat_light_04.ogg +0 -0
  109. package/assets/sfx/armas/mag_seat_light_05.ogg +0 -0
  110. package/assets/sfx/armas/mag_seat_light_06.ogg +0 -0
  111. package/assets/sfx/armas/mag_seat_medium_01.ogg +0 -0
  112. package/assets/sfx/armas/mag_seat_medium_02.ogg +0 -0
  113. package/assets/sfx/armas/mag_seat_medium_03.ogg +0 -0
  114. package/assets/sfx/armas/pistol_22lr_close_01.ogg +0 -0
  115. package/assets/sfx/armas/pistol_22lr_close_02.ogg +0 -0
  116. package/assets/sfx/armas/pistol_22lr_far_01.ogg +0 -0
  117. package/assets/sfx/armas/pistol_22lr_far_02.ogg +0 -0
  118. package/assets/sfx/armas/pistol_22lr_far_03.ogg +0 -0
  119. package/assets/sfx/armas/pistol_22lr_far_04.ogg +0 -0
  120. package/assets/sfx/armas/pistol_45_close_01.ogg +0 -0
  121. package/assets/sfx/armas/pistol_45_close_02.ogg +0 -0
  122. package/assets/sfx/armas/pistol_45_close_03.ogg +0 -0
  123. package/assets/sfx/armas/pistol_45_close_04.ogg +0 -0
  124. package/assets/sfx/armas/pistol_45_close_05.ogg +0 -0
  125. package/assets/sfx/armas/pistol_45_far_01.ogg +0 -0
  126. package/assets/sfx/armas/pistol_45_far_02.ogg +0 -0
  127. package/assets/sfx/armas/pistol_45_far_03.ogg +0 -0
  128. package/assets/sfx/armas/pistol_45_far_04.ogg +0 -0
  129. package/assets/sfx/armas/pistol_9mm_close_01.ogg +0 -0
  130. package/assets/sfx/armas/pistol_9mm_close_02.ogg +0 -0
  131. package/assets/sfx/armas/pistol_9mm_close_03.ogg +0 -0
  132. package/assets/sfx/armas/pistol_9mm_close_04.ogg +0 -0
  133. package/assets/sfx/armas/pistol_9mm_close_05.ogg +0 -0
  134. package/assets/sfx/armas/pistol_9mm_close_06.ogg +0 -0
  135. package/assets/sfx/armas/pistol_9mm_far_01.ogg +0 -0
  136. package/assets/sfx/armas/pistol_9mm_far_02.ogg +0 -0
  137. package/assets/sfx/armas/pistol_9mm_far_03.ogg +0 -0
  138. package/assets/sfx/armas/pistol_9mm_far_04.ogg +0 -0
  139. package/assets/sfx/armas/pump_back_heavy_01.ogg +0 -0
  140. package/assets/sfx/armas/pump_back_heavy_02.ogg +0 -0
  141. package/assets/sfx/armas/pump_back_heavy_03.ogg +0 -0
  142. package/assets/sfx/armas/pump_back_heavy_04.ogg +0 -0
  143. package/assets/sfx/armas/pump_back_heavy_05.ogg +0 -0
  144. package/assets/sfx/armas/pump_forward_heavy_01.ogg +0 -0
  145. package/assets/sfx/armas/pump_forward_heavy_02.ogg +0 -0
  146. package/assets/sfx/armas/pump_forward_heavy_03.ogg +0 -0
  147. package/assets/sfx/armas/revolver_38_357_close_01.ogg +0 -0
  148. package/assets/sfx/armas/revolver_38_357_close_02.ogg +0 -0
  149. package/assets/sfx/armas/revolver_38_357_close_03.ogg +0 -0
  150. package/assets/sfx/armas/revolver_38_357_close_04.ogg +0 -0
  151. package/assets/sfx/armas/revolver_38_357_far_01.ogg +0 -0
  152. package/assets/sfx/armas/revolver_38_357_far_02.ogg +0 -0
  153. package/assets/sfx/armas/revolver_38_357_far_03.ogg +0 -0
  154. package/assets/sfx/armas/revolver_38_357_far_04.ogg +0 -0
  155. package/assets/sfx/armas/rifle_308_3006_close_01.ogg +0 -0
  156. package/assets/sfx/armas/rifle_308_3006_close_02.ogg +0 -0
  157. package/assets/sfx/armas/rifle_308_3006_close_03.ogg +0 -0
  158. package/assets/sfx/armas/rifle_308_3006_close_04.ogg +0 -0
  159. package/assets/sfx/armas/rifle_308_3006_close_05.ogg +0 -0
  160. package/assets/sfx/armas/rifle_308_3006_close_06.ogg +0 -0
  161. package/assets/sfx/armas/rifle_308_3006_far_01.ogg +0 -0
  162. package/assets/sfx/armas/rifle_308_3006_far_02.ogg +0 -0
  163. package/assets/sfx/armas/rifle_308_3006_far_03.ogg +0 -0
  164. package/assets/sfx/armas/rifle_308_3006_far_04.ogg +0 -0
  165. package/assets/sfx/armas/rifle_308_3006_far_05.ogg +0 -0
  166. package/assets/sfx/armas/rifle_308_3006_far_06.ogg +0 -0
  167. package/assets/sfx/armas/rifle_5_56_close_01.ogg +0 -0
  168. package/assets/sfx/armas/rifle_5_56_close_02.ogg +0 -0
  169. package/assets/sfx/armas/rifle_5_56_close_03.ogg +0 -0
  170. package/assets/sfx/armas/rifle_5_56_close_04.ogg +0 -0
  171. package/assets/sfx/armas/rifle_5_56_close_05.ogg +0 -0
  172. package/assets/sfx/armas/rifle_5_56_far_01.ogg +0 -0
  173. package/assets/sfx/armas/rifle_5_56_far_02.ogg +0 -0
  174. package/assets/sfx/armas/rifle_5_56_far_03.ogg +0 -0
  175. package/assets/sfx/armas/rifle_5_56_far_04.ogg +0 -0
  176. package/assets/sfx/armas/rifle_7_62x39_close_01.ogg +0 -0
  177. package/assets/sfx/armas/rifle_7_62x39_close_02.ogg +0 -0
  178. package/assets/sfx/armas/rifle_7_62x39_close_03.ogg +0 -0
  179. package/assets/sfx/armas/rifle_7_62x39_close_04.ogg +0 -0
  180. package/assets/sfx/armas/rifle_7_62x39_close_05.ogg +0 -0
  181. package/assets/sfx/armas/rifle_7_62x39_close_06.ogg +0 -0
  182. package/assets/sfx/armas/rifle_7_62x39_close_07.ogg +0 -0
  183. package/assets/sfx/armas/rifle_7_62x39_close_08.ogg +0 -0
  184. package/assets/sfx/armas/rifle_7_62x39_close_09.ogg +0 -0
  185. package/assets/sfx/armas/rifle_7_62x39_close_10.ogg +0 -0
  186. package/assets/sfx/armas/rifle_7_62x39_close_11.ogg +0 -0
  187. package/assets/sfx/armas/rifle_7_62x39_close_12.ogg +0 -0
  188. package/assets/sfx/armas/rifle_7_62x39_far_01.ogg +0 -0
  189. package/assets/sfx/armas/rifle_7_62x39_far_02.ogg +0 -0
  190. package/assets/sfx/armas/rifle_7_62x39_far_03.ogg +0 -0
  191. package/assets/sfx/armas/shell_insert_heavy_01.ogg +0 -0
  192. package/assets/sfx/armas/shell_insert_heavy_02.ogg +0 -0
  193. package/assets/sfx/armas/shell_insert_heavy_03.ogg +0 -0
  194. package/assets/sfx/armas/shell_insert_heavy_04.ogg +0 -0
  195. package/assets/sfx/armas/shell_insert_heavy_05.ogg +0 -0
  196. package/assets/sfx/armas/shell_insert_heavy_06.ogg +0 -0
  197. package/assets/sfx/armas/shell_insert_heavy_07.ogg +0 -0
  198. package/assets/sfx/armas/shell_insert_heavy_08.ogg +0 -0
  199. package/assets/sfx/armas/shell_insert_heavy_09.ogg +0 -0
  200. package/assets/sfx/armas/shotgun_12_close_01.ogg +0 -0
  201. package/assets/sfx/armas/shotgun_12_close_02.ogg +0 -0
  202. package/assets/sfx/armas/shotgun_12_close_03.ogg +0 -0
  203. package/assets/sfx/armas/shotgun_12_close_04.ogg +0 -0
  204. package/assets/sfx/armas/shotgun_12_close_05.ogg +0 -0
  205. package/assets/sfx/armas/shotgun_12_close_06.ogg +0 -0
  206. package/assets/sfx/armas/shotgun_12_far_01.ogg +0 -0
  207. package/assets/sfx/armas/shotgun_12_far_02.ogg +0 -0
  208. package/assets/sfx/armas/shotgun_12_far_03.ogg +0 -0
  209. package/assets/sfx/armas/shotgun_12_far_04.ogg +0 -0
  210. package/assets/sfx/armas/shotgun_12_far_05.ogg +0 -0
  211. package/assets/sfx/armas/shotgun_12_far_06.ogg +0 -0
  212. package/assets/sfx/armas/slide_release_light_01.ogg +0 -0
  213. package/assets/sfx/armas/slide_release_light_02.ogg +0 -0
  214. package/assets/sfx/armas/slide_release_light_03.ogg +0 -0
  215. package/assets/sfx/armas/slide_release_light_04.ogg +0 -0
  216. package/assets/sfx/armas/slide_release_light_05.ogg +0 -0
  217. package/assets/sfx/armas/slide_release_light_06.ogg +0 -0
  218. package/assets/sfx/armas/slide_release_medium_01.ogg +0 -0
  219. package/assets/sfx/armas/slide_release_medium_02.ogg +0 -0
  220. package/assets/sfx/armas/slide_release_medium_03.ogg +0 -0
  221. package/assets/sfx/armas/slide_release_medium_04.ogg +0 -0
  222. package/assets/sfx/armas/sniper_338_300wm_close_01.ogg +0 -0
  223. package/assets/sfx/armas/sniper_338_300wm_close_02.ogg +0 -0
  224. package/assets/sfx/armas/sniper_338_300wm_close_03.ogg +0 -0
  225. package/assets/sfx/armas/sniper_338_300wm_close_04.ogg +0 -0
  226. package/assets/sfx/armas/sniper_338_300wm_close_05.ogg +0 -0
  227. package/assets/sfx/armas/sniper_338_300wm_close_06.ogg +0 -0
  228. package/assets/sfx/armas/sniper_338_300wm_close_07.ogg +0 -0
  229. package/assets/sfx/armas/sniper_338_300wm_far_01.ogg +0 -0
  230. package/assets/sfx/armas/sniper_338_300wm_far_02.ogg +0 -0
  231. package/assets/sfx/armas/sniper_338_300wm_far_03.ogg +0 -0
  232. package/assets/sfx/armas/sniper_338_300wm_far_04.ogg +0 -0
  233. package/assets/sfx/armas/sniper_338_300wm_far_05.ogg +0 -0
  234. package/assets/sfx/armas/sniper_338_300wm_far_06.ogg +0 -0
  235. package/assets/sfx/armas/speedloader_light_01.ogg +0 -0
  236. package/assets/sfx/armas/speedloader_light_02.ogg +0 -0
  237. package/assets/sfx/armas/speedloader_light_03.ogg +0 -0
  238. package/assets/sfx/armas/speedloader_light_04.ogg +0 -0
  239. package/assets/sfx/armas/speedloader_light_05.ogg +0 -0
  240. package/assets/sfx/armas/speedloader_light_06.ogg +0 -0
  241. package/assets/sfx/armas/speedloader_light_07.ogg +0 -0
  242. package/assets/sfx/armas/speedloader_light_08.ogg +0 -0
  243. package/assets/sfx/armas/suppressed_pistol_close_01.ogg +0 -0
  244. package/assets/sfx/armas/suppressed_pistol_close_02.ogg +0 -0
  245. package/assets/sfx/armas/suppressed_pistol_close_03.ogg +0 -0
  246. package/assets/sfx/armas/suppressed_pistol_close_04.ogg +0 -0
  247. package/assets/sfx/armas/suppressed_pistol_close_05.ogg +0 -0
  248. package/assets/sfx/armas/suppressed_pistol_far_01.ogg +0 -0
  249. package/assets/sfx/armas/suppressed_pistol_far_02.ogg +0 -0
  250. package/assets/sfx/armas/suppressed_pistol_far_03.ogg +0 -0
  251. package/assets/sfx/armas/suppressed_pistol_far_04.ogg +0 -0
  252. package/assets/sfx/armas/suppressed_pistol_far_05.ogg +0 -0
  253. package/assets/sfx/armas/suppressed_rifle_close_01.ogg +0 -0
  254. package/assets/sfx/armas/suppressed_rifle_close_02.ogg +0 -0
  255. package/assets/sfx/armas/suppressed_rifle_close_03.ogg +0 -0
  256. package/assets/sfx/armas/suppressed_rifle_close_04.ogg +0 -0
  257. package/assets/sfx/armas/suppressed_rifle_far_01.ogg +0 -0
  258. package/assets/sfx/armas/suppressed_rifle_far_02.ogg +0 -0
  259. package/assets/sfx/armas/suppressed_rifle_far_03.ogg +0 -0
  260. package/assets/sfx/armas/suppressed_rifle_far_04.ogg +0 -0
  261. package/assets/sfx/explosoes-fogo/debris_rain_mixed_01.ogg +0 -0
  262. package/assets/sfx/explosoes-fogo/debris_rain_mixed_02.ogg +0 -0
  263. package/assets/sfx/explosoes-fogo/debris_rain_mixed_03.ogg +0 -0
  264. package/assets/sfx/explosoes-fogo/debris_rain_mixed_04.ogg +0 -0
  265. package/assets/sfx/explosoes-fogo/debris_rain_mixed_05.ogg +0 -0
  266. package/assets/sfx/explosoes-fogo/debris_rain_mixed_06.ogg +0 -0
  267. package/assets/sfx/explosoes-fogo/debris_rain_mixed_07.ogg +0 -0
  268. package/assets/sfx/explosoes-fogo/debris_rain_stone_01.ogg +0 -0
  269. package/assets/sfx/explosoes-fogo/debris_rain_stone_02.ogg +0 -0
  270. package/assets/sfx/explosoes-fogo/debris_rain_stone_03.ogg +0 -0
  271. package/assets/sfx/explosoes-fogo/debris_rain_stone_04.ogg +0 -0
  272. package/assets/sfx/explosoes-fogo/debris_rain_stone_05.ogg +0 -0
  273. package/assets/sfx/explosoes-fogo/debris_rain_stone_06.ogg +0 -0
  274. package/assets/sfx/explosoes-fogo/debris_rain_stone_07.ogg +0 -0
  275. package/assets/sfx/explosoes-fogo/debris_rain_stone_08.ogg +0 -0
  276. package/assets/sfx/explosoes-fogo/debris_rain_stone_09.ogg +0 -0
  277. package/assets/sfx/explosoes-fogo/explosion_big_01.ogg +0 -0
  278. package/assets/sfx/explosoes-fogo/explosion_big_02.ogg +0 -0
  279. package/assets/sfx/explosoes-fogo/explosion_big_03.ogg +0 -0
  280. package/assets/sfx/explosoes-fogo/explosion_big_04.ogg +0 -0
  281. package/assets/sfx/explosoes-fogo/explosion_big_05.ogg +0 -0
  282. package/assets/sfx/explosoes-fogo/explosion_car_01.ogg +0 -0
  283. package/assets/sfx/explosoes-fogo/explosion_car_02.ogg +0 -0
  284. package/assets/sfx/explosoes-fogo/explosion_car_03.ogg +0 -0
  285. package/assets/sfx/explosoes-fogo/explosion_car_04.ogg +0 -0
  286. package/assets/sfx/explosoes-fogo/explosion_far_close_01.ogg +0 -0
  287. package/assets/sfx/explosoes-fogo/explosion_far_close_02.ogg +0 -0
  288. package/assets/sfx/explosoes-fogo/explosion_far_close_03.ogg +0 -0
  289. package/assets/sfx/explosoes-fogo/explosion_far_close_04.ogg +0 -0
  290. package/assets/sfx/explosoes-fogo/explosion_flashbang_01.ogg +0 -0
  291. package/assets/sfx/explosoes-fogo/explosion_flashbang_02.ogg +0 -0
  292. package/assets/sfx/explosoes-fogo/explosion_grenade_01.ogg +0 -0
  293. package/assets/sfx/explosoes-fogo/explosion_grenade_02.ogg +0 -0
  294. package/assets/sfx/explosoes-fogo/explosion_grenade_03.ogg +0 -0
  295. package/assets/sfx/explosoes-fogo/explosion_grenade_04.ogg +0 -0
  296. package/assets/sfx/explosoes-fogo/explosion_grenade_05.ogg +0 -0
  297. package/assets/sfx/explosoes-fogo/explosion_grenade_06.ogg +0 -0
  298. package/assets/sfx/explosoes-fogo/explosion_small_bang_01.ogg +0 -0
  299. package/assets/sfx/explosoes-fogo/explosion_small_bang_02.ogg +0 -0
  300. package/assets/sfx/explosoes-fogo/explosion_small_bang_03.ogg +0 -0
  301. package/assets/sfx/explosoes-fogo/explosion_small_bang_04.ogg +0 -0
  302. package/assets/sfx/explosoes-fogo/explosion_small_bang_05.ogg +0 -0
  303. package/assets/sfx/explosoes-fogo/explosion_small_bang_06.ogg +0 -0
  304. package/assets/sfx/explosoes-fogo/explosion_small_bang_07.ogg +0 -0
  305. package/assets/sfx/explosoes-fogo/explosion_small_bang_08.ogg +0 -0
  306. package/assets/sfx/explosoes-fogo/explosion_small_bang_09.ogg +0 -0
  307. package/assets/sfx/explosoes-fogo/explosion_small_bang_10.ogg +0 -0
  308. package/assets/sfx/explosoes-fogo/fire_crackle_01.ogg +0 -0
  309. package/assets/sfx/explosoes-fogo/fire_crackle_02.ogg +0 -0
  310. package/assets/sfx/explosoes-fogo/fire_crackle_03.ogg +0 -0
  311. package/assets/sfx/explosoes-fogo/fire_crackle_05.ogg +0 -0
  312. package/assets/sfx/explosoes-fogo/fire_crackle_07.ogg +0 -0
  313. package/assets/sfx/explosoes-fogo/fire_extinguish_01.ogg +0 -0
  314. package/assets/sfx/explosoes-fogo/fire_extinguish_02.ogg +0 -0
  315. package/assets/sfx/explosoes-fogo/fire_ignite_01.ogg +0 -0
  316. package/assets/sfx/explosoes-fogo/fire_ignite_02.ogg +0 -0
  317. package/assets/sfx/explosoes-fogo/fire_ignite_03.ogg +0 -0
  318. package/assets/sfx/explosoes-fogo/fire_ignite_04.ogg +0 -0
  319. package/assets/sfx/explosoes-fogo/fire_loop_01.ogg +0 -0
  320. package/assets/sfx/explosoes-fogo/fire_loop_03.ogg +0 -0
  321. package/assets/sfx/explosoes-fogo/fire_loop_04.ogg +0 -0
  322. package/assets/sfx/explosoes-fogo/fire_loop_gas_01.ogg +0 -0
  323. package/assets/sfx/explosoes-fogo/fire_loop_gas_02.ogg +0 -0
  324. package/assets/sfx/explosoes-fogo/fire_loop_gas_03.ogg +0 -0
  325. package/assets/sfx/explosoes-fogo/fire_loop_gas_04.ogg +0 -0
  326. package/assets/sfx/explosoes-fogo/fire_loop_liquid_01.ogg +0 -0
  327. package/assets/sfx/explosoes-fogo/fire_loop_liquid_02.ogg +0 -0
  328. package/assets/sfx/explosoes-fogo/fire_loop_liquid_03.ogg +0 -0
  329. package/assets/sfx/explosoes-fogo/fire_loop_plastic_01.ogg +0 -0
  330. package/assets/sfx/explosoes-fogo/fire_loop_plastic_02.ogg +0 -0
  331. package/assets/sfx/explosoes-fogo/fire_loop_plastic_03.ogg +0 -0
  332. package/assets/sfx/explosoes-fogo/fire_loop_plastic_04.ogg +0 -0
  333. package/assets/sfx/explosoes-fogo/fire_loop_small_01.ogg +0 -0
  334. package/assets/sfx/explosoes-fogo/fire_pop_01.ogg +0 -0
  335. package/assets/sfx/explosoes-fogo/fire_pop_02.ogg +0 -0
  336. package/assets/sfx/explosoes-fogo/fire_pop_03.ogg +0 -0
  337. package/assets/sfx/explosoes-fogo/flamethrower_loop_01.ogg +0 -0
  338. package/assets/sfx/explosoes-fogo/gas_leak_01.ogg +0 -0
  339. package/assets/sfx/explosoes-fogo/molotov_break_ignite_01.ogg +0 -0
  340. package/assets/sfx/explosoes-fogo/molotov_break_ignite_02.ogg +0 -0
  341. package/assets/sfx/impactos/ceramic_hit_close_01.ogg +0 -0
  342. package/assets/sfx/impactos/concrete_block_drag_close_01.ogg +0 -0
  343. package/assets/sfx/impactos/concrete_block_drag_close_02.ogg +0 -0
  344. package/assets/sfx/impactos/concrete_block_drag_close_03.ogg +0 -0
  345. package/assets/sfx/impactos/concrete_block_drag_close_04.ogg +0 -0
  346. package/assets/sfx/impactos/concrete_block_drag_close_05.ogg +0 -0
  347. package/assets/sfx/impactos/concrete_block_drag_close_06.ogg +0 -0
  348. package/assets/sfx/impactos/concrete_block_drag_close_07.ogg +0 -0
  349. package/assets/sfx/impactos/crack_close_01.ogg +0 -0
  350. package/assets/sfx/impactos/crack_close_02.ogg +0 -0
  351. package/assets/sfx/impactos/crack_close_03.ogg +0 -0
  352. package/assets/sfx/impactos/crack_close_04.ogg +0 -0
  353. package/assets/sfx/impactos/crack_close_05.ogg +0 -0
  354. package/assets/sfx/impactos/crack_close_06.ogg +0 -0
  355. package/assets/sfx/impactos/crack_close_07.ogg +0 -0
  356. package/assets/sfx/impactos/crack_close_08.ogg +0 -0
  357. package/assets/sfx/impactos/crack_close_09.ogg +0 -0
  358. package/assets/sfx/impactos/crack_close_10.ogg +0 -0
  359. package/assets/sfx/impactos/crumble_close_01.ogg +0 -0
  360. package/assets/sfx/impactos/crumble_close_02.ogg +0 -0
  361. package/assets/sfx/impactos/crumble_close_03.ogg +0 -0
  362. package/assets/sfx/impactos/crumble_close_04.ogg +0 -0
  363. package/assets/sfx/impactos/crumble_close_05.ogg +0 -0
  364. package/assets/sfx/impactos/flesh_fruit_splat_close_01.ogg +0 -0
  365. package/assets/sfx/impactos/flesh_fruit_splat_close_02.ogg +0 -0
  366. package/assets/sfx/impactos/flesh_fruit_splat_close_03.ogg +0 -0
  367. package/assets/sfx/impactos/furniture_push_wood_close_01.ogg +0 -0
  368. package/assets/sfx/impactos/glass_blunt_heavy_close_01.ogg +0 -0
  369. package/assets/sfx/impactos/glass_blunt_heavy_close_02.ogg +0 -0
  370. package/assets/sfx/impactos/glass_blunt_heavy_close_03.ogg +0 -0
  371. package/assets/sfx/impactos/glass_blunt_heavy_close_04.ogg +0 -0
  372. package/assets/sfx/impactos/glass_blunt_heavy_close_05.ogg +0 -0
  373. package/assets/sfx/impactos/glass_blunt_light_close_01.ogg +0 -0
  374. package/assets/sfx/impactos/glass_blunt_light_close_02.ogg +0 -0
  375. package/assets/sfx/impactos/glass_blunt_light_close_03.ogg +0 -0
  376. package/assets/sfx/impactos/glass_blunt_light_close_04.ogg +0 -0
  377. package/assets/sfx/impactos/glass_blunt_light_close_05.ogg +0 -0
  378. package/assets/sfx/impactos/glass_blunt_medium_close_01.ogg +0 -0
  379. package/assets/sfx/impactos/glass_blunt_medium_close_02.ogg +0 -0
  380. package/assets/sfx/impactos/glass_blunt_medium_close_03.ogg +0 -0
  381. package/assets/sfx/impactos/glass_blunt_medium_close_04.ogg +0 -0
  382. package/assets/sfx/impactos/glass_blunt_medium_close_05.ogg +0 -0
  383. package/assets/sfx/impactos/glass_bottle_break_close_01.ogg +0 -0
  384. package/assets/sfx/impactos/glass_debris_fall_close_01.ogg +0 -0
  385. package/assets/sfx/impactos/glass_debris_fall_close_02.ogg +0 -0
  386. package/assets/sfx/impactos/glass_debris_fall_close_03.ogg +0 -0
  387. package/assets/sfx/impactos/glass_debris_fall_close_04.ogg +0 -0
  388. package/assets/sfx/impactos/glass_shatter_close_01.ogg +0 -0
  389. package/assets/sfx/impactos/glass_shatter_close_02.ogg +0 -0
  390. package/assets/sfx/impactos/glass_shatter_close_03.ogg +0 -0
  391. package/assets/sfx/impactos/glass_shatter_close_04.ogg +0 -0
  392. package/assets/sfx/impactos/glass_shatter_close_05.ogg +0 -0
  393. package/assets/sfx/impactos/glass_shatter_close_06.ogg +0 -0
  394. package/assets/sfx/impactos/glass_shatter_close_07.ogg +0 -0
  395. package/assets/sfx/impactos/glass_shatter_close_08.ogg +0 -0
  396. package/assets/sfx/impactos/glass_shatter_close_09.ogg +0 -0
  397. package/assets/sfx/impactos/gravel_hit_close_21.ogg +0 -0
  398. package/assets/sfx/impactos/gravel_hit_close_22.ogg +0 -0
  399. package/assets/sfx/impactos/gravel_hit_close_23.ogg +0 -0
  400. package/assets/sfx/impactos/gravel_hit_close_24.ogg +0 -0
  401. package/assets/sfx/impactos/gravel_hit_close_25.ogg +0 -0
  402. package/assets/sfx/impactos/gravel_hit_close_26.ogg +0 -0
  403. package/assets/sfx/impactos/gravel_hit_close_27.ogg +0 -0
  404. package/assets/sfx/impactos/gravel_hit_close_28.ogg +0 -0
  405. package/assets/sfx/impactos/gravel_hit_close_29.ogg +0 -0
  406. package/assets/sfx/impactos/impact_generic_light_close_01.ogg +0 -0
  407. package/assets/sfx/impactos/impact_generic_light_close_02.ogg +0 -0
  408. package/assets/sfx/impactos/impact_generic_light_close_03.ogg +0 -0
  409. package/assets/sfx/impactos/impact_generic_light_close_04.ogg +0 -0
  410. package/assets/sfx/impactos/impact_generic_light_close_05.ogg +0 -0
  411. package/assets/sfx/impactos/masonry_blunt_close_01.ogg +0 -0
  412. package/assets/sfx/impactos/masonry_blunt_close_02.ogg +0 -0
  413. package/assets/sfx/impactos/masonry_blunt_close_03.ogg +0 -0
  414. package/assets/sfx/impactos/masonry_blunt_close_04.ogg +0 -0
  415. package/assets/sfx/impactos/masonry_blunt_close_05.ogg +0 -0
  416. package/assets/sfx/impactos/masonry_blunt_close_06.ogg +0 -0
  417. package/assets/sfx/impactos/masonry_blunt_close_07.ogg +0 -0
  418. package/assets/sfx/impactos/masonry_bullet_close_01.ogg +0 -0
  419. package/assets/sfx/impactos/masonry_bullet_close_02.ogg +0 -0
  420. package/assets/sfx/impactos/masonry_bullet_close_03.ogg +0 -0
  421. package/assets/sfx/impactos/masonry_bullet_close_04.ogg +0 -0
  422. package/assets/sfx/impactos/masonry_bullet_close_05.ogg +0 -0
  423. package/assets/sfx/impactos/masonry_bullet_close_21.ogg +0 -0
  424. package/assets/sfx/impactos/masonry_bullet_close_22.ogg +0 -0
  425. package/assets/sfx/impactos/masonry_bullet_close_23.ogg +0 -0
  426. package/assets/sfx/impactos/masonry_bullet_close_24.ogg +0 -0
  427. package/assets/sfx/impactos/masonry_bullet_close_25.ogg +0 -0
  428. package/assets/sfx/impactos/masonry_bullet_close_26.ogg +0 -0
  429. package/assets/sfx/impactos/masonry_bullet_close_27.ogg +0 -0
  430. package/assets/sfx/impactos/masonry_bullet_close_28.ogg +0 -0
  431. package/assets/sfx/impactos/metal_blunt_close_01.ogg +0 -0
  432. package/assets/sfx/impactos/metal_blunt_close_02.ogg +0 -0
  433. package/assets/sfx/impactos/metal_blunt_close_03.ogg +0 -0
  434. package/assets/sfx/impactos/metal_blunt_close_04.ogg +0 -0
  435. package/assets/sfx/impactos/metal_blunt_close_05.ogg +0 -0
  436. package/assets/sfx/impactos/metal_blunt_heavy_close_01.ogg +0 -0
  437. package/assets/sfx/impactos/metal_blunt_heavy_close_02.ogg +0 -0
  438. package/assets/sfx/impactos/metal_blunt_heavy_close_03.ogg +0 -0
  439. package/assets/sfx/impactos/metal_blunt_heavy_close_04.ogg +0 -0
  440. package/assets/sfx/impactos/metal_blunt_heavy_close_05.ogg +0 -0
  441. package/assets/sfx/impactos/metal_blunt_light_close_01.ogg +0 -0
  442. package/assets/sfx/impactos/metal_blunt_light_close_02.ogg +0 -0
  443. package/assets/sfx/impactos/metal_blunt_light_close_03.ogg +0 -0
  444. package/assets/sfx/impactos/metal_blunt_light_close_04.ogg +0 -0
  445. package/assets/sfx/impactos/metal_blunt_light_close_05.ogg +0 -0
  446. package/assets/sfx/impactos/metal_blunt_medium_close_01.ogg +0 -0
  447. package/assets/sfx/impactos/metal_blunt_medium_close_02.ogg +0 -0
  448. package/assets/sfx/impactos/metal_blunt_medium_close_03.ogg +0 -0
  449. package/assets/sfx/impactos/metal_blunt_medium_close_04.ogg +0 -0
  450. package/assets/sfx/impactos/metal_blunt_medium_close_05.ogg +0 -0
  451. package/assets/sfx/impactos/metal_bullet_close_01.ogg +0 -0
  452. package/assets/sfx/impactos/metal_bullet_close_02.ogg +0 -0
  453. package/assets/sfx/impactos/metal_bullet_close_03.ogg +0 -0
  454. package/assets/sfx/impactos/metal_bullet_close_04.ogg +0 -0
  455. package/assets/sfx/impactos/metal_bullet_close_05.ogg +0 -0
  456. package/assets/sfx/impactos/metal_bullet_close_06.ogg +0 -0
  457. package/assets/sfx/impactos/metal_bullet_close_21.ogg +0 -0
  458. package/assets/sfx/impactos/metal_bullet_close_22.ogg +0 -0
  459. package/assets/sfx/impactos/metal_bullet_close_23.ogg +0 -0
  460. package/assets/sfx/impactos/metal_bullet_close_24.ogg +0 -0
  461. package/assets/sfx/impactos/metal_bullet_close_25.ogg +0 -0
  462. package/assets/sfx/impactos/metal_bullet_close_26.ogg +0 -0
  463. package/assets/sfx/impactos/metal_bullet_close_27.ogg +0 -0
  464. package/assets/sfx/impactos/metal_bullet_close_28.ogg +0 -0
  465. package/assets/sfx/impactos/metal_bullet_close_29.ogg +0 -0
  466. package/assets/sfx/impactos/metal_bullet_close_30.ogg +0 -0
  467. package/assets/sfx/impactos/metal_bullet_close_31.ogg +0 -0
  468. package/assets/sfx/impactos/metal_bullet_close_32.ogg +0 -0
  469. package/assets/sfx/impactos/metal_bullet_close_33.ogg +0 -0
  470. package/assets/sfx/impactos/metal_bullet_close_34.ogg +0 -0
  471. package/assets/sfx/impactos/metal_fall_close_01.ogg +0 -0
  472. package/assets/sfx/impactos/metal_fall_close_02.ogg +0 -0
  473. package/assets/sfx/impactos/metal_fall_close_03.ogg +0 -0
  474. package/assets/sfx/impactos/metal_fall_close_04.ogg +0 -0
  475. package/assets/sfx/impactos/metal_fall_close_05.ogg +0 -0
  476. package/assets/sfx/impactos/metal_fall_close_06.ogg +0 -0
  477. package/assets/sfx/impactos/metal_fall_close_07.ogg +0 -0
  478. package/assets/sfx/impactos/metal_fall_close_08.ogg +0 -0
  479. package/assets/sfx/impactos/metal_fall_close_09.ogg +0 -0
  480. package/assets/sfx/impactos/metal_fall_close_10.ogg +0 -0
  481. package/assets/sfx/impactos/metal_thin_close_01.ogg +0 -0
  482. package/assets/sfx/impactos/metal_thin_close_02.ogg +0 -0
  483. package/assets/sfx/impactos/metal_thin_close_03.ogg +0 -0
  484. package/assets/sfx/impactos/metal_thin_close_04.ogg +0 -0
  485. package/assets/sfx/impactos/metal_thin_close_05.ogg +0 -0
  486. package/assets/sfx/impactos/metal_thin_close_06.ogg +0 -0
  487. package/assets/sfx/impactos/metal_thin_close_07.ogg +0 -0
  488. package/assets/sfx/impactos/metal_thin_close_08.ogg +0 -0
  489. package/assets/sfx/impactos/metal_thin_close_09.ogg +0 -0
  490. package/assets/sfx/impactos/metal_thin_close_10.ogg +0 -0
  491. package/assets/sfx/impactos/metal_thin_close_11.ogg +0 -0
  492. package/assets/sfx/impactos/metal_thin_close_12.ogg +0 -0
  493. package/assets/sfx/impactos/metal_thin_close_13.ogg +0 -0
  494. package/assets/sfx/impactos/metal_thin_close_14.ogg +0 -0
  495. package/assets/sfx/impactos/metal_thin_close_15.ogg +0 -0
  496. package/assets/sfx/impactos/metal_thin_close_16.ogg +0 -0
  497. package/assets/sfx/impactos/metal_thin_close_17.ogg +0 -0
  498. package/assets/sfx/impactos/metal_thin_close_18.ogg +0 -0
  499. package/assets/sfx/impactos/metal_thin_close_19.ogg +0 -0
  500. package/assets/sfx/impactos/metal_thin_close_20.ogg +0 -0
  501. package/assets/sfx/impactos/metal_thin_close_21.ogg +0 -0
  502. package/assets/sfx/impactos/metal_thin_close_22.ogg +0 -0
  503. package/assets/sfx/impactos/metal_thin_close_23.ogg +0 -0
  504. package/assets/sfx/impactos/metal_thin_close_24.ogg +0 -0
  505. package/assets/sfx/impactos/metal_thin_close_25.ogg +0 -0
  506. package/assets/sfx/impactos/metal_thin_close_26.ogg +0 -0
  507. package/assets/sfx/impactos/paper_tear_close_01.ogg +0 -0
  508. package/assets/sfx/impactos/paper_tear_close_02.ogg +0 -0
  509. package/assets/sfx/impactos/plastic_hit_close_01.ogg +0 -0
  510. package/assets/sfx/impactos/plastic_hit_close_02.ogg +0 -0
  511. package/assets/sfx/impactos/plastic_hit_close_03.ogg +0 -0
  512. package/assets/sfx/impactos/plastic_hit_close_04.ogg +0 -0
  513. package/assets/sfx/impactos/ricochet_metal_close_21.ogg +0 -0
  514. package/assets/sfx/impactos/ricochet_metal_close_22.ogg +0 -0
  515. package/assets/sfx/impactos/ricochet_metal_close_23.ogg +0 -0
  516. package/assets/sfx/impactos/ricochet_metal_close_24.ogg +0 -0
  517. package/assets/sfx/impactos/ricochet_metal_close_25.ogg +0 -0
  518. package/assets/sfx/impactos/ricochet_metal_close_26.ogg +0 -0
  519. package/assets/sfx/impactos/ricochet_metal_close_27.ogg +0 -0
  520. package/assets/sfx/impactos/ricochet_metal_close_28.ogg +0 -0
  521. package/assets/sfx/impactos/rubble_falling_close_01.ogg +0 -0
  522. package/assets/sfx/impactos/rubble_falling_close_02.ogg +0 -0
  523. package/assets/sfx/impactos/rubble_falling_close_03.ogg +0 -0
  524. package/assets/sfx/impactos/rubble_falling_close_04.ogg +0 -0
  525. package/assets/sfx/impactos/rubble_falling_close_05.ogg +0 -0
  526. package/assets/sfx/impactos/rubble_falling_close_06.ogg +0 -0
  527. package/assets/sfx/impactos/rubble_falling_close_07.ogg +0 -0
  528. package/assets/sfx/impactos/rubble_falling_close_08.ogg +0 -0
  529. package/assets/sfx/impactos/rubble_falling_close_09.ogg +0 -0
  530. package/assets/sfx/impactos/soft_bullet_close_01.ogg +0 -0
  531. package/assets/sfx/impactos/soft_bullet_close_02.ogg +0 -0
  532. package/assets/sfx/impactos/soft_bullet_close_03.ogg +0 -0
  533. package/assets/sfx/impactos/soft_bullet_close_04.ogg +0 -0
  534. package/assets/sfx/impactos/soft_bullet_close_05.ogg +0 -0
  535. package/assets/sfx/impactos/soft_bullet_close_06.ogg +0 -0
  536. package/assets/sfx/impactos/soft_bullet_close_07.ogg +0 -0
  537. package/assets/sfx/impactos/soft_bullet_close_08.ogg +0 -0
  538. package/assets/sfx/impactos/soft_bullet_close_09.ogg +0 -0
  539. package/assets/sfx/impactos/soft_bullet_close_10.ogg +0 -0
  540. package/assets/sfx/impactos/soil_bullet_close_21.ogg +0 -0
  541. package/assets/sfx/impactos/soil_bullet_close_22.ogg +0 -0
  542. package/assets/sfx/impactos/soil_bullet_close_23.ogg +0 -0
  543. package/assets/sfx/impactos/wood_blunt_heavy_close_01.ogg +0 -0
  544. package/assets/sfx/impactos/wood_blunt_heavy_close_02.ogg +0 -0
  545. package/assets/sfx/impactos/wood_blunt_heavy_close_03.ogg +0 -0
  546. package/assets/sfx/impactos/wood_blunt_heavy_close_04.ogg +0 -0
  547. package/assets/sfx/impactos/wood_blunt_heavy_close_05.ogg +0 -0
  548. package/assets/sfx/impactos/wood_blunt_light_close_01.ogg +0 -0
  549. package/assets/sfx/impactos/wood_blunt_light_close_02.ogg +0 -0
  550. package/assets/sfx/impactos/wood_blunt_light_close_03.ogg +0 -0
  551. package/assets/sfx/impactos/wood_blunt_light_close_04.ogg +0 -0
  552. package/assets/sfx/impactos/wood_blunt_light_close_05.ogg +0 -0
  553. package/assets/sfx/impactos/wood_blunt_medium_close_01.ogg +0 -0
  554. package/assets/sfx/impactos/wood_blunt_medium_close_02.ogg +0 -0
  555. package/assets/sfx/impactos/wood_blunt_medium_close_03.ogg +0 -0
  556. package/assets/sfx/impactos/wood_blunt_medium_close_04.ogg +0 -0
  557. package/assets/sfx/impactos/wood_blunt_medium_close_05.ogg +0 -0
  558. package/assets/sfx/impactos/wood_fall_close_01.ogg +0 -0
  559. package/assets/sfx/impactos/wood_fall_close_02.ogg +0 -0
  560. package/assets/sfx/impactos/wood_fall_close_03.ogg +0 -0
  561. package/assets/sfx/impactos/wood_fall_close_04.ogg +0 -0
  562. package/assets/sfx/impactos/wood_fall_close_05.ogg +0 -0
  563. package/assets/sfx/impactos/wood_fall_close_06.ogg +0 -0
  564. package/assets/sfx/impactos/wood_fall_close_07.ogg +0 -0
  565. package/assets/sfx/impactos/wood_fall_close_08.ogg +0 -0
  566. package/assets/sfx/impactos/wood_fall_close_09.ogg +0 -0
  567. package/assets/sfx/impactos/wood_hit_close_01.ogg +0 -0
  568. package/assets/sfx/impactos/wood_hit_close_02.ogg +0 -0
  569. package/assets/sfx/impactos/wood_hit_close_03.ogg +0 -0
  570. package/assets/sfx/impactos/wood_hit_close_04.ogg +0 -0
  571. package/assets/sfx/impactos/wood_hit_close_05.ogg +0 -0
  572. package/assets/sfx/impactos/wood_hit_close_06.ogg +0 -0
  573. package/assets/sfx/impactos/wood_hit_close_07.ogg +0 -0
  574. package/assets/sfx/impactos/wood_hit_close_08.ogg +0 -0
  575. package/assets/sfx/impactos/wood_hit_close_09.ogg +0 -0
  576. package/assets/sfx/impactos/wood_hit_close_10.ogg +0 -0
  577. package/assets/sfx/impactos/wood_hit_close_11.ogg +0 -0
  578. package/assets/sfx/impactos/wood_hit_close_12.ogg +0 -0
  579. package/assets/sfx/impactos/wood_hit_close_13.ogg +0 -0
  580. package/assets/sfx/impactos/wood_hit_close_14.ogg +0 -0
  581. package/assets/sfx/impactos/wood_hit_close_21.ogg +0 -0
  582. package/assets/sfx/impactos/wood_hit_close_22.ogg +0 -0
  583. package/assets/sfx/impactos/wood_hit_close_23.ogg +0 -0
  584. package/assets/sfx/impactos/wood_hit_close_24.ogg +0 -0
  585. package/assets/sfx/impactos/wood_hit_close_25.ogg +0 -0
  586. package/assets/sfx/impactos/wood_hit_close_26.ogg +0 -0
  587. package/assets/sfx/impactos/wood_hit_close_27.ogg +0 -0
  588. package/assets/sfx/itens-portas/backpack_open_shut_01.ogg +0 -0
  589. package/assets/sfx/itens-portas/backpack_open_shut_02.ogg +0 -0
  590. package/assets/sfx/itens-portas/backpack_open_shut_03.ogg +0 -0
  591. package/assets/sfx/itens-portas/backpack_open_shut_04.ogg +0 -0
  592. package/assets/sfx/itens-portas/backpack_open_shut_05.ogg +0 -0
  593. package/assets/sfx/itens-portas/backpack_open_shut_06.ogg +0 -0
  594. package/assets/sfx/itens-portas/book_open_shut_01.ogg +0 -0
  595. package/assets/sfx/itens-portas/book_open_shut_02.ogg +0 -0
  596. package/assets/sfx/itens-portas/book_open_shut_03.ogg +0 -0
  597. package/assets/sfx/itens-portas/book_open_shut_04.ogg +0 -0
  598. package/assets/sfx/itens-portas/book_open_shut_05.ogg +0 -0
  599. package/assets/sfx/itens-portas/book_open_shut_06.ogg +0 -0
  600. package/assets/sfx/itens-portas/book_open_shut_07.ogg +0 -0
  601. package/assets/sfx/itens-portas/book_open_shut_08.ogg +0 -0
  602. package/assets/sfx/itens-portas/book_open_shut_09.ogg +0 -0
  603. package/assets/sfx/itens-portas/book_open_shut_10.ogg +0 -0
  604. package/assets/sfx/itens-portas/book_open_shut_11.ogg +0 -0
  605. package/assets/sfx/itens-portas/door_creak_01.ogg +0 -0
  606. package/assets/sfx/itens-portas/door_creak_02.ogg +0 -0
  607. package/assets/sfx/itens-portas/door_creak_03.ogg +0 -0
  608. package/assets/sfx/itens-portas/door_creak_06.ogg +0 -0
  609. package/assets/sfx/itens-portas/door_creak_07.ogg +0 -0
  610. package/assets/sfx/itens-portas/door_glass_sliding_01.ogg +0 -0
  611. package/assets/sfx/itens-portas/door_glass_sliding_02.ogg +0 -0
  612. package/assets/sfx/itens-portas/door_glass_sliding_03.ogg +0 -0
  613. package/assets/sfx/itens-portas/door_glass_sliding_04.ogg +0 -0
  614. package/assets/sfx/itens-portas/door_knock_01.ogg +0 -0
  615. package/assets/sfx/itens-portas/door_lock_unlock_01.ogg +0 -0
  616. package/assets/sfx/itens-portas/door_lock_unlock_02.ogg +0 -0
  617. package/assets/sfx/itens-portas/door_lock_unlock_03.ogg +0 -0
  618. package/assets/sfx/itens-portas/door_lock_unlock_04.ogg +0 -0
  619. package/assets/sfx/itens-portas/door_lock_unlock_05.ogg +0 -0
  620. package/assets/sfx/itens-portas/door_lock_unlock_06.ogg +0 -0
  621. package/assets/sfx/itens-portas/door_lock_unlock_07.ogg +0 -0
  622. package/assets/sfx/itens-portas/door_lock_unlock_08.ogg +0 -0
  623. package/assets/sfx/itens-portas/door_lock_unlock_09.ogg +0 -0
  624. package/assets/sfx/itens-portas/door_lock_unlock_10.ogg +0 -0
  625. package/assets/sfx/itens-portas/door_lock_unlock_11.ogg +0 -0
  626. package/assets/sfx/itens-portas/door_locked_rattle_01.ogg +0 -0
  627. package/assets/sfx/itens-portas/door_locked_rattle_02.ogg +0 -0
  628. package/assets/sfx/itens-portas/door_locked_rattle_03.ogg +0 -0
  629. package/assets/sfx/itens-portas/door_metal_open_shut_01.ogg +0 -0
  630. package/assets/sfx/itens-portas/door_metal_open_shut_02.ogg +0 -0
  631. package/assets/sfx/itens-portas/door_metal_open_shut_03.ogg +0 -0
  632. package/assets/sfx/itens-portas/door_metal_open_shut_04.ogg +0 -0
  633. package/assets/sfx/itens-portas/door_metal_open_shut_05.ogg +0 -0
  634. package/assets/sfx/itens-portas/door_metal_open_shut_06.ogg +0 -0
  635. package/assets/sfx/itens-portas/door_metal_open_shut_07.ogg +0 -0
  636. package/assets/sfx/itens-portas/door_slam_wood_01.ogg +0 -0
  637. package/assets/sfx/itens-portas/door_slam_wood_02.ogg +0 -0
  638. package/assets/sfx/itens-portas/door_slam_wood_03.ogg +0 -0
  639. package/assets/sfx/itens-portas/door_slam_wood_04.ogg +0 -0
  640. package/assets/sfx/itens-portas/door_wood_open_01.ogg +0 -0
  641. package/assets/sfx/itens-portas/door_wood_open_02.ogg +0 -0
  642. package/assets/sfx/itens-portas/door_wood_open_03.ogg +0 -0
  643. package/assets/sfx/itens-portas/door_wood_open_04.ogg +0 -0
  644. package/assets/sfx/itens-portas/door_wood_shut_01.ogg +0 -0
  645. package/assets/sfx/itens-portas/door_wood_shut_02.ogg +0 -0
  646. package/assets/sfx/itens-portas/door_wood_shut_03.ogg +0 -0
  647. package/assets/sfx/itens-portas/door_wood_shut_04.ogg +0 -0
  648. package/assets/sfx/itens-portas/door_wood_shut_05.ogg +0 -0
  649. package/assets/sfx/itens-portas/door_wood_shut_06.ogg +0 -0
  650. package/assets/sfx/itens-portas/door_wood_shut_07.ogg +0 -0
  651. package/assets/sfx/itens-portas/door_wood_shut_08.ogg +0 -0
  652. package/assets/sfx/itens-portas/drawer_open_01.ogg +0 -0
  653. package/assets/sfx/itens-portas/drawer_open_02.ogg +0 -0
  654. package/assets/sfx/itens-portas/drawer_shut_01.ogg +0 -0
  655. package/assets/sfx/itens-portas/drawer_shut_02.ogg +0 -0
  656. package/assets/sfx/itens-portas/item_drop_bag_01.ogg +0 -0
  657. package/assets/sfx/itens-portas/item_drop_bag_02.ogg +0 -0
  658. package/assets/sfx/itens-portas/item_drop_glass_01.ogg +0 -0
  659. package/assets/sfx/itens-portas/item_drop_metal_01.ogg +0 -0
  660. package/assets/sfx/itens-portas/item_drop_metal_02.ogg +0 -0
  661. package/assets/sfx/itens-portas/item_drop_metal_03.ogg +0 -0
  662. package/assets/sfx/itens-portas/item_drop_metal_04.ogg +0 -0
  663. package/assets/sfx/itens-portas/item_drop_metal_05.ogg +0 -0
  664. package/assets/sfx/itens-portas/item_drop_paper_01.ogg +0 -0
  665. package/assets/sfx/itens-portas/item_pickup_coins_01.ogg +0 -0
  666. package/assets/sfx/itens-portas/item_pickup_coins_02.ogg +0 -0
  667. package/assets/sfx/itens-portas/item_pickup_generic_01.ogg +0 -0
  668. package/assets/sfx/itens-portas/item_pickup_generic_02.ogg +0 -0
  669. package/assets/sfx/itens-portas/item_pickup_generic_03.ogg +0 -0
  670. package/assets/sfx/itens-portas/item_pickup_generic_04.ogg +0 -0
  671. package/assets/sfx/itens-portas/item_pickup_leather_01.ogg +0 -0
  672. package/assets/sfx/itens-portas/item_pickup_leather_02.ogg +0 -0
  673. package/assets/sfx/itens-portas/item_pickup_leather_03.ogg +0 -0
  674. package/assets/sfx/itens-portas/item_pickup_leather_04.ogg +0 -0
  675. package/assets/sfx/itens-portas/item_pickup_leather_05.ogg +0 -0
  676. package/assets/sfx/itens-portas/item_setdown_01.ogg +0 -0
  677. package/assets/sfx/itens-portas/item_setdown_02.ogg +0 -0
  678. package/assets/sfx/itens-portas/keys_jingle_01.ogg +0 -0
  679. package/assets/sfx/itens-portas/keys_jingle_02.ogg +0 -0
  680. package/assets/sfx/itens-portas/keys_jingle_03.ogg +0 -0
  681. package/assets/sfx/itens-portas/keys_jingle_04.ogg +0 -0
  682. package/assets/sfx/itens-portas/keys_jingle_05.ogg +0 -0
  683. package/assets/sfx/itens-portas/keys_jingle_06.ogg +0 -0
  684. package/assets/sfx/itens-portas/keys_jingle_07.ogg +0 -0
  685. package/assets/sfx/itens-portas/lever_pull_01.ogg +0 -0
  686. package/assets/sfx/itens-portas/lever_pull_02.ogg +0 -0
  687. package/assets/sfx/itens-portas/lever_pull_03.ogg +0 -0
  688. package/assets/sfx/itens-portas/lever_pull_04.ogg +0 -0
  689. package/assets/sfx/itens-portas/lever_pull_05.ogg +0 -0
  690. package/assets/sfx/itens-portas/lever_pull_06.ogg +0 -0
  691. package/assets/sfx/itens-portas/metal_latch_01.ogg +0 -0
  692. package/assets/sfx/itens-portas/metal_latch_02.ogg +0 -0
  693. package/assets/sfx/itens-portas/plates_hit_01.ogg +0 -0
  694. package/assets/sfx/itens-portas/plates_hit_02.ogg +0 -0
  695. package/assets/sfx/itens-portas/plates_hit_03.ogg +0 -0
  696. package/assets/sfx/itens-portas/plates_hit_04.ogg +0 -0
  697. package/assets/sfx/itens-portas/plates_hit_05.ogg +0 -0
  698. package/assets/sfx/itens-portas/plates_hit_06.ogg +0 -0
  699. package/assets/sfx/itens-portas/plates_hit_07.ogg +0 -0
  700. package/assets/sfx/itens-portas/plates_hit_08.ogg +0 -0
  701. package/assets/sfx/itens-portas/plates_hit_09.ogg +0 -0
  702. package/assets/sfx/itens-portas/plates_hit_10.ogg +0 -0
  703. package/assets/sfx/itens-portas/plates_slide_01.ogg +0 -0
  704. package/assets/sfx/itens-portas/plates_slide_02.ogg +0 -0
  705. package/assets/sfx/itens-portas/plates_slide_03.ogg +0 -0
  706. package/assets/sfx/itens-portas/plates_slide_04.ogg +0 -0
  707. package/assets/sfx/itens-portas/saw_wood_01.ogg +0 -0
  708. package/assets/sfx/itens-portas/switch_click_01.ogg +0 -0
  709. package/assets/sfx/itens-portas/switch_click_02.ogg +0 -0
  710. package/assets/sfx/itens-portas/switch_click_03.ogg +0 -0
  711. package/assets/sfx/itens-portas/switch_click_04.ogg +0 -0
  712. package/assets/sfx/itens-portas/toilet_flush_01.ogg +0 -0
  713. package/assets/sfx/itens-portas/tools_handling_01.ogg +0 -0
  714. package/assets/sfx/itens-portas/tools_handling_02.ogg +0 -0
  715. package/assets/sfx/itens-portas/tools_handling_03.ogg +0 -0
  716. package/assets/sfx/itens-portas/tools_handling_04.ogg +0 -0
  717. package/assets/sfx/itens-portas/tools_handling_05.ogg +0 -0
  718. package/assets/sfx/itens-portas/tools_handling_06.ogg +0 -0
  719. package/assets/sfx/itens-portas/tools_handling_07.ogg +0 -0
  720. package/assets/sfx/itens-portas/tools_handling_08.ogg +0 -0
  721. package/assets/sfx/itens-portas/tools_handling_09.ogg +0 -0
  722. package/assets/sfx/itens-portas/tools_handling_10.ogg +0 -0
  723. package/assets/sfx/itens-portas/tools_handling_11.ogg +0 -0
  724. package/assets/sfx/itens-portas/tools_handling_12.ogg +0 -0
  725. package/assets/sfx/itens-portas/tools_handling_13.ogg +0 -0
  726. package/assets/sfx/itens-portas/tools_handling_14.ogg +0 -0
  727. package/assets/sfx/itens-portas/tools_handling_15.ogg +0 -0
  728. package/assets/sfx/itens-portas/tools_handling_16.ogg +0 -0
  729. package/assets/sfx/itens-portas/water_drip_01.ogg +0 -0
  730. package/assets/sfx/itens-portas/water_drip_02.ogg +0 -0
  731. package/assets/sfx/itens-portas/water_drip_03.ogg +0 -0
  732. package/assets/sfx/itens-portas/water_drip_04.ogg +0 -0
  733. package/assets/sfx/itens-portas/water_faucet_01.ogg +0 -0
  734. package/assets/sfx/itens-portas/water_faucet_02.ogg +0 -0
  735. package/assets/sfx/itens-portas/water_faucet_03.ogg +0 -0
  736. package/assets/sfx/itens-portas/water_faucet_04.ogg +0 -0
  737. package/assets/sfx/itens-portas/water_faucet_05.ogg +0 -0
  738. package/assets/sfx/itens-portas/water_faucet_06.ogg +0 -0
  739. package/assets/sfx/itens-portas/water_faucet_07.ogg +0 -0
  740. package/assets/sfx/itens-portas/water_faucet_08.ogg +0 -0
  741. package/assets/sfx/itens-portas/water_faucet_09.ogg +0 -0
  742. package/assets/sfx/itens-portas/water_faucet_10.ogg +0 -0
  743. package/assets/sfx/manifest.json +48 -0
  744. package/assets/sfx/personagem/axe_chop_01.ogg +0 -0
  745. package/assets/sfx/personagem/axe_chop_02.ogg +0 -0
  746. package/assets/sfx/personagem/blunt_hit_metal_01.ogg +0 -0
  747. package/assets/sfx/personagem/blunt_hit_metal_02.ogg +0 -0
  748. package/assets/sfx/personagem/blunt_hit_metal_03.ogg +0 -0
  749. package/assets/sfx/personagem/blunt_hit_metal_04.ogg +0 -0
  750. package/assets/sfx/personagem/blunt_hit_metal_05.ogg +0 -0
  751. package/assets/sfx/personagem/body_fall_01.ogg +0 -0
  752. package/assets/sfx/personagem/body_fall_02.ogg +0 -0
  753. package/assets/sfx/personagem/body_fall_03.ogg +0 -0
  754. package/assets/sfx/personagem/body_fall_04.ogg +0 -0
  755. package/assets/sfx/personagem/body_fall_05.ogg +0 -0
  756. package/assets/sfx/personagem/cloth_rustle_01.ogg +0 -0
  757. package/assets/sfx/personagem/cloth_rustle_02.ogg +0 -0
  758. package/assets/sfx/personagem/cloth_rustle_03.ogg +0 -0
  759. package/assets/sfx/personagem/cloth_rustle_04.ogg +0 -0
  760. package/assets/sfx/personagem/cloth_rustle_05.ogg +0 -0
  761. package/assets/sfx/personagem/cloth_rustle_06.ogg +0 -0
  762. package/assets/sfx/personagem/cloth_rustle_07.ogg +0 -0
  763. package/assets/sfx/personagem/cloth_rustle_08.ogg +0 -0
  764. package/assets/sfx/personagem/cloth_rustle_09.ogg +0 -0
  765. package/assets/sfx/personagem/cloth_rustle_10.ogg +0 -0
  766. package/assets/sfx/personagem/cloth_rustle_11.ogg +0 -0
  767. package/assets/sfx/personagem/cloth_rustle_12.ogg +0 -0
  768. package/assets/sfx/personagem/cloth_rustle_13.ogg +0 -0
  769. package/assets/sfx/personagem/cloth_rustle_14.ogg +0 -0
  770. package/assets/sfx/personagem/drink_gulp_01.ogg +0 -0
  771. package/assets/sfx/personagem/drink_gulp_02.ogg +0 -0
  772. package/assets/sfx/personagem/drink_gulp_03.ogg +0 -0
  773. package/assets/sfx/personagem/footstep_carpet_alt_01.ogg +0 -0
  774. package/assets/sfx/personagem/footstep_carpet_alt_02.ogg +0 -0
  775. package/assets/sfx/personagem/footstep_carpet_alt_03.ogg +0 -0
  776. package/assets/sfx/personagem/footstep_carpet_alt_04.ogg +0 -0
  777. package/assets/sfx/personagem/footstep_carpet_alt_05.ogg +0 -0
  778. package/assets/sfx/personagem/footstep_concrete_alt_01.ogg +0 -0
  779. package/assets/sfx/personagem/footstep_concrete_alt_02.ogg +0 -0
  780. package/assets/sfx/personagem/footstep_concrete_alt_03.ogg +0 -0
  781. package/assets/sfx/personagem/footstep_concrete_alt_04.ogg +0 -0
  782. package/assets/sfx/personagem/footstep_concrete_alt_05.ogg +0 -0
  783. package/assets/sfx/personagem/footstep_concrete_run_01.ogg +0 -0
  784. package/assets/sfx/personagem/footstep_concrete_run_02.ogg +0 -0
  785. package/assets/sfx/personagem/footstep_concrete_run_03.ogg +0 -0
  786. package/assets/sfx/personagem/footstep_concrete_run_04.ogg +0 -0
  787. package/assets/sfx/personagem/footstep_concrete_run_05.ogg +0 -0
  788. package/assets/sfx/personagem/footstep_concrete_walk_01.ogg +0 -0
  789. package/assets/sfx/personagem/footstep_concrete_walk_02.ogg +0 -0
  790. package/assets/sfx/personagem/footstep_concrete_walk_03.ogg +0 -0
  791. package/assets/sfx/personagem/footstep_concrete_walk_04.ogg +0 -0
  792. package/assets/sfx/personagem/footstep_concrete_walk_05.ogg +0 -0
  793. package/assets/sfx/personagem/footstep_dirt_run_01.ogg +0 -0
  794. package/assets/sfx/personagem/footstep_dirt_run_02.ogg +0 -0
  795. package/assets/sfx/personagem/footstep_dirt_run_03.ogg +0 -0
  796. package/assets/sfx/personagem/footstep_dirt_run_04.ogg +0 -0
  797. package/assets/sfx/personagem/footstep_dirt_run_05.ogg +0 -0
  798. package/assets/sfx/personagem/footstep_dirt_walk_01.ogg +0 -0
  799. package/assets/sfx/personagem/footstep_dirt_walk_02.ogg +0 -0
  800. package/assets/sfx/personagem/footstep_dirt_walk_03.ogg +0 -0
  801. package/assets/sfx/personagem/footstep_dirt_walk_04.ogg +0 -0
  802. package/assets/sfx/personagem/footstep_dirt_walk_05.ogg +0 -0
  803. package/assets/sfx/personagem/footstep_generic_alt_01.ogg +0 -0
  804. package/assets/sfx/personagem/footstep_generic_alt_02.ogg +0 -0
  805. package/assets/sfx/personagem/footstep_generic_alt_03.ogg +0 -0
  806. package/assets/sfx/personagem/footstep_generic_alt_04.ogg +0 -0
  807. package/assets/sfx/personagem/footstep_generic_alt_05.ogg +0 -0
  808. package/assets/sfx/personagem/footstep_generic_alt_06.ogg +0 -0
  809. package/assets/sfx/personagem/footstep_generic_alt_07.ogg +0 -0
  810. package/assets/sfx/personagem/footstep_generic_alt_08.ogg +0 -0
  811. package/assets/sfx/personagem/footstep_generic_alt_09.ogg +0 -0
  812. package/assets/sfx/personagem/footstep_generic_alt_10.ogg +0 -0
  813. package/assets/sfx/personagem/footstep_grass_alt2_01.ogg +0 -0
  814. package/assets/sfx/personagem/footstep_grass_alt2_02.ogg +0 -0
  815. package/assets/sfx/personagem/footstep_grass_alt2_03.ogg +0 -0
  816. package/assets/sfx/personagem/footstep_grass_alt2_04.ogg +0 -0
  817. package/assets/sfx/personagem/footstep_grass_alt_01.ogg +0 -0
  818. package/assets/sfx/personagem/footstep_grass_alt_02.ogg +0 -0
  819. package/assets/sfx/personagem/footstep_grass_alt_03.ogg +0 -0
  820. package/assets/sfx/personagem/footstep_grass_alt_04.ogg +0 -0
  821. package/assets/sfx/personagem/footstep_grass_alt_05.ogg +0 -0
  822. package/assets/sfx/personagem/footstep_grass_run_01.ogg +0 -0
  823. package/assets/sfx/personagem/footstep_grass_run_02.ogg +0 -0
  824. package/assets/sfx/personagem/footstep_grass_run_03.ogg +0 -0
  825. package/assets/sfx/personagem/footstep_grass_run_04.ogg +0 -0
  826. package/assets/sfx/personagem/footstep_grass_run_05.ogg +0 -0
  827. package/assets/sfx/personagem/footstep_grass_walk_01.ogg +0 -0
  828. package/assets/sfx/personagem/footstep_grass_walk_02.ogg +0 -0
  829. package/assets/sfx/personagem/footstep_grass_walk_03.ogg +0 -0
  830. package/assets/sfx/personagem/footstep_grass_walk_04.ogg +0 -0
  831. package/assets/sfx/personagem/footstep_grass_walk_05.ogg +0 -0
  832. package/assets/sfx/personagem/footstep_hard_alt_01.ogg +0 -0
  833. package/assets/sfx/personagem/footstep_hard_alt_02.ogg +0 -0
  834. package/assets/sfx/personagem/footstep_hard_alt_03.ogg +0 -0
  835. package/assets/sfx/personagem/footstep_hard_alt_04.ogg +0 -0
  836. package/assets/sfx/personagem/footstep_hard_alt_05.ogg +0 -0
  837. package/assets/sfx/personagem/footstep_hard_alt_06.ogg +0 -0
  838. package/assets/sfx/personagem/footstep_hard_alt_07.ogg +0 -0
  839. package/assets/sfx/personagem/footstep_hard_alt_08.ogg +0 -0
  840. package/assets/sfx/personagem/footstep_hard_alt_09.ogg +0 -0
  841. package/assets/sfx/personagem/footstep_metal_run_01.ogg +0 -0
  842. package/assets/sfx/personagem/footstep_metal_run_02.ogg +0 -0
  843. package/assets/sfx/personagem/footstep_metal_run_03.ogg +0 -0
  844. package/assets/sfx/personagem/footstep_metal_run_04.ogg +0 -0
  845. package/assets/sfx/personagem/footstep_metal_run_05.ogg +0 -0
  846. package/assets/sfx/personagem/footstep_metal_walk_01.ogg +0 -0
  847. package/assets/sfx/personagem/footstep_metal_walk_02.ogg +0 -0
  848. package/assets/sfx/personagem/footstep_metal_walk_03.ogg +0 -0
  849. package/assets/sfx/personagem/footstep_metal_walk_04.ogg +0 -0
  850. package/assets/sfx/personagem/footstep_metal_walk_05.ogg +0 -0
  851. package/assets/sfx/personagem/footstep_snow_alt_01.ogg +0 -0
  852. package/assets/sfx/personagem/footstep_snow_alt_02.ogg +0 -0
  853. package/assets/sfx/personagem/footstep_snow_alt_03.ogg +0 -0
  854. package/assets/sfx/personagem/footstep_snow_alt_04.ogg +0 -0
  855. package/assets/sfx/personagem/footstep_snow_alt_05.ogg +0 -0
  856. package/assets/sfx/personagem/footstep_snow_run_01.ogg +0 -0
  857. package/assets/sfx/personagem/footstep_snow_run_02.ogg +0 -0
  858. package/assets/sfx/personagem/footstep_snow_run_03.ogg +0 -0
  859. package/assets/sfx/personagem/footstep_snow_run_04.ogg +0 -0
  860. package/assets/sfx/personagem/footstep_snow_run_05.ogg +0 -0
  861. package/assets/sfx/personagem/footstep_snow_walk_01.ogg +0 -0
  862. package/assets/sfx/personagem/footstep_snow_walk_02.ogg +0 -0
  863. package/assets/sfx/personagem/footstep_snow_walk_03.ogg +0 -0
  864. package/assets/sfx/personagem/footstep_snow_walk_04.ogg +0 -0
  865. package/assets/sfx/personagem/footstep_snow_walk_05.ogg +0 -0
  866. package/assets/sfx/personagem/footstep_wood_alt_01.ogg +0 -0
  867. package/assets/sfx/personagem/footstep_wood_alt_02.ogg +0 -0
  868. package/assets/sfx/personagem/footstep_wood_alt_03.ogg +0 -0
  869. package/assets/sfx/personagem/footstep_wood_alt_04.ogg +0 -0
  870. package/assets/sfx/personagem/footstep_wood_alt_05.ogg +0 -0
  871. package/assets/sfx/personagem/footstep_wood_run_01.ogg +0 -0
  872. package/assets/sfx/personagem/footstep_wood_run_02.ogg +0 -0
  873. package/assets/sfx/personagem/footstep_wood_run_03.ogg +0 -0
  874. package/assets/sfx/personagem/footstep_wood_run_04.ogg +0 -0
  875. package/assets/sfx/personagem/footstep_wood_run_05.ogg +0 -0
  876. package/assets/sfx/personagem/footstep_wood_walk_01.ogg +0 -0
  877. package/assets/sfx/personagem/footstep_wood_walk_02.ogg +0 -0
  878. package/assets/sfx/personagem/footstep_wood_walk_03.ogg +0 -0
  879. package/assets/sfx/personagem/footstep_wood_walk_04.ogg +0 -0
  880. package/assets/sfx/personagem/footstep_wood_walk_05.ogg +0 -0
  881. package/assets/sfx/personagem/frying_pan_hit_01.ogg +0 -0
  882. package/assets/sfx/personagem/frying_pan_hit_02.ogg +0 -0
  883. package/assets/sfx/personagem/frying_pan_hit_03.ogg +0 -0
  884. package/assets/sfx/personagem/grab_01.ogg +0 -0
  885. package/assets/sfx/personagem/kick_hit_01.ogg +0 -0
  886. package/assets/sfx/personagem/kick_hit_02.ogg +0 -0
  887. package/assets/sfx/personagem/kick_hit_03.ogg +0 -0
  888. package/assets/sfx/personagem/kick_hit_04.ogg +0 -0
  889. package/assets/sfx/personagem/kick_hit_05.ogg +0 -0
  890. package/assets/sfx/personagem/knife_draw_01.ogg +0 -0
  891. package/assets/sfx/personagem/knife_draw_02.ogg +0 -0
  892. package/assets/sfx/personagem/knife_draw_03.ogg +0 -0
  893. package/assets/sfx/personagem/knife_scrape_01.ogg +0 -0
  894. package/assets/sfx/personagem/knife_slash_01.ogg +0 -0
  895. package/assets/sfx/personagem/knife_slash_02.ogg +0 -0
  896. package/assets/sfx/personagem/land_concrete_01.ogg +0 -0
  897. package/assets/sfx/personagem/land_concrete_02.ogg +0 -0
  898. package/assets/sfx/personagem/land_dirt_01.ogg +0 -0
  899. package/assets/sfx/personagem/land_dirt_02.ogg +0 -0
  900. package/assets/sfx/personagem/land_grass_01.ogg +0 -0
  901. package/assets/sfx/personagem/land_grass_02.ogg +0 -0
  902. package/assets/sfx/personagem/land_metal_01.ogg +0 -0
  903. package/assets/sfx/personagem/land_metal_02.ogg +0 -0
  904. package/assets/sfx/personagem/land_snow_01.ogg +0 -0
  905. package/assets/sfx/personagem/land_snow_02.ogg +0 -0
  906. package/assets/sfx/personagem/land_wood_01.ogg +0 -0
  907. package/assets/sfx/personagem/land_wood_02.ogg +0 -0
  908. package/assets/sfx/personagem/player_breath_run_01.ogg +0 -0
  909. package/assets/sfx/personagem/player_breath_run_02.ogg +0 -0
  910. package/assets/sfx/personagem/player_breath_run_03.ogg +0 -0
  911. package/assets/sfx/personagem/player_breath_run_04.ogg +0 -0
  912. package/assets/sfx/personagem/player_breath_run_05.ogg +0 -0
  913. package/assets/sfx/personagem/player_death_female_01.ogg +0 -0
  914. package/assets/sfx/personagem/player_death_female_02.ogg +0 -0
  915. package/assets/sfx/personagem/player_death_female_03.ogg +0 -0
  916. package/assets/sfx/personagem/player_death_female_04.ogg +0 -0
  917. package/assets/sfx/personagem/player_death_female_05.ogg +0 -0
  918. package/assets/sfx/personagem/player_death_female_06.ogg +0 -0
  919. package/assets/sfx/personagem/player_death_female_07.ogg +0 -0
  920. package/assets/sfx/personagem/player_death_female_08.ogg +0 -0
  921. package/assets/sfx/personagem/player_death_male_01.ogg +0 -0
  922. package/assets/sfx/personagem/player_death_male_02.ogg +0 -0
  923. package/assets/sfx/personagem/player_death_male_03.ogg +0 -0
  924. package/assets/sfx/personagem/player_death_male_04.ogg +0 -0
  925. package/assets/sfx/personagem/player_death_male_05.ogg +0 -0
  926. package/assets/sfx/personagem/player_death_male_06.ogg +0 -0
  927. package/assets/sfx/personagem/player_death_male_07.ogg +0 -0
  928. package/assets/sfx/personagem/player_death_male_08.ogg +0 -0
  929. package/assets/sfx/personagem/player_effort_01.ogg +0 -0
  930. package/assets/sfx/personagem/player_effort_02.ogg +0 -0
  931. package/assets/sfx/personagem/player_effort_03.ogg +0 -0
  932. package/assets/sfx/personagem/player_effort_04.ogg +0 -0
  933. package/assets/sfx/personagem/player_hurt_female_01.ogg +0 -0
  934. package/assets/sfx/personagem/player_hurt_female_02.ogg +0 -0
  935. package/assets/sfx/personagem/player_hurt_female_03.ogg +0 -0
  936. package/assets/sfx/personagem/player_hurt_female_04.ogg +0 -0
  937. package/assets/sfx/personagem/player_hurt_female_05.ogg +0 -0
  938. package/assets/sfx/personagem/player_hurt_female_06.ogg +0 -0
  939. package/assets/sfx/personagem/player_hurt_male_01.ogg +0 -0
  940. package/assets/sfx/personagem/player_hurt_male_02.ogg +0 -0
  941. package/assets/sfx/personagem/player_hurt_male_03.ogg +0 -0
  942. package/assets/sfx/personagem/player_hurt_male_04.ogg +0 -0
  943. package/assets/sfx/personagem/player_hurt_male_05.ogg +0 -0
  944. package/assets/sfx/personagem/player_hurt_male_06.ogg +0 -0
  945. package/assets/sfx/personagem/punch_hit_alt_01.ogg +0 -0
  946. package/assets/sfx/personagem/punch_hit_alt_02.ogg +0 -0
  947. package/assets/sfx/personagem/punch_hit_alt_03.ogg +0 -0
  948. package/assets/sfx/personagem/punch_hit_alt_04.ogg +0 -0
  949. package/assets/sfx/personagem/punch_hit_alt_05.ogg +0 -0
  950. package/assets/sfx/personagem/punch_hit_alt_06.ogg +0 -0
  951. package/assets/sfx/personagem/punch_hit_alt_07.ogg +0 -0
  952. package/assets/sfx/personagem/punch_hit_alt_08.ogg +0 -0
  953. package/assets/sfx/personagem/punch_hit_alt_09.ogg +0 -0
  954. package/assets/sfx/personagem/punch_hit_alt_10.ogg +0 -0
  955. package/assets/sfx/personagem/punch_hit_body_01.ogg +0 -0
  956. package/assets/sfx/personagem/punch_hit_body_02.ogg +0 -0
  957. package/assets/sfx/personagem/punch_hit_body_03.ogg +0 -0
  958. package/assets/sfx/personagem/punch_hit_body_04.ogg +0 -0
  959. package/assets/sfx/personagem/punch_hit_body_05.ogg +0 -0
  960. package/assets/sfx/personagem/punch_hit_body_06.ogg +0 -0
  961. package/assets/sfx/personagem/punch_hit_face_01.ogg +0 -0
  962. package/assets/sfx/personagem/punch_hit_face_02.ogg +0 -0
  963. package/assets/sfx/personagem/punch_hit_face_03.ogg +0 -0
  964. package/assets/sfx/personagem/punch_hit_face_04.ogg +0 -0
  965. package/assets/sfx/personagem/punch_hit_face_05.ogg +0 -0
  966. package/assets/sfx/personagem/punch_swing_01.ogg +0 -0
  967. package/assets/sfx/personagem/punch_swing_02.ogg +0 -0
  968. package/assets/sfx/personagem/punch_swing_03.ogg +0 -0
  969. package/assets/sfx/personagem/punch_swing_04.ogg +0 -0
  970. package/assets/sfx/personagem/punch_swing_05.ogg +0 -0
  971. package/assets/sfx/personagem/punch_swing_06.ogg +0 -0
  972. package/assets/sfx/personagem/punch_swing_07.ogg +0 -0
  973. package/assets/sfx/personagem/punch_swing_08.ogg +0 -0
  974. package/assets/sfx/personagem/scream_01.ogg +0 -0
  975. package/assets/sfx/personagem/scream_02.ogg +0 -0
  976. package/assets/sfx/personagem/scream_03.ogg +0 -0
  977. package/assets/sfx/personagem/scream_04.ogg +0 -0
  978. package/assets/sfx/personagem/slap_01.ogg +0 -0
  979. package/assets/sfx/personagem/swing_whoosh_alt_01.ogg +0 -0
  980. package/assets/sfx/personagem/swing_whoosh_alt_02.ogg +0 -0
  981. package/assets/sfx/personagem/swing_whoosh_alt_03.ogg +0 -0
  982. package/assets/sfx/personagem/swing_whoosh_alt_04.ogg +0 -0
  983. package/assets/sfx/personagem/swing_whoosh_alt_05.ogg +0 -0
  984. package/assets/sfx/personagem/swing_whoosh_alt_06.ogg +0 -0
  985. package/assets/sfx/personagem/swing_whoosh_alt_07.ogg +0 -0
  986. package/assets/sfx/personagem/swing_whoosh_alt_08.ogg +0 -0
  987. package/assets/sfx/personagem/swing_whoosh_alt_09.ogg +0 -0
  988. package/assets/sfx/personagem/swing_whoosh_alt_10.ogg +0 -0
  989. package/assets/sfx/personagem/swing_whoosh_alt_11.ogg +0 -0
  990. package/assets/sfx/personagem/swing_whoosh_alt_12.ogg +0 -0
  991. package/assets/sfx/personagem/swing_whoosh_alt_13.ogg +0 -0
  992. package/assets/sfx/personagem/swing_whoosh_alt_14.ogg +0 -0
  993. package/assets/sfx/personagem/swing_whoosh_alt_15.ogg +0 -0
  994. package/assets/sfx/personagem/swing_whoosh_alt_16.ogg +0 -0
  995. package/assets/sfx/personagem/swing_whoosh_alt_17.ogg +0 -0
  996. package/assets/sfx/personagem/swing_whoosh_alt_18.ogg +0 -0
  997. package/assets/sfx/personagem/swing_whoosh_alt_19.ogg +0 -0
  998. package/assets/sfx/personagem/swing_whoosh_alt_20.ogg +0 -0
  999. package/assets/sfx/personagem/swing_whoosh_alt_21.ogg +0 -0
  1000. package/assets/sfx/personagem/swing_whoosh_alt_22.ogg +0 -0
  1001. package/assets/sfx/personagem/swing_whoosh_alt_23.ogg +0 -0
  1002. package/assets/sfx/personagem/swing_whoosh_alt_24.ogg +0 -0
  1003. package/assets/sfx/personagem/swing_whoosh_alt_25.ogg +0 -0
  1004. package/assets/sfx/personagem/swing_whoosh_alt_26.ogg +0 -0
  1005. package/assets/sfx/personagem/swing_whoosh_alt_27.ogg +0 -0
  1006. package/assets/sfx/personagem/swing_whoosh_alt_28.ogg +0 -0
  1007. package/assets/sfx/personagem/swing_whoosh_alt_29.ogg +0 -0
  1008. package/assets/sfx/personagem/swing_whoosh_alt_30.ogg +0 -0
  1009. package/assets/sfx/personagem/swing_whoosh_alt_31.ogg +0 -0
  1010. package/assets/sfx/personagem/swing_whoosh_alt_32.ogg +0 -0
  1011. package/assets/sfx/personagem/swing_whoosh_alt_33.ogg +0 -0
  1012. package/assets/sfx/personagem/swing_whoosh_alt_34.ogg +0 -0
  1013. package/assets/sfx/personagem/swing_whoosh_alt_35.ogg +0 -0
  1014. package/assets/sfx/personagem/swing_whoosh_alt_36.ogg +0 -0
  1015. package/assets/sfx/personagem/swing_whoosh_alt_37.ogg +0 -0
  1016. package/assets/sfx/personagem/swing_whoosh_alt_38.ogg +0 -0
  1017. package/assets/sfx/personagem/swing_whoosh_alt_39.ogg +0 -0
  1018. package/assets/sfx/personagem/swing_whoosh_alt_40.ogg +0 -0
  1019. package/assets/sfx/personagem/swing_whoosh_alt_41.ogg +0 -0
  1020. package/assets/sfx/personagem/swing_whoosh_alt_42.ogg +0 -0
  1021. package/assets/sfx/personagem/swing_whoosh_alt_43.ogg +0 -0
  1022. package/assets/sfx/personagem/zombie_creature_01.ogg +0 -0
  1023. package/assets/sfx/personagem/zombie_creature_02.ogg +0 -0
  1024. package/assets/sfx/personagem/zombie_creature_03.ogg +0 -0
  1025. package/assets/sfx/personagem/zombie_death_01.ogg +0 -0
  1026. package/assets/sfx/personagem/zombie_death_02.ogg +0 -0
  1027. package/assets/sfx/personagem/zombie_death_03.ogg +0 -0
  1028. package/assets/sfx/personagem/zombie_death_04.ogg +0 -0
  1029. package/assets/sfx/personagem/zombie_death_05.ogg +0 -0
  1030. package/assets/sfx/personagem/zombie_death_06.ogg +0 -0
  1031. package/assets/sfx/personagem/zombie_death_07.ogg +0 -0
  1032. package/assets/sfx/personagem/zombie_death_08.ogg +0 -0
  1033. package/assets/sfx/personagem/zombie_groan_01.ogg +0 -0
  1034. package/assets/sfx/personagem/zombie_groan_02.ogg +0 -0
  1035. package/assets/sfx/personagem/zombie_groan_03.ogg +0 -0
  1036. package/assets/sfx/personagem/zombie_groan_04.ogg +0 -0
  1037. package/assets/sfx/personagem/zombie_groan_05.ogg +0 -0
  1038. package/assets/sfx/personagem/zombie_groan_06.ogg +0 -0
  1039. package/assets/sfx/personagem/zombie_groan_07.ogg +0 -0
  1040. package/assets/sfx/personagem/zombie_groan_08.ogg +0 -0
  1041. package/assets/sfx/personagem/zombie_groan_09.ogg +0 -0
  1042. package/assets/sfx/personagem/zombie_groan_10.ogg +0 -0
  1043. package/assets/sfx/personagem/zombie_groan_11.ogg +0 -0
  1044. package/assets/sfx/veiculos/car_door_open_01.ogg +0 -0
  1045. package/assets/sfx/veiculos/car_door_shut_01.ogg +0 -0
  1046. package/assets/sfx/veiculos/car_gear_shift_01.ogg +0 -0
  1047. package/assets/sfx/veiculos/car_trunk_shut_01.ogg +0 -0
  1048. package/assets/sfx/veiculos/car_window_01.ogg +0 -0
  1049. package/assets/sfx/veiculos/car_window_02.ogg +0 -0
  1050. package/assets/sfx/veiculos/engine_loop_car_high_01.ogg +0 -0
  1051. package/assets/sfx/veiculos/engine_loop_car_idle_01.ogg +0 -0
  1052. package/assets/sfx/veiculos/engine_start_run_stop_01.ogg +0 -0
  1053. package/assets/sfx/veiculos/engine_start_run_stop_02.ogg +0 -0
  1054. package/dist/bank-Dsj1VAht.d.ts +391 -0
  1055. package/dist/chunk-JV5XXCQE.js +180 -0
  1056. package/dist/chunk-JV5XXCQE.js.map +1 -0
  1057. package/dist/{chunk-C2K7XN2K.js → chunk-UUWKSG4J.js} +36 -165
  1058. package/dist/chunk-UUWKSG4J.js.map +1 -0
  1059. package/dist/fitted.d.ts +89 -0
  1060. package/dist/fitted.js +139 -0
  1061. package/dist/fitted.js.map +1 -0
  1062. package/dist/index.d.ts +28 -3
  1063. package/dist/index.global.js +106 -4
  1064. package/dist/index.global.js.map +1 -1
  1065. package/dist/index.js +80 -13
  1066. package/dist/index.js.map +1 -1
  1067. package/dist/{locale-BJMhMT0G.d.ts → locale-YHyJwN2P.d.ts} +104 -482
  1068. package/dist/testing.d.ts +3 -2
  1069. package/dist/testing.js +2 -1
  1070. package/package.json +6 -2
  1071. package/dist/chunk-C2K7XN2K.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/local-pack-loader.ts","../src/recipes/scene.ts","../src/library/cabin.ts","../src/library/radio.ts","../src/recipes/foley.ts","../src/recipes/body-foley.ts","../src/webaudio/sink.ts"],"sourcesContent":["/**\n * Puts a local sound pack on an engine without touching the frame a sound is played in. Each id's files are fetched and decoded in idle time\n * (one id per idle slot), once per url (the engine's sample store shares buffers between ids and voices). Until they decode, the id plays what it\n * played before (the SDK's recording, else its synthesized recipe); once they do, the id is swapped to the files. The choice is made once, when the\n * files load: a file that fails leaves the id on the SDK's sound for good, so `play` never fetches or decodes anything.\n */\nimport type { LocalPackSampleOptions, LocalSoundPack } from './local-pack'\nimport { isShippableLicense, localPackSamples } from './local-pack'\nimport type { SampleSound } from './recipe'\nimport type { AudioEngine } from './webaudio/engine'\n\nexport const LOCAL_PACK_BANK_ID = 'local_sound_pack'\nconst STAGING_PREFIX = 'local_pack_staging:'\n\n/** `pending` while loading, `file` once the pack's files play, `fallback` when they failed and the SDK's sound stays, `sdk` when the entry prefers the SDK recording and there is one. */\nexport type LocalPackStatus = 'pending' | 'file' | 'fallback' | 'sdk'\n\nexport type LocalPackReport = {\n readonly file: readonly string[]\n /** Ids that kept the SDK recording by preference (their files were not fetched). */\n readonly sdk: readonly string[]\n readonly fallback: readonly { readonly id: string; readonly error: string }[]\n}\n\n/** Runs a task when the page is idle; returns a cancel function. */\nexport type IdleScheduler = (task: () => void) => () => void\n\ntype IdleWindow = { requestIdleCallback?: (task: () => void) => number; cancelIdleCallback?: (handle: number) => void }\n\n/** `requestIdleCallback` where there is one, else the next macrotask. */\nexport const defaultIdleScheduler: IdleScheduler = (task) => {\n const idle = globalThis as IdleWindow\n if (idle.requestIdleCallback && idle.cancelIdleCallback) {\n const handle = idle.requestIdleCallback(task)\n const cancel = idle.cancelIdleCallback\n return () => cancel(handle)\n }\n const handle = setTimeout(task, 0)\n return () => clearTimeout(handle)\n}\n\nexport type ApplyLocalSoundPackOptions = LocalPackSampleOptions & {\n readonly schedule?: IdleScheduler\n}\n\nexport type LocalPackHandle = {\n /** Resolves when every id has loaded or fallen back. */\n readonly done: Promise<LocalPackReport>\n status(id: string): LocalPackStatus | undefined\n /** The ids playing a pack file whose licence is not CC0 / CC-BY. */\n unlicensed(): readonly string[]\n /** Stops loading and gives every swapped id back the sound it had before. */\n dispose(): void\n}\n\ntype Engine = Pick<AudioEngine, 'registry' | 'register' | 'loadSamples'>\n\nexport function applyLocalSoundPack(engine: Engine, pack: LocalSoundPack, options: ApplyLocalSoundPackOptions = {}): LocalPackHandle {\n const schedule = options.schedule ?? defaultIdleScheduler\n const samples = localPackSamples(pack, options)\n const statuses = new Map<string, LocalPackStatus>(samples.map((sample) => [sample.id, 'pending']))\n const priors = new Map<string, { readonly sample?: SampleSound; readonly bank?: string }>()\n const report: { file: string[]; sdk: string[]; fallback: { id: string; error: string }[] } = { file: [], sdk: [], fallback: [] }\n const queue = [...samples]\n let cancel: (() => void) | undefined\n let disposed = false\n let finish: (value: LocalPackReport) => void = () => undefined\n const done = new Promise<LocalPackReport>((resolve) => {\n finish = resolve\n })\n\n const swapIn = (sample: SampleSound): void => {\n const prior = engine.registry.sample(sample.id)\n const bank = engine.registry.bankOf(sample.id)\n priors.set(sample.id, { ...(prior ? { sample: prior } : {}), ...(bank ? { bank } : {}) })\n engine.register({ id: LOCAL_PACK_BANK_ID, samples: [{ ...sample, ...(prior?.fallback ? { fallback: prior.fallback } : {}) }] })\n statuses.set(sample.id, 'file')\n report.file.push(sample.id)\n }\n\n const loadOne = async (sample: SampleSound): Promise<void> => {\n // decided when the id's turn comes, so the SDK's own bank (registered while the page loads) is already there\n if (pack.sounds[sample.id]?.prefer === 'sdk' && engine.registry.sample(sample.id)) {\n statuses.set(sample.id, 'sdk')\n report.sdk.push(sample.id)\n return\n }\n const staging = `${STAGING_PREFIX}${sample.id}`\n engine.register({ id: LOCAL_PACK_BANK_ID, samples: [{ ...sample, id: staging }] })\n const loaded = await engine.loadSamples([staging])\n engine.registry.removeSample(staging)\n if (disposed) return\n if (loaded.failed.length === 0) return swapIn(sample)\n statuses.set(sample.id, 'fallback')\n report.fallback.push({ id: sample.id, error: loaded.failed.map((entry) => `${entry.url}: ${entry.error}`).join('; ') })\n }\n\n const next = (): void => {\n const sample = queue.shift()\n if (!sample || disposed) {\n if (!disposed) finish(report)\n return\n }\n void loadOne(sample).finally(() => {\n if (!disposed) cancel = schedule(next)\n })\n }\n cancel = schedule(next)\n\n return {\n done,\n status: (id) => statuses.get(id),\n unlicensed: () => samples.filter((sample) => statuses.get(sample.id) === 'file' && !isShippableLicense(sample.license)).map((sample) => sample.id),\n dispose() {\n disposed = true\n cancel?.()\n for (const [id, prior] of priors) {\n if (prior.sample) engine.register({ id: prior.bank ?? LOCAL_PACK_BANK_ID, samples: [prior.sample] })\n else engine.registry.removeSample(id)\n }\n priors.clear()\n finish(report)\n },\n }\n}\n","// The art scene's synthesis primitives (cena L1322-L1328) as recipe layers, shared by every subject bank that ports a `sfx.*` of the page: the\n// materials in `destruction-three`, the voices and wounds in `characters-three`. Each helper writes the layer the team routine builds, with its\n// fields in the order the routine draws its random numbers, so a recipe built from them leaves the trace of the team code.\nimport { DISTANCE_CURVES } from '../falloff'\nimport type { BusId, Envelope, Layer, ParamRef, Range, SoundRecipe } from '../recipe'\n\nconst ATTACK = 0.002\n\n/** A length in seconds: a number, a `[min, max]` range or a named number. */\nexport type SceneLength = number | readonly [number, number] | ParamRef\n\n// the layer is `attack + d` long (the art scene's gain rises over `a` and falls over `d`)\nfunction lengthOf(d: SceneLength, attack: number): Range {\n if (typeof d === 'number') return attack + d\n if (Array.isArray(d)) return [attack + d[0], attack + d[1]] as const\n return { ...(d as ParamRef), add: ((d as ParamRef).add ?? 0) + attack }\n}\n\nconst envelope = (attack: number): Envelope => [\n [0, 0.0001, 'set', 'fixed'],\n [attack, 1, 'exp'],\n ['1d', 0.0001, 'exp', 'fixed'],\n]\n\nexport type SceneNoise = {\n readonly type?: BiquadFilterType\n readonly f: Range\n /** The filter slides here over `d` (needs a fixed `d`). */\n readonly f2?: number\n readonly q?: number\n readonly a?: number\n readonly d: SceneLength\n readonly vol: Range\n readonly wet?: number\n readonly delay?: Range\n}\n\n/** `sNoise` (cena L1323): noise from a random point, a filter (default lowpass, Q 0.7), the gain rising over `a` and falling over `d`. */\nexport function sceneNoise(o: SceneNoise): Layer {\n const a = o.a ?? ATTACK\n const over = typeof o.d === 'number' ? o.d : 0\n return {\n filters: {\n mode: 'serial',\n bank: [{ type: o.type ?? 'lowpass', frequency: o.f2 === undefined ? { set: o.f } : { set: o.f, to: o.f2, curve: 'exp', over }, q: o.q ?? 0.7 }],\n },\n duration: lengthOf(o.d, a),\n gain: o.vol,\n ...(o.delay === undefined ? {} : { at: o.delay }),\n ...(o.wet === undefined ? {} : { wet: o.wet }),\n source: { kind: 'noise', offset: 'random', offsetScale: 1.5, loop: true },\n envelope: envelope(a),\n }\n}\n\nexport type SceneTone = { readonly wave?: OscillatorType; readonly f: Range; readonly f2?: number; readonly d: SceneLength; readonly vol: Range; readonly wet?: number; readonly delay?: Range }\n\n/** `sTone` (cena L1324): an oscillator sliding from `f` to `f2` (back to `f` when none), the gain rising over 0.002 s and falling over `d`. */\nexport function sceneTone(o: SceneTone): Layer {\n return {\n source: { kind: 'osc', wave: o.wave ?? 'sine', frequency: { from: o.f, to: o.f2 ?? 'from', curve: 'exp', over: 'duration' } },\n duration: lengthOf(o.d, ATTACK),\n gain: o.vol,\n ...(o.delay === undefined ? {} : { at: o.delay }),\n ...(o.wet === undefined ? {} : { wet: o.wet }),\n envelope: envelope(ATTACK),\n }\n}\n\nexport type SceneVoice = {\n /** Start and end frequency of the sweep (the page ramps linearly from `f0` to `f1` over the length). */\n readonly f0: Range\n readonly f1: Range\n /** Length in seconds. */\n readonly d: SceneLength\n /** Centre of the first and second formant (Q 4 and 6) and of the breath band (Q 1.1). */\n readonly fA: Range\n readonly fB: Range\n /** Level of the breath noise. */\n readonly noise: Range\n readonly vol: Range\n readonly wave?: OscillatorType\n}\n\n/**\n * `voice` (cena L1325): an oscillator swept from `f0` to `f1` with a vibrato of 4 to 10 Hz (depth 0.08 of `f0`) through two formant bands plus a band of\n * breath noise, summed and boosted 3.2 times, the gain rising over 0.1 s, held to 0.6 of the length and falling; reverb send 0.45. It is the one\n * layer the page builds with `voice(...)`, so a scream is two of them.\n */\nexport function sceneVoice(o: SceneVoice): Layer {\n return {\n duration: lengthOf(o.d, 0),\n gain: o.vol,\n wet: 0.45,\n source: {\n kind: 'formant_voice',\n wave: o.wave ?? 'sawtooth',\n frequency: { from: o.f0, to: o.f1, curve: 'linear', over: 'duration' },\n vibrato: { rate: [4, 10], depth: 0.08 },\n formants: [\n { frequency: o.fA, q: 4 },\n { frequency: o.fB, q: 6 },\n ],\n breath: { frequency: o.fB, q: 1.1, gain: o.noise },\n mix: 3.2,\n },\n envelope: [\n [0, 0.0001, 'set', 'fixed'],\n [0.1, 1, 'exp'],\n ['0.6d', 1, 'set'],\n ['1d', 0.0001, 'exp', 'fixed'],\n ],\n }\n}\n\n/** The layer played `count` times (a team `for` loop whose body draws numbers): each pass is its own layer, so the draws stay in the loop's order. */\nexport const sceneMany = (count: number, make: () => Layer): Layer[] => Array.from({ length: count }, make)\n\nexport type SceneRecipeOptions = {\n /** Named numbers drawn first (`PlayOptions.params` can override them). */\n readonly vars?: SoundRecipe['vars']\n readonly bus?: BusId\n readonly group?: string\n}\n\n/** A recipe in the art scene's mix: positional with the art scene's curve (`vol / (1 + d² × 0.008)`) and pan; `line` is the team code it comes from (`cena:<line>`). */\nexport function sceneRecipe(id: string, layers: readonly Layer[], line: string, options: SceneRecipeOptions = {}): SoundRecipe {\n return {\n id,\n bus: options.bus ?? 'world',\n pan: true,\n layers,\n falloff: DISTANCE_CURVES.art_scene,\n ...(options.vars ? { vars: options.vars } : {}),\n ...(options.group ? { group: options.group } : {}),\n sources: [`cena:${line}`],\n }\n}\n","// The sounds of a vehicle's cabin and body switches (the turn signal relay, the starter, the alarm, the wipers, the belt chime, the lock chirp). Like the\n// library's horn, they live here until the vehicles package has a bank of its own (Q12). Synthesized; no recording.\nimport type { SoundBank, SoundRecipe } from '../recipe'\n\nexport const CABIN_SOUNDS: readonly SoundRecipe[] = [\n {\n id: 'blinker_tick',\n bus: 'world',\n duration: 0.03,\n layers: [\n // the relay: a click of bright noise and a short low knock\n { source: { kind: 'noise', offset: 'random' }, filters: { mode: 'serial', bank: [{ type: 'highpass', frequency: { set: 2600 } }] }, envelope: [[0, 0.22, 'set'], [0.025, 0.0001, 'exp', 'fixed']] },\n { source: { kind: 'osc', wave: 'triangle', frequency: { set: 180 } }, envelope: [[0, 0.12, 'set'], [0.03, 0.0001, 'exp', 'fixed']] },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'starter_crank',\n bus: 'world',\n duration: 0.9,\n layers: [\n // the starter motor turning the engine over: low noise chopped at the compression strokes\n {\n source: { kind: 'noise', offset: 'random' },\n filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 420 } }] },\n modulators: [{ target: 'gain', wave: 'square', rate: 11, depth: 0.08, base: 0.1 }],\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.05, 0.25, 'linear'], [0.8, 0.22, 'set'], [0.9, 0.0001, 'exp', 'fixed']],\n },\n { source: { kind: 'osc', wave: 'sawtooth', frequency: { set: 95, to: 120, curve: 'linear', over: 0.9 } }, filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 300 } }] }, envelope: [[0, 0.04, 'set'], [0.9, 0.0001, 'exp', 'fixed']] },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'car_alarm',\n bus: 'world',\n order: 'siren',\n duration: 3,\n tail: 0.1,\n layers: [\n // the whoop of a car alarm: a square swept up and down three times a second\n {\n source: { kind: 'osc', wave: 'square', frequency: { set: 1100 } },\n modulators: [{ target: 'frequency', wave: 'triangle', rate: 3, depth: 420 }],\n filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 2600 } }] },\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.05, 0.05, 'linear'], [2.9, 0.05, 'set'], [3, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'alarm_chirp',\n bus: 'world',\n duration: 0.1,\n layers: [{ source: { kind: 'osc', wave: 'square', frequency: { set: 2300 } }, repeat: { count: 2, spacing: 0.16 }, envelope: [[0, 0.05, 'set'], [0.09, 0.0001, 'exp', 'fixed']] }],\n falloff: { model: 'none' },\n },\n {\n id: 'wiper_swish',\n bus: 'world',\n duration: 0.45,\n layers: [\n {\n source: { kind: 'noise', offset: 'random' },\n filters: { mode: 'serial', bank: [{ type: 'bandpass', frequency: { set: 700, to: 1100, curve: 'linear', over: 0.45 }, q: 1.2 }] },\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.2, 0.06, 'linear'], [0.45, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'seatbelt_chime',\n bus: 'world',\n duration: 0.5,\n layers: [{ source: { kind: 'osc', wave: 'sine', frequency: { set: 880 } }, repeat: { count: 3, spacing: 0.7 }, envelope: [[0, 0.06, 'set'], [0.5, 0.0001, 'exp', 'fixed']] }],\n falloff: { model: 'none' },\n },\n {\n // the parking sensor: a short high beep, repeated by the cabin faster as the obstacle comes close\n id: 'parking_beep',\n bus: 'world',\n duration: 0.09,\n layers: [{ source: { kind: 'osc', wave: 'sine', frequency: { set: 2300 } }, envelope: [[0, 0.07, 'set'], [0.08, 0.0001, 'exp', 'fixed']] }],\n falloff: { model: 'none' },\n },\n] as unknown as readonly SoundRecipe[]\n\nexport const CABIN_BANK: SoundBank = { id: 'vehicle_cabin', sounds: CABIN_SOUNDS, loops: [] }\n","// Music for a car radio or tape: three short original loops synthesized from notes (a bass, a chord pad and a melody per bar), so a cabin can pick a\n// track without any recording. Each bar is one recipe whose note layers start at their beat; the cabin plays the bars in turn, so switching the\n// radio off stops the music at the end of the bar.\nimport type { SoundBank, SoundRecipe } from '../recipe'\n\ntype Note = readonly [beat: number, midi: number, beats: number]\ntype TrackSpec = { id: string; bpm: number; bars: number; wave: 'sine' | 'triangle' | 'square' | 'sawtooth'; bass: readonly Note[]; chords: readonly Note[]; melody: readonly Note[] }\n\nconst hz = (midi: number): number => 440 * 2 ** ((midi - 69) / 12)\n\nconst layer = (note: Note, beat: number, wave: string, level: number): object => {\n const [at, midi, beats] = note\n const length = beats * beat\n return {\n at: at * beat,\n duration: length,\n source: { kind: 'osc', wave, frequency: { set: hz(midi) } },\n envelope: [[0, 0.0001, 'set'], [0.01, level, 'linear'], [Math.max(0.02, length * 0.9), level * 0.35, 'linear'], [length, 0.0001, 'exp', 'fixed']],\n }\n}\n\n/** A song of the radio: the ids of its bars in order and the seconds of one bar. */\nexport type RadioSong = { readonly id: string; readonly barSeconds: number; readonly bars: readonly string[] }\n\n/** One song cut in bars: every note a layer at its beat inside its bar. */\nexport function radioTrack(spec: TrackSpec): { song: RadioSong; recipes: SoundRecipe[] } {\n const beat = 60 / spec.bpm\n const recipes = Array.from({ length: spec.bars }, (_, bar): SoundRecipe => {\n const inBar = (notes: readonly Note[]): Note[] => notes.filter((n) => n[0] >= bar * 4 && n[0] < bar * 4 + 4).map((n): Note => [n[0] - bar * 4, n[1], n[2]])\n const layers = [\n ...inBar(spec.bass).map((n) => layer(n, beat, 'triangle', 0.16)),\n ...inBar(spec.chords).map((n) => layer(n, beat, 'sine', 0.05)),\n ...inBar(spec.melody).map((n) => layer(n, beat, spec.wave, 0.07)),\n ]\n return { id: `${spec.id}_${bar}`, bus: 'world', duration: 4 * beat, layers, falloff: { model: 'none' } } as unknown as SoundRecipe\n })\n return { song: { id: spec.id, barSeconds: 4 * beat, bars: recipes.map((r) => (r as unknown as { id: string }).id) }, recipes }\n}\n\n// a bar of a chord: root, third and fifth held the four beats\nconst chord = (bar: number, root: number, minor = false): Note[] => [[bar * 4, root, 4], [bar * 4, root + (minor ? 3 : 4), 4], [bar * 4, root + 7, 4]]\nconst bassLine = (roots: readonly number[], pattern: readonly number[]): Note[] => roots.flatMap((root, bar) => pattern.map((b): Note => [bar * 4 + b, root - 12, 0.9]))\n\nconst TRACKS = [\n // a bright pop loop: I–V–vi–IV in C\n radioTrack({\n id: 'radio_track_pop',\n bpm: 112,\n bars: 4,\n wave: 'square',\n bass: bassLine([48, 55, 57, 53], [0, 1.5, 2, 3]),\n chords: [...chord(0, 60), ...chord(1, 55), ...chord(2, 57, true), ...chord(3, 53)],\n 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]],\n }),\n // a syncopated loop in A minor, the bass on the off-beats\n radioTrack({\n id: 'radio_track_groove',\n bpm: 100,\n bars: 4,\n wave: 'triangle',\n bass: bassLine([57, 62, 64, 57], [0, 0.75, 1.5, 2.5, 3.25]),\n chords: [...chord(0, 57, true), ...chord(1, 62, true), ...chord(2, 64), ...chord(3, 57, true)],\n 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]],\n }),\n // a slow blues-like loop in F with a swung melody\n radioTrack({\n id: 'radio_track_slow',\n bpm: 76,\n bars: 4,\n wave: 'sine',\n bass: bassLine([53, 58, 53, 60], [0, 2]),\n chords: [...chord(0, 65), ...chord(1, 58), ...chord(2, 65), ...chord(3, 60)],\n 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]],\n }),\n]\n\n/** The songs a cabin steps through. */\nexport const RADIO_TRACKS: readonly RadioSong[] = TRACKS.map((t) => t.song)\nexport const RADIO_BANK: SoundBank = { id: 'vehicle_radio', sounds: TRACKS.flatMap((t) => t.recipes), loops: [] }\n","// Foley of the hand: items picked up, opened, drunk and eaten, and the doors, lids and drawers of furniture and vehicles. Synthesised stand-ins under the\n// ids of the sound list (`sons/checklist-sons.md` 5.7 and the car doors of 5.6), so a recorded take filed under the same id replaces the recipe without\n// touching the code that plays it. Every recipe draws its numbers from ranges (pitch about ±4 %, timing and level), so no two plays are the same, and\n// falls off faster than a gunshot and loses its highs with distance: a latch is a near sound.\nimport type { Falloff, Layer, SoundBank, SoundRecipe } from '../recipe'\nimport { sceneMany as many, sceneNoise as noise, sceneTone as tone } from './scene'\n\n/** Small sounds of the hand: `vol / (1 + d² × 0.02)`, lowpass cutoffs `/ (1 + d × 0.04)`, silent below 0.004 (a latch at 10 m is a third, at 50 m gone). */\nexport const FOLEY_FALLOFF: Falloff = {\n model: 'inverse_square',\n k: 0.02,\n cutoffK: 0.04,\n minGain: 0.004,\n}\n\n/** ±`pct` around `f`: the range a recipe draws a frequency from. */\nconst vary = (f: number, pct = 0.04): readonly [number, number] => [Math.round(f * (1 - pct)), Math.round(f * (1 + pct))]\n\nconst foley = (id: string, layers: readonly Layer[], note: string): SoundRecipe => ({\n id,\n bus: 'world',\n pan: true,\n layers,\n falloff: FOLEY_FALLOFF,\n sources: [`sdk: ${note}`],\n})\n\n/** The click of a latch or a catch: a short band of noise and a tick of metal. */\nconst click = (f: number, vol: number, delay: readonly [number, number] | number = 0): Layer[] => [\n noise({\n type: 'bandpass',\n f: vary(f, 0.08),\n q: 4,\n d: [0.018, 0.03],\n vol: [vol * 0.85, vol * 1.1],\n delay,\n }),\n tone({\n f: vary(f * 0.8, 0.06),\n f2: Math.round(f * 0.62),\n d: [0.015, 0.025],\n vol: vol * 0.18,\n delay,\n }),\n]\n\n/** A leaf meeting its frame: the body (a falling tone), the board or panel (a band of noise) and the latch catching right after. */\nconst meet = (body: number, panel: number, vol: number, latch: number): Layer[] => [\n tone({\n f: vary(body),\n f2: Math.round(body * 0.5),\n d: [0.12, 0.16],\n vol: [vol * 0.9, vol * 1.1],\n }),\n noise({\n type: 'bandpass',\n f: vary(panel, 0.06),\n q: 1.2,\n d: [0.08, 0.12],\n vol: [vol * 0.9, vol * 1.1],\n wet: 0.25,\n }),\n ...click(latch, vol * 0.45, [0.012, 0.028]),\n]\n\n/** The doors and lids of furniture and vehicles, by what the leaf is (the room picks one from the item, else from the leaf's material). */\nexport const LEAF_FOLEY: readonly SoundRecipe[] = [\n // a wooden house door or wardrobe door: latch, a short creak, the leaf on the frame (the hard slam adds the frame rattling)\n foley('door_wood_open', click(2400, 0.4), 'the latch of a wooden door giving'),\n foley(\n 'door_creak',\n [\n tone({ f: [190, 240], f2: 310, d: [0.4, 0.55], vol: [0.04, 0.06] }),\n noise({\n type: 'bandpass',\n f: [480, 560],\n q: 6,\n a: 0.05,\n d: [0.35, 0.5],\n vol: [0.1, 0.14],\n }),\n ],\n 'a wooden hinge turning',\n ),\n foley('door_wood_close', meet(120, 600, 0.55, 2400), 'a wooden leaf meeting its frame'),\n foley(\n 'door_wood_slam',\n [\n ...meet(110, 560, 0.85, 2300),\n ...many(3, () =>\n noise({\n type: 'bandpass',\n f: [900, 1500],\n q: 3,\n d: 0.03,\n vol: [0.08, 0.14],\n delay: [0.05, 0.18],\n }),\n ),\n ],\n 'a wooden door slammed: the frame and the hinges rattle after the hit',\n ),\n // a metal door or gate: a hollow panel that rings a little\n foley('door_metal_open_close', [...meet(160, 900, 0.55, 2000), tone({ f: vary(1250), f2: 1150, d: [0.1, 0.16], vol: 0.06, wet: 0.3 })], 'a metal door or gate meeting its frame'),\n foley(\n 'door_creak_metal',\n [\n tone({ f: [620, 760], f2: 900, d: [0.3, 0.4], vol: [0.03, 0.045] }),\n noise({\n type: 'bandpass',\n f: [1300, 1500],\n q: 8,\n a: 0.04,\n d: [0.25, 0.35],\n vol: [0.07, 0.09],\n }),\n ],\n 'a metal hinge turning',\n ),\n // the handle of a locked door shaken: the latch knocking in its keeper, five to seven times in half a second\n foley(\n 'door_locked_rattle',\n [\n ...many(6, () =>\n noise({\n type: 'bandpass',\n f: [1600, 2600],\n q: 3,\n d: [0.025, 0.04],\n vol: [0.22, 0.34],\n delay: [0, 0.45],\n }),\n ),\n ...many(3, () =>\n tone({\n f: [170, 210],\n f2: 120,\n d: 0.05,\n vol: [0.12, 0.18],\n delay: [0.02, 0.4],\n }),\n ),\n ],\n 'the handle of a locked door shaken: latch knocks and the leaf thumping in its frame',\n ),\n // a fridge: the rubber seal lets go with a soft suck, the bottles in the door clink; closing it is a soft thump and the seal pulling shut\n foley(\n 'fridge_open',\n [\n noise({\n type: 'lowpass',\n f: [320, 380],\n a: 0.03,\n d: [0.14, 0.2],\n vol: [0.32, 0.4],\n }),\n noise({\n type: 'bandpass',\n f: [800, 950],\n f2: 1400,\n q: 2,\n a: 0.02,\n d: 0.12,\n vol: [0.08, 0.12],\n }),\n ...many(2, () =>\n tone({\n f: [2600, 4200],\n d: [0.04, 0.08],\n vol: [0.015, 0.03],\n delay: [0.08, 0.22],\n }),\n ),\n ],\n 'a fridge door: the seal letting go and the bottles in the door',\n ),\n foley(\n 'fridge_close',\n [\n tone({ f: vary(85), f2: 45, d: [0.1, 0.13], vol: [0.38, 0.46] }),\n noise({\n type: 'lowpass',\n f: [520, 620],\n d: [0.08, 0.12],\n vol: [0.3, 0.36],\n }),\n noise({\n type: 'lowpass',\n f: [260, 320],\n a: 0.02,\n d: 0.1,\n vol: [0.12, 0.18],\n delay: [0.04, 0.07],\n }),\n ...many(2, () =>\n tone({\n f: [2600, 4200],\n d: [0.04, 0.07],\n vol: [0.015, 0.03],\n delay: [0.03, 0.12],\n }),\n ),\n ],\n 'a fridge door shut: a soft thump, the seal pulling and the bottles',\n ),\n // a microwave: the spring catch of the door, plastic on plastic\n foley(\n 'microwave_open',\n [\n ...click(1800, 0.34),\n tone({\n f: [3000, 3400],\n f2: 2800,\n d: 0.05,\n vol: 0.025,\n delay: [0.01, 0.02],\n }),\n ],\n 'the spring catch of a microwave door',\n ),\n foley(\n 'microwave_close',\n [\n noise({\n type: 'bandpass',\n f: [1200, 1450],\n q: 2.5,\n d: [0.04, 0.06],\n vol: [0.36, 0.44],\n }),\n tone({ f: vary(180), f2: 120, d: 0.05, vol: [0.16, 0.22] }),\n ...click(2200, 0.2, [0.008, 0.016]),\n ],\n 'a microwave door clacking shut',\n ),\n foley('microwave_beep', [tone({ wave: 'square', f: 2000, d: 0.12, vol: 0.05 })], 'the beep of a microwave'),\n // drawers and sliding leaves: the runners, then the stop\n foley(\n 'drawer_open',\n [\n noise({\n type: 'bandpass',\n f: [620, 780],\n q: 2,\n a: 0.04,\n d: [0.28, 0.36],\n vol: [0.18, 0.24],\n }),\n noise({ type: 'bandpass', f: [2000, 2400], q: 5, d: 0.28, vol: 0.04 }),\n ...click(1400, 0.16, [0.28, 0.34]),\n ],\n 'a drawer on its runners and its stop',\n ),\n foley(\n 'drawer_close',\n [\n noise({\n type: 'bandpass',\n f: [620, 780],\n q: 2,\n a: 0.03,\n d: [0.2, 0.28],\n vol: [0.18, 0.24],\n }),\n tone({\n f: vary(150),\n f2: 90,\n d: 0.08,\n vol: [0.22, 0.3],\n delay: [0.2, 0.26],\n }),\n ],\n 'a drawer pushed home',\n ),\n]\n\n/** What the hand does with an item: picking it up by what it is made of, throwing it, and the uses (opening, drinking, eating, first aid). */\nexport const ITEM_FOLEY: readonly SoundRecipe[] = [\n // the hand closing on the item: a touch of skin and cloth, then the item's own small sound\n foley(\n 'item_pickup_metal',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n tone({\n f: [1900, 2600],\n f2: 1700,\n d: [0.05, 0.08],\n vol: [0.06, 0.09],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a metal thing',\n ),\n foley(\n 'item_pickup_plastic',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n noise({\n type: 'bandpass',\n f: [1500, 1900],\n q: 3,\n d: 0.03,\n vol: [0.15, 0.21],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a plastic thing',\n ),\n foley(\n 'item_pickup_glass',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.15 }),\n tone({\n f: [3200, 4200],\n d: [0.05, 0.08],\n vol: [0.038, 0.06],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a glass thing',\n ),\n foley(\n 'item_pickup_paper',\n [\n noise({\n type: 'highpass',\n f: [2600, 3400],\n a: 0.01,\n d: [0.1, 0.14],\n vol: [0.12, 0.18],\n }),\n noise({ type: 'bandpass', f: [800, 1000], q: 1, d: 0.05, vol: 0.12 }),\n ],\n 'picking up paper or cardboard',\n ),\n foley(\n 'item_pickup_fabric',\n [\n noise({\n type: 'bandpass',\n f: [900, 1300],\n q: 0.8,\n a: 0.02,\n d: [0.12, 0.16],\n vol: [0.15, 0.21],\n }),\n ],\n 'picking up cloth',\n ),\n foley(\n 'item_pickup_wood',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n noise({\n type: 'bandpass',\n f: [900, 1100],\n q: 2,\n d: 0.04,\n vol: [0.15, 0.21],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a wooden thing',\n ),\n foley(\n 'item_pickup_food',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n noise({\n type: 'lowpass',\n f: [500, 650],\n d: 0.05,\n vol: 0.12,\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up food',\n ),\n foley(\n 'item_throw',\n [\n noise({\n type: 'bandpass',\n f: [450, 650],\n f2: 1400,\n q: 1.5,\n a: 0.05,\n d: 0.18,\n vol: [0.1, 0.14],\n }),\n ],\n 'the arm throwing something: air',\n ),\n // a can: the tab cracks, the gas hisses out; drinking is gulps; crushing it crumples the sheet\n foley(\n 'can_open',\n [\n ...click(3200, 0.36),\n noise({\n type: 'highpass',\n f: [3600, 4400],\n a: 0.005,\n d: [0.22, 0.3],\n vol: [0.16, 0.22],\n delay: [0.012, 0.02],\n }),\n ...many(5, () => tone({ f: [4000, 7000], d: 0.02, vol: 0.01, delay: [0.05, 0.4] })),\n ],\n 'the tab of a can and the gas hissing out',\n ),\n foley(\n 'can_crush',\n [\n noise({\n type: 'bandpass',\n f: [1600, 2200],\n q: 1.2,\n d: [0.18, 0.25],\n vol: [0.3, 0.38],\n }),\n ...many(6, () =>\n tone({\n f: [1200, 3400],\n f2: 900,\n d: 0.03,\n vol: [0.03, 0.06],\n delay: [0, 0.2],\n }),\n ),\n ],\n 'a can crushed in the hand',\n ),\n foley(\n 'can_puncture_spray',\n [\n noise({\n type: 'highpass',\n f: [2400, 3000],\n a: 0.005,\n d: [0.5, 0.7],\n vol: [0.2, 0.26],\n }),\n noise({ type: 'bandpass', f: [600, 800], q: 2, d: 0.4, vol: 0.06 }),\n ],\n 'a can holed: the jet hissing out',\n ),\n foley(\n 'bottle_open',\n [\n ...many(5, () =>\n noise({\n type: 'bandpass',\n f: [2200, 3000],\n q: 4,\n d: 0.008,\n vol: [0.1, 0.16],\n delay: [0, 0.18],\n }),\n ),\n noise({\n type: 'highpass',\n f: 3800,\n a: 0.005,\n d: 0.12,\n vol: [0.06, 0.1],\n delay: [0.18, 0.22],\n }),\n ],\n 'the screw cap of a bottle turning off',\n ),\n foley(\n 'drink_gulp',\n [\n noise({\n type: 'lowpass',\n f: [280, 360],\n a: 0.02,\n d: [0.1, 0.14],\n vol: [0.24, 0.3],\n }),\n tone({ f: [140, 170], f2: 85, d: [0.08, 0.11], vol: [0.12, 0.16] }),\n ],\n 'a gulp',\n ),\n foley(\n 'eat_crunch',\n [\n ...many(4, () =>\n noise({\n type: 'bandpass',\n f: [1800, 3200],\n q: 1.5,\n d: [0.02, 0.04],\n vol: [0.12, 0.2],\n delay: [0, 0.12],\n }),\n ),\n ],\n 'a bite of something crunchy',\n ),\n foley(\n 'eat_chew',\n [\n noise({\n type: 'lowpass',\n f: [450, 600],\n a: 0.03,\n d: [0.1, 0.14],\n vol: [0.12, 0.16],\n }),\n noise({\n type: 'bandpass',\n f: [1100, 1400],\n q: 2,\n d: 0.04,\n vol: 0.04,\n delay: [0.03, 0.06],\n }),\n ],\n 'chewing',\n ),\n foley(\n 'bandage_wrap',\n [\n noise({\n type: 'bandpass',\n f: [1400, 1800],\n f2: 2400,\n q: 1,\n a: 0.04,\n d: [0.3, 0.4],\n vol: [0.12, 0.16],\n }),\n ],\n 'a bandage unrolled round a limb',\n ),\n foley(\n 'pills_shake',\n [\n ...many(8, () =>\n tone({\n f: [2400, 3600],\n d: 0.015,\n vol: [0.03, 0.05],\n delay: [0, 0.25],\n }),\n ),\n noise({ type: 'bandpass', f: [1500, 1900], q: 2, d: 0.25, vol: 0.05 }),\n ],\n 'pills shaken in their bottle',\n ),\n foley(\n 'medkit_use',\n [\n ...click(1700, 0.24),\n noise({\n type: 'bandpass',\n f: [1000, 1400],\n q: 1,\n a: 0.03,\n d: [0.25, 0.32],\n vol: [0.08, 0.12],\n delay: [0.05, 0.08],\n }),\n ],\n 'a first aid kit opened and rummaged',\n ),\n foley('flashlight_click', click(2600, 0.3), 'the switch of a flashlight'),\n]\n\n/** The foley bank: register it in the engine (`engine.register(FOLEY_BANK)`). */\nexport const FOLEY_BANK: SoundBank = {\n id: 'foley',\n sounds: [...LEAF_FOLEY, ...ITEM_FOLEY],\n}\n\n/** What a picked-up item sounds like, by its heaviest material class. */\nexport const PICKUP_CLASSES = ['metal', 'plastic', 'glass', 'paper', 'fabric', 'wood', 'food'] as const\nexport type PickupClass = (typeof PICKUP_CLASSES)[number]\n\n/** The sound set of a leaf worked by hand: the ids it plays at the latch, while it turns, and as it meets the frame (gently, and slammed). */\nexport type LeafFoley = {\n readonly open: string\n readonly turn?: string\n readonly close: string\n readonly slam?: string\n readonly locked: string\n}\n\n/** The leaf sound sets the kit ships, by name; an item names one (`TestableItem.sounds.leaves`), else the room picks `wood_door` or `metal_door` by the leaf's material. */\nexport const LEAF_FOLEY_SETS: Readonly<Record<string, LeafFoley>> = {\n wood_door: {\n open: 'door_wood_open',\n turn: 'door_creak',\n close: 'door_wood_close',\n slam: 'door_wood_slam',\n locked: 'door_locked_rattle',\n },\n metal_door: {\n open: 'door_wood_open',\n turn: 'door_creak_metal',\n close: 'door_metal_open_close',\n locked: 'door_locked_rattle',\n },\n fridge: {\n open: 'fridge_open',\n close: 'fridge_close',\n locked: 'door_locked_rattle',\n },\n microwave: {\n open: 'microwave_open',\n close: 'microwave_close',\n locked: 'door_locked_rattle',\n },\n drawer: {\n open: 'drawer_open',\n close: 'drawer_close',\n locked: 'door_locked_rattle',\n },\n}\n","// The sounds of a body: footsteps by surface and gait, landings, the swing and the hit of each blow, hurt, bite and grab. Synthesised in the meantime\n// (the kit has no recorded take of these yet): each id is a set of four takes, with the numbers of each take apart, so the same action never\n// sounds twice the same. A recorded take replaces a variant by its id (`register` a bank with the same recipe id) without touching who plays it.\n//\n// How each one is built (what the ear picks first):\n// - a footstep is the heel (a low thump, how hollow the floor is) and then the roll to the toe (the surface's own texture: the grit of concrete,\n// the crunch of gravel, the ring of a metal sheet, the splash of water); a run hits harder, brighter and shorter, heel and toe almost together;\n// - a landing is the whole body's weight on the surface: a deeper thump, the surface texture longer, the clothes after;\n// - a swing is air: a band of noise sweeping up while the limb or the tool speeds up, loudest just before the contact, so it is started early\n// (`SWING_LEAD_SECONDS` of game-contracts) and the contact sound follows it;\n// - a hit on a body is skin (a slap), mass (a thud) and, for a blade, a wet tear; on an object it is only the striking part (knuckles, sole, steel)\n// and the material's own impact plays beside it.\nimport {\n BODY_SOUND_IDS,\n FOOTSTEP_SOUND_IDS,\n GAIT_IDS,\n LAND_SOUND_IDS,\n LANDING_IDS,\n SURFACE_IDS,\n SWING_LEAD_SECONDS,\n footstepSoundId,\n} from '@adatechnology/game-contracts'\nimport type { BlowId, BodySoundId, GaitId, LandingId, SurfaceId } from '@adatechnology/game-contracts'\n\nimport type { Falloff, Layer, SoundBank, SoundRecipe, SoundSet } from '../recipe'\nimport { sceneNoise, sceneTone, sceneVoice } from './scene'\n\n/** Takes per id. */\nexport const BODY_FOLEY_TAKES = 4\n\n/** How each take differs from the first: frequency factor, timing factor and level factor (fixed numbers, so takes are really apart). */\nconst TAKES: readonly { readonly f: number; readonly t: number; readonly v: number }[] = [\n { f: 1, t: 1, v: 1 },\n { f: 1.08, t: 0.9, v: 0.92 },\n { f: 0.93, t: 1.12, v: 1.05 },\n { f: 1.03, t: 1.05, v: 0.88 },\n]\n\n\n/** Footsteps fade fast with distance and lose their top: a step 10 m away is a quarter of the level, 30 m a few percent, and duller. */\nexport const FOOTSTEP_FALLOFF: Falloff = { model: 'inverse_square', k: 0.03, cutoffK: 0.03, minGain: 0.004 }\n/** Blows and body sounds carry further than a step. */\nexport const BODY_FALLOFF: Falloff = { model: 'inverse_square', k: 0.012, cutoffK: 0.015, minGain: 0.004 }\n\ntype Take = (typeof TAKES)[number]\n\n/** What a surface sounds like under a foot: the heel's thump and the texture of the roll. */\ntype SurfaceVoice = {\n /** The heel: thump pitch (Hz), its length (s) and level. */\n readonly heel: { readonly f: number; readonly d: number; readonly vol: number }\n /** The roll to the toe and the scuff: a filtered noise. */\n readonly roll: { readonly type: BiquadFilterType; readonly f: number; readonly q: number; readonly d: number; readonly vol: number }\n /** Grit, crunch or drips: short bursts spread after the heel. */\n readonly grains?: { readonly count: number; readonly f: number; readonly q: number; readonly spread: number; readonly vol: number }\n /** A ring of the floor itself (a hollow board, a metal sheet). */\n readonly ring?: readonly { readonly f: number; readonly d: number; readonly vol: number }[]\n /** Water: a sweep of the splash band. */\n readonly splash?: { readonly f: number; readonly f2: number; readonly d: number; readonly vol: number }\n}\n\nconst SURFACES: Readonly<Record<SurfaceId, SurfaceVoice>> = {\n concrete: { heel: { f: 95, d: 0.05, vol: 0.55 }, roll: { type: 'bandpass', f: 2300, q: 1.1, d: 0.05, vol: 0.38 }, grains: { count: 2, f: 4200, q: 2, spread: 0.04, vol: 0.08 } },\n asphalt: { heel: { f: 90, d: 0.05, vol: 0.5 }, roll: { type: 'bandpass', f: 1700, q: 0.9, d: 0.06, vol: 0.36 }, grains: { count: 4, f: 3600, q: 2.5, spread: 0.06, vol: 0.1 } },\n wood: { heel: { f: 130, d: 0.08, vol: 0.55 }, roll: { type: 'lowpass', f: 1300, q: 0.8, d: 0.06, vol: 0.3 }, ring: [{ f: 210, d: 0.1, vol: 0.18 }, { f: 470, d: 0.06, vol: 0.06 }] },\n tile: { heel: { f: 110, d: 0.04, vol: 0.45 }, roll: { type: 'bandpass', f: 3600, q: 2, d: 0.03, vol: 0.42 }, ring: [{ f: 1900, d: 0.03, vol: 0.05 }] },\n dirt: { heel: { f: 75, d: 0.06, vol: 0.45 }, roll: { type: 'lowpass', f: 750, q: 0.7, d: 0.09, vol: 0.4 }, grains: { count: 3, f: 1800, q: 1.5, spread: 0.07, vol: 0.06 } },\n grass: { heel: { f: 70, d: 0.05, vol: 0.32 }, roll: { type: 'highpass', f: 2600, q: 0.7, d: 0.13, vol: 0.28 }, grains: { count: 4, f: 5200, q: 1.2, spread: 0.1, vol: 0.07 } },\n gravel: { heel: { f: 80, d: 0.05, vol: 0.4 }, roll: { type: 'lowpass', f: 950, q: 0.8, d: 0.1, vol: 0.3 }, grains: { count: 8, f: 2600, q: 3, spread: 0.13, vol: 0.2 } },\n sand: { heel: { f: 65, d: 0.06, vol: 0.3 }, roll: { type: 'bandpass', f: 1500, q: 0.6, d: 0.16, vol: 0.3 }, grains: { count: 5, f: 4800, q: 1.5, spread: 0.12, vol: 0.05 } },\n metal: { heel: { f: 120, d: 0.05, vol: 0.5 }, roll: { type: 'bandpass', f: 2800, q: 1.5, d: 0.03, vol: 0.25 }, ring: [{ f: 420, d: 0.25, vol: 0.16 }, { f: 1130, d: 0.18, vol: 0.09 }, { f: 2470, d: 0.1, vol: 0.04 }] },\n water: { heel: { f: 70, d: 0.04, vol: 0.25 }, roll: { type: 'bandpass', f: 3000, q: 1.2, d: 0.1, vol: 0.18 }, splash: { f: 1100, f2: 380, d: 0.22, vol: 0.55 }, grains: { count: 4, f: 2400, q: 6, spread: 0.18, vol: 0.12 } },\n glass: { heel: { f: 90, d: 0.04, vol: 0.4 }, roll: { type: 'highpass', f: 4500, q: 0.8, d: 0.06, vol: 0.2 }, grains: { count: 9, f: 6200, q: 5, spread: 0.12, vol: 0.22 }, ring: [{ f: 3900, d: 0.04, vol: 0.04 }, { f: 5300, d: 0.03, vol: 0.03 }] },\n carpet: { heel: { f: 70, d: 0.05, vol: 0.32 }, roll: { type: 'lowpass', f: 420, q: 0.7, d: 0.07, vol: 0.3 } },\n}\n\nconst GAITS: Readonly<Record<GaitId, { readonly vol: number; readonly bright: number; readonly toe: number; readonly short: number }>> = {\n walk: { vol: 1, bright: 1, toe: 0.075, short: 1 },\n run: { vol: 1.35, bright: 1.25, toe: 0.035, short: 0.75 },\n}\n\nconst grainLayers = (g: NonNullable<SurfaceVoice['grains']>, take: Take, start: number, scale: number): Layer[] =>\n Array.from({ length: g.count }, (_, i) =>\n sceneNoise({ type: 'bandpass', f: [g.f * take.f * 0.85, g.f * take.f * 1.15], q: g.q, d: [0.008, 0.02], vol: g.vol * scale * take.v, delay: start + ((i + 0.5) / g.count) * g.spread * take.t }),\n )\n\nconst ringLayers = (rings: NonNullable<SurfaceVoice['ring']>, take: Take, scale: number, at = 0): Layer[] =>\n rings.map((r) => sceneTone({ f: r.f * take.f, d: r.d * take.t, vol: r.vol * scale * take.v, delay: at }))\n\n/** The layers of one foot on a surface: heel, roll to the toe, then grains, ring or splash. `weight` scales the heel (a landing is the whole body). */\nfunction footLayers(surface: SurfaceId, take: Take, gait: (typeof GAITS)[GaitId], weight = 1): Layer[] {\n const s = SURFACES[surface]\n const toe = gait.toe * take.t\n return [\n sceneTone({ f: s.heel.f * take.f * weight ** -0.3, f2: s.heel.f * take.f * 0.6, d: s.heel.d * gait.short * take.t * weight ** 0.5, vol: s.heel.vol * gait.vol * take.v * weight ** 0.5 }),\n sceneNoise({ type: 'lowpass', f: 500 * gait.bright, d: 0.02 * take.t, vol: 0.18 * gait.vol * take.v * weight ** 0.5 }),\n sceneNoise({ type: s.roll.type, f: [s.roll.f * take.f * gait.bright * 0.92, s.roll.f * take.f * gait.bright * 1.08], q: s.roll.q, d: s.roll.d * gait.short * take.t * weight ** 0.3, vol: s.roll.vol * gait.vol * take.v, delay: toe }),\n ...(s.grains ? grainLayers(s.grains, take, toe * 0.5, gait.vol * weight ** 0.5) : []),\n ...(s.ring ? ringLayers(s.ring, take, gait.vol * weight ** 0.5) : []),\n ...(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 })] : []),\n ]\n}\n\n/** The layers at `level` of their gain (a scene layer's gain is a number or a range). */\nconst quieter = (level: number, layers: readonly Layer[]): Layer[] =>\n layers.map((layer) => {\n const gain = layer.gain ?? 1\n if (typeof gain === 'number') return { ...layer, gain: gain * level }\n if (Array.isArray(gain)) return { ...layer, gain: [gain[0] * level, gain[1] * level] as const }\n return layer\n })\n\nconst recipe = (id: string, layers: readonly Layer[], falloff: Falloff, bus: SoundRecipe['bus'] = 'world'): SoundRecipe => ({ id, bus, pan: true, layers, falloff, sources: ['sdk'] })\n\nconst takeId = (id: string, index: number): string => `${id}_${String(index + 1).padStart(2, '0')}`\n\n/** The four takes of an id and the set that names them. */\nfunction takes(id: string, layersOf: (take: Take, index: number) => Layer[], falloff: Falloff, rate: readonly [number, number] = [0.96, 1.04], bus?: SoundRecipe['bus']): { sounds: SoundRecipe[]; set: SoundSet } {\n const sounds = TAKES.map((take, index) => recipe(takeId(id, index), layersOf(take, index), falloff, bus))\n return { sounds, set: { id, variants: sounds.map((sound) => sound.id), rate } }\n}\n\nconst footstep = (surface: SurfaceId, gait: GaitId) => takes(footstepSoundId(surface, gait), (take) => footLayers(surface, take, GAITS[gait]), FOOTSTEP_FALLOFF)\n\nconst LANDINGS: Readonly<Record<LandingId, { readonly weight: number; readonly cloth: number }>> = { light: { weight: 1.4, cloth: 0.12 }, heavy: { weight: 2.4, cloth: 0.22 } }\n\n/** A landing's layers are the feet's at the body's weight; this brings the whole of it under a blow on a body (C6). */\nconst LANDING_LEVEL = 0.65\n\nconst landing = (surface: SurfaceId, landing: LandingId) =>\n takes(\n `land_${surface}_${landing}`,\n (take) => quieter(LANDING_LEVEL, [\n // both feet, a hair apart, then the knees taking the weight (a low body thump) and the clothes settling\n ...footLayers(surface, take, GAITS.run, LANDINGS[landing].weight),\n ...footLayers(surface, { ...take, v: take.v * 0.6 }, GAITS.run, LANDINGS[landing].weight * 0.6).map((layer) => ({ ...layer, at: (typeof layer.at === 'number' ? layer.at : 0) + 0.018 * take.t })),\n sceneTone({ f: 60 * take.f, f2: 38, d: 0.14 * LANDINGS[landing].weight * take.t, vol: 0.22 * LANDINGS[landing].weight ** 0.7 * take.v, delay: 0.02 }),\n sceneNoise({ type: 'bandpass', f: [1800, 2600], q: 0.8, d: 0.18, vol: LANDINGS[landing].cloth * take.v, delay: 0.04 }),\n ]),\n FOOTSTEP_FALLOFF,\n )\n\nconst whoosh = (blow: BlowId, from: number, to: number, d: number, vol: number, q = 1.6): ((take: Take) => Layer[]) => (take) => [\n // the air: a band sweeping up as the limb speeds up; it peaks `SWING_LEAD_SECONDS` in, the moment before the contact, then dies away\n sceneNoise({ type: 'bandpass', f: from * take.f, f2: to * take.f, q, a: SWING_LEAD_SECONDS[blow], d: d * take.t, vol: vol * take.v }),\n sceneNoise({ type: 'lowpass', f: 600 * take.f, a: SWING_LEAD_SECONDS[blow], d: d * take.t * 0.8, vol: vol * 0.35 * take.v }),\n]\n\n/** Skin, mass and (optionally) bone: what a blow on a body is made of. */\nconst fleshHit = (o: { slap: number; slapF: number; thud: number; thudF: number; thudD: number; crack?: number; wet?: number }): ((take: Take) => Layer[]) => (take) => [\n sceneNoise({ type: 'bandpass', f: o.slapF * take.f, q: 1.2, d: 0.03 * take.t, vol: o.slap * take.v }),\n sceneNoise({ type: 'highpass', f: 3500 * take.f, d: 0.012, vol: o.slap * 0.4 * take.v }),\n sceneTone({ f: o.thudF * take.f, f2: o.thudF * 0.5, d: o.thudD * take.t, vol: o.thud * take.v }),\n sceneNoise({ type: 'lowpass', f: 600 * take.f, d: o.thudD * 1.2 * take.t, vol: o.thud * 0.5 * take.v }),\n ...(o.crack ? [sceneNoise({ type: 'highpass', f: 2500, d: 0.015, vol: o.crack * take.v, delay: 0.006 }), sceneTone({ wave: 'square', f: 900 * take.f, f2: 300, d: 0.02, vol: o.crack * 0.15 * take.v, delay: 0.006 })] : []),\n ...(o.wet ? [sceneNoise({ type: 'bandpass', f: 1400 * take.f, f2: 500, q: 2.5, d: 0.12 * take.t, vol: o.wet * take.v, delay: 0.01 })] : []),\n]\n\n/** What only the striking part sounds like on a hard thing (the material's impact plays beside it). */\nconst knock = (o: { clickF: number; click: number; tones: readonly (readonly [number, number, number])[] }): ((take: Take) => Layer[]) => (take) => [\n sceneNoise({ type: 'bandpass', f: o.clickF * take.f, q: 1.5, d: 0.018, vol: o.click * take.v }),\n ...o.tones.map(([f, d, vol]) => sceneTone({ f: f * take.f, d: d * take.t, vol: vol * take.v })),\n]\n\nconst voice = (o: { f0: number; f1: number; d: number; fA: number; fB: number; noise: number; vol: number }): ((take: Take) => Layer[]) => (take) => [\n sceneVoice({ f0: o.f0 * take.f, f1: o.f1 * take.f, d: o.d * take.t, fA: o.fA * take.f, fB: o.fB * take.f, noise: o.noise, vol: o.vol * take.v }),\n]\n\nconst BODY: Readonly<Record<BodySoundId, (take: Take) => Layer[]>> = {\n jump: (take) => [\n sceneNoise({ type: 'bandpass', f: 900 * take.f, f2: 1700 * take.f, q: 1, a: 0.03, d: 0.12, vol: 0.18 * take.v }),\n sceneNoise({ type: 'bandpass', f: 2200 * take.f, q: 0.8, d: 0.04, vol: 0.12 * take.v }),\n sceneTone({ f: 85 * take.f, f2: 60, d: 0.04, vol: 0.2 * take.v }),\n ],\n cloth_rustle: (take) => [\n { ...sceneNoise({ type: 'bandpass', f: 2400 * take.f, q: 0.8, a: 0.06, d: 0.22 * take.t, vol: 0.12 * take.v }), modulators: [{ target: 'gain', wave: 'triangle', rate: [9, 14], depth: 0.5 }] },\n ],\n body_fall: (take) => [\n sceneTone({ f: 58 * take.f, f2: 35, d: 0.28 * take.t, vol: 0.9 * take.v }),\n sceneNoise({ type: 'lowpass', f: 480 * take.f, d: 0.3 * take.t, vol: 0.55 * take.v }),\n sceneNoise({ type: 'bandpass', f: 1300 * take.f, q: 1, d: 0.05, vol: 0.3 * take.v }),\n // the limbs a moment later, and the clothes\n sceneTone({ f: 75 * take.f, f2: 45, d: 0.12, vol: 0.4 * take.v, delay: 0.13 * take.t }),\n sceneNoise({ type: 'bandpass', f: 2200, q: 0.8, d: 0.2, vol: 0.12 * take.v, delay: 0.05 }),\n ],\n fall_damage: (take) => [\n ...BODY.body_fall(take),\n sceneNoise({ type: 'highpass', f: 2800, d: 0.02, vol: 0.35 * take.v, delay: 0.01 }),\n ...voice({ f0: 170, f1: 110, d: 0.32, fA: 650, fB: 1150, noise: 0.25, vol: 0.32 })(take).map((layer) => ({ ...layer, at: 0.08 })),\n ],\n player_hurt: voice({ f0: 150, f1: 105, d: 0.26, fA: 620, fB: 1100, noise: 0.3, vol: 0.35 }),\n player_breath_run: (take) => [\n sceneNoise({ type: 'bandpass', f: 1200 * take.f, q: 1, a: 0.08, d: 0.22 * take.t, vol: 0.25 * take.v }),\n sceneNoise({ type: 'bandpass', f: 900 * take.f, q: 1, a: 0.06, d: 0.26 * take.t, vol: 0.3 * take.v, delay: 0.3 * take.t }),\n ],\n player_death: voice({ f0: 135, f1: 68, d: 1, fA: 560, fB: 980, noise: 0.35, vol: 0.4 }),\n bite: (take) => [\n sceneNoise({ type: 'highpass', f: 2600, d: 0.015, vol: 0.4 * take.v }),\n sceneNoise({ type: 'bandpass', f: 1600 * take.f, f2: 450, q: 2.2, d: 0.16 * take.t, vol: 0.55 * take.v, delay: 0.01 }),\n sceneNoise({ type: 'bandpass', f: 3200 * take.f, f2: 1800, q: 1.2, d: 0.22 * take.t, vol: 0.25 * take.v, delay: 0.09 }),\n sceneTone({ f: 120 * take.f, f2: 70, d: 0.06, vol: 0.3 * take.v }),\n ],\n grab: (take) => [\n sceneNoise({ type: 'bandpass', f: 1900 * take.f, q: 0.9, a: 0.004, d: 0.13 * take.t, vol: 0.32 * take.v }),\n sceneTone({ f: 95 * take.f, f2: 60, d: 0.07, vol: 0.3 * take.v }),\n sceneNoise({ type: 'lowpass', f: 700, d: 0.08, vol: 0.2 * take.v }),\n ],\n punch_swing: whoosh('punch', 450, 1500, 0.16, 0.9),\n punch_hit_body: fleshHit({ slap: 0.55, slapF: 1500, thud: 0.6, thudF: 115, thudD: 0.09 }),\n punch_hit_face: fleshHit({ slap: 0.75, slapF: 2300, thud: 0.45, thudF: 150, thudD: 0.07, crack: 0.25 }),\n punch_hit_object: knock({ clickF: 1800, click: 0.3, tones: [[210, 0.04, 0.25]] }),\n kick_swing: whoosh('kick', 280, 950, 0.22, 1, 1.3),\n kick_hit: fleshHit({ slap: 0.45, slapF: 1100, thud: 0.85, thudF: 82, thudD: 0.14 }),\n kick_hit_object: knock({ clickF: 1000, click: 0.3, tones: [[92, 0.08, 0.5]] }),\n shove_two_hands: (take) => [\n sceneNoise({ type: 'bandpass', f: 950 * take.f, q: 0.9, a: 0.01, d: 0.13 * take.t, vol: 0.38 * take.v }),\n sceneTone({ f: 100 * take.f, f2: 60, d: 0.1 * take.t, vol: 0.45 * take.v }),\n sceneNoise({ type: 'bandpass', f: 2300, q: 0.8, d: 0.16, vol: 0.12 * take.v, delay: 0.03 }),\n ],\n knife_swing: whoosh('blade', 1900, 4600, 0.12, 1.1, 2.2),\n knife_stab: fleshHit({ slap: 0.2, slapF: 1200, thud: 0.4, thudF: 160, thudD: 0.06, wet: 0.5 }),\n knife_slash: (take) => [\n sceneNoise({ type: 'highpass', f: 3200 * take.f, f2: 1800, d: 0.13 * take.t, vol: 0.35 * take.v }),\n sceneNoise({ type: 'bandpass', f: 1300 * take.f, f2: 600, q: 2.5, d: 0.12 * take.t, vol: 0.35 * take.v, delay: 0.02 }),\n ],\n knife_hit_object: knock({ clickF: 3200, click: 0.25, tones: [[2800, 0.08, 0.07], [4150, 0.06, 0.05]] }),\n blunt_swing: whoosh('blunt', 220, 760, 0.28, 1.1, 1.5),\n blunt_hit: fleshHit({ slap: 0.35, slapF: 900, thud: 1, thudF: 70, thudD: 0.18, crack: 0.3 }),\n blunt_hit_object: knock({ clickF: 1400, click: 0.35, tones: [[300, 0.12, 0.25], [760, 0.08, 0.12]] }),\n axe_swing: whoosh('chop', 190, 620, 0.3, 1.2, 1.4),\n axe_chop: fleshHit({ slap: 0.3, slapF: 1400, thud: 0.75, thudF: 140, thudD: 0.1, crack: 0.35, wet: 0.45 }),\n axe_hit_object: knock({ clickF: 2200, click: 0.4, tones: [[1500, 0.15, 0.1], [2300, 0.1, 0.06], [140, 0.1, 0.35]] }),\n}\n\nconst BODY_BUS: Partial<Record<BodySoundId, SoundRecipe['bus']>> = { player_hurt: 'voices', player_death: 'voices', player_breath_run: 'voices', fall_damage: 'voices' }\n\nconst built = [\n ...SURFACE_IDS.flatMap((surface) => GAIT_IDS.map((gait) => footstep(surface, gait))),\n ...SURFACE_IDS.flatMap((surface) => LANDING_IDS.map((l) => landing(surface, l))),\n ...BODY_SOUND_IDS.map((id) => takes(id, BODY[id], BODY_FALLOFF, id.endsWith('_swing') ? [0.94, 1.06] : [0.96, 1.04], BODY_BUS[id])),\n]\n\n/**\n * Every body sound of `game-contracts`' `BODY_FOLEY_IDS` as a set of four takes (`footstep_concrete_walk` plays `footstep_concrete_walk_01`..`_04`,\n * never the same twice in a row, at ±4% of rate). Register it in the engine the body plays on.\n */\nexport const BODY_FOLEY_BANK: SoundBank = {\n id: 'body_foley',\n sounds: built.flatMap((entry) => entry.sounds),\n sets: built.map((entry) => entry.set),\n}\n\n/** The ids the bank answers (the sets), in the contract's order. */\nexport const BODY_FOLEY_SET_IDS: readonly string[] = [...FOOTSTEP_SOUND_IDS, ...LAND_SOUND_IDS, ...BODY_SOUND_IDS]\n","import type { AudioListener, AudioSink, LoopHandle, SoundHandle, SoundRequest } from '@adatechnology/game-contracts'\n\nimport type { SoundBank } from '../recipe'\nimport type { AudioEngine, VoiceHandle } from './engine'\n\n/** An `AudioSink` (what a host lends its modules) that carries the engine behind it, so a module that wants more than `play` can use the engine. */\nexport type EngineSink = AudioSink & { readonly engine: AudioEngine }\n\n/** Lends an engine as the host's `audio`: sounds by key, loops, the listener, and banks registered into the same engine. */\nexport function createAudioSink(engine: AudioEngine): EngineSink {\n const playing = new Map<number, VoiceHandle>()\n return {\n engine,\n play(request: SoundRequest): SoundHandle | null {\n const handle = engine.play(request.sound, {\n ...(request.position ? { position: request.position } : {}),\n ...(request.volume === undefined ? {} : { volume: request.volume }),\n ...(request.params ? { params: request.params } : {}),\n ...(request.seed === undefined ? {} : { seed: request.seed }),\n ...(request.delay === undefined ? {} : { delay: request.delay }),\n ...(request.urgent ? { urgent: true } : {}),\n })\n if (!handle) return null\n playing.set(handle.id, handle)\n return { id: handle.id }\n },\n stop(handle) {\n playing.get(handle.id)?.stop()\n playing.delete(handle.id)\n },\n loop(sound, options): LoopHandle {\n const loop = engine.loop(sound)\n // the loop's place comes with the first set; `params.cutoff` drives the first filter\n let position = options?.position\n return {\n set: (state) => {\n position = state.position ?? position\n const cutoff = state.params?.['cutoff']\n loop.set({\n ...(state.volume === undefined ? {} : { volume: state.volume }),\n ...(state.frequency === undefined ? {} : { frequency: state.frequency }),\n ...(position ? { position } : {}),\n ...(cutoff === undefined ? {} : { cutoff }),\n })\n },\n stop: () => loop.stop(),\n }\n },\n setListener(listener: AudioListener) {\n engine.setListener(listener)\n },\n register(bank: unknown) {\n engine.register(bank as SoundBank)\n },\n }\n}\n"],"mappings":"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","names":["handle","layer","landing"]}
1
+ {"version":3,"sources":["../src/local-pack-loader.ts","../src/recipes/scene.ts","../src/library/cabin.ts","../src/library/radio.ts","../src/recipes/foley.ts","../src/recipes/body-foley.ts","../src/webaudio/sink.ts"],"sourcesContent":["/**\n * Puts a local sound pack on an engine without touching the frame a sound is played in. Each id's files are fetched and decoded in idle time\n * (one id per idle slot), once per url (the engine's sample store shares buffers between ids and voices). Until they decode, the id plays what it\n * played before (the SDK's recording, else its synthesized recipe); once they do, the id is swapped to the files. The choice is made once, when the\n * files load: a file that fails leaves the id on the SDK's sound for good, so `play` never fetches or decodes anything.\n */\nimport type { LocalPackSampleOptions, LocalSoundPack } from './local-pack'\nimport { isShippableLicense, localPackSamples } from './local-pack'\nimport type { SampleSound } from './recipe'\nimport type { AudioEngine } from './webaudio/engine'\n\nexport const LOCAL_PACK_BANK_ID = 'local_sound_pack'\nconst STAGING_PREFIX = 'local_pack_staging:'\n\n/** `pending` while loading, `file` once the pack's files play, `fallback` when they failed and the SDK's sound stays, `sdk` when the entry prefers the SDK recording and there is one. */\nexport type LocalPackStatus = 'pending' | 'file' | 'fallback' | 'sdk'\n\nexport type LocalPackReport = {\n readonly file: readonly string[]\n /** Ids that kept the SDK recording by preference (their files were not fetched). */\n readonly sdk: readonly string[]\n readonly fallback: readonly { readonly id: string; readonly error: string }[]\n}\n\n/** Runs a task when the page is idle; returns a cancel function. */\nexport type IdleScheduler = (task: () => void) => () => void\n\ntype IdleWindow = { requestIdleCallback?: (task: () => void) => number; cancelIdleCallback?: (handle: number) => void }\n\n/** `requestIdleCallback` where there is one, else the next macrotask. */\nexport const defaultIdleScheduler: IdleScheduler = (task) => {\n const idle = globalThis as IdleWindow\n if (idle.requestIdleCallback && idle.cancelIdleCallback) {\n const handle = idle.requestIdleCallback(task)\n const cancel = idle.cancelIdleCallback\n return () => cancel(handle)\n }\n const handle = setTimeout(task, 0)\n return () => clearTimeout(handle)\n}\n\nexport type ApplyLocalSoundPackOptions = LocalPackSampleOptions & {\n readonly schedule?: IdleScheduler\n}\n\nexport type LocalPackHandle = {\n /** Resolves when every id has loaded or fallen back. */\n readonly done: Promise<LocalPackReport>\n status(id: string): LocalPackStatus | undefined\n /** The ids playing a pack file whose licence is not CC0 / CC-BY. */\n unlicensed(): readonly string[]\n /** Stops loading and gives every swapped id back the sound it had before. */\n dispose(): void\n}\n\ntype Engine = Pick<AudioEngine, 'registry' | 'register' | 'loadSamples'>\n\nexport function applyLocalSoundPack(engine: Engine, pack: LocalSoundPack, options: ApplyLocalSoundPackOptions = {}): LocalPackHandle {\n const schedule = options.schedule ?? defaultIdleScheduler\n const samples = localPackSamples(pack, options)\n const statuses = new Map<string, LocalPackStatus>(samples.map((sample) => [sample.id, 'pending']))\n const priors = new Map<string, { readonly sample?: SampleSound; readonly bank?: string }>()\n const report: { file: string[]; sdk: string[]; fallback: { id: string; error: string }[] } = { file: [], sdk: [], fallback: [] }\n const queue = [...samples]\n let cancel: (() => void) | undefined\n let disposed = false\n let finish: (value: LocalPackReport) => void = () => undefined\n const done = new Promise<LocalPackReport>((resolve) => {\n finish = resolve\n })\n\n const swapIn = (sample: SampleSound): void => {\n const prior = engine.registry.sample(sample.id)\n const bank = engine.registry.bankOf(sample.id)\n priors.set(sample.id, { ...(prior ? { sample: prior } : {}), ...(bank ? { bank } : {}) })\n engine.register({ id: LOCAL_PACK_BANK_ID, samples: [{ ...sample, ...(prior?.fallback ? { fallback: prior.fallback } : {}) }] })\n statuses.set(sample.id, 'file')\n report.file.push(sample.id)\n }\n\n const loadOne = async (sample: SampleSound): Promise<void> => {\n // decided when the id's turn comes, so the SDK's own bank (registered while the page loads) is already there\n if (pack.sounds[sample.id]?.prefer === 'sdk' && engine.registry.sample(sample.id)) {\n statuses.set(sample.id, 'sdk')\n report.sdk.push(sample.id)\n return\n }\n const staging = `${STAGING_PREFIX}${sample.id}`\n engine.register({ id: LOCAL_PACK_BANK_ID, samples: [{ ...sample, id: staging }] })\n const loaded = await engine.loadSamples([staging])\n engine.registry.removeSample(staging)\n if (disposed) return\n if (loaded.failed.length === 0) return swapIn(sample)\n statuses.set(sample.id, 'fallback')\n report.fallback.push({ id: sample.id, error: loaded.failed.map((entry) => `${entry.url}: ${entry.error}`).join('; ') })\n }\n\n const next = (): void => {\n const sample = queue.shift()\n if (!sample || disposed) {\n if (!disposed) finish(report)\n return\n }\n void loadOne(sample).finally(() => {\n if (!disposed) cancel = schedule(next)\n })\n }\n cancel = schedule(next)\n\n return {\n done,\n status: (id) => statuses.get(id),\n unlicensed: () => samples.filter((sample) => statuses.get(sample.id) === 'file' && !isShippableLicense(sample.license)).map((sample) => sample.id),\n dispose() {\n disposed = true\n cancel?.()\n for (const [id, prior] of priors) {\n if (prior.sample) engine.register({ id: prior.bank ?? LOCAL_PACK_BANK_ID, samples: [prior.sample] })\n else engine.registry.removeSample(id)\n }\n priors.clear()\n finish(report)\n },\n }\n}\n","// The art scene's synthesis primitives (cena L1322-L1328) as recipe layers, shared by every subject bank that ports a `sfx.*` of the page: the\n// materials in `destruction-three`, the voices and wounds in `characters-three`. Each helper writes the layer the team routine builds, with its\n// fields in the order the routine draws its random numbers, so a recipe built from them leaves the trace of the team code.\nimport { DISTANCE_CURVES } from '../falloff'\nimport type { BusId, Envelope, Layer, ParamRef, Range, SoundRecipe } from '../recipe'\n\nconst ATTACK = 0.002\n\n/** A length in seconds: a number, a `[min, max]` range or a named number. */\nexport type SceneLength = number | readonly [number, number] | ParamRef\n\n// the layer is `attack + d` long (the art scene's gain rises over `a` and falls over `d`)\nfunction lengthOf(d: SceneLength, attack: number): Range {\n if (typeof d === 'number') return attack + d\n if (Array.isArray(d)) return [attack + d[0], attack + d[1]] as const\n return { ...(d as ParamRef), add: ((d as ParamRef).add ?? 0) + attack }\n}\n\nconst envelope = (attack: number): Envelope => [\n [0, 0.0001, 'set', 'fixed'],\n [attack, 1, 'exp'],\n ['1d', 0.0001, 'exp', 'fixed'],\n]\n\nexport type SceneNoise = {\n readonly type?: BiquadFilterType\n readonly f: Range\n /** The filter slides here over `d` (needs a fixed `d`). */\n readonly f2?: number\n readonly q?: number\n readonly a?: number\n readonly d: SceneLength\n readonly vol: Range\n readonly wet?: number\n readonly delay?: Range\n}\n\n/** `sNoise` (cena L1323): noise from a random point, a filter (default lowpass, Q 0.7), the gain rising over `a` and falling over `d`. */\nexport function sceneNoise(o: SceneNoise): Layer {\n const a = o.a ?? ATTACK\n const over = typeof o.d === 'number' ? o.d : 0\n return {\n filters: {\n mode: 'serial',\n bank: [{ type: o.type ?? 'lowpass', frequency: o.f2 === undefined ? { set: o.f } : { set: o.f, to: o.f2, curve: 'exp', over }, q: o.q ?? 0.7 }],\n },\n duration: lengthOf(o.d, a),\n gain: o.vol,\n ...(o.delay === undefined ? {} : { at: o.delay }),\n ...(o.wet === undefined ? {} : { wet: o.wet }),\n source: { kind: 'noise', offset: 'random', offsetScale: 1.5, loop: true },\n envelope: envelope(a),\n }\n}\n\nexport type SceneTone = { readonly wave?: OscillatorType; readonly f: Range; readonly f2?: number; readonly d: SceneLength; readonly vol: Range; readonly wet?: number; readonly delay?: Range }\n\n/** `sTone` (cena L1324): an oscillator sliding from `f` to `f2` (back to `f` when none), the gain rising over 0.002 s and falling over `d`. */\nexport function sceneTone(o: SceneTone): Layer {\n return {\n source: { kind: 'osc', wave: o.wave ?? 'sine', frequency: { from: o.f, to: o.f2 ?? 'from', curve: 'exp', over: 'duration' } },\n duration: lengthOf(o.d, ATTACK),\n gain: o.vol,\n ...(o.delay === undefined ? {} : { at: o.delay }),\n ...(o.wet === undefined ? {} : { wet: o.wet }),\n envelope: envelope(ATTACK),\n }\n}\n\nexport type SceneVoice = {\n /** Start and end frequency of the sweep (the page ramps linearly from `f0` to `f1` over the length). */\n readonly f0: Range\n readonly f1: Range\n /** Length in seconds. */\n readonly d: SceneLength\n /** Centre of the first and second formant (Q 4 and 6) and of the breath band (Q 1.1). */\n readonly fA: Range\n readonly fB: Range\n /** Level of the breath noise. */\n readonly noise: Range\n readonly vol: Range\n readonly wave?: OscillatorType\n}\n\n/**\n * `voice` (cena L1325): an oscillator swept from `f0` to `f1` with a vibrato of 4 to 10 Hz (depth 0.08 of `f0`) through two formant bands plus a band of\n * breath noise, summed and boosted 3.2 times, the gain rising over 0.1 s, held to 0.6 of the length and falling; reverb send 0.45. It is the one\n * layer the page builds with `voice(...)`, so a scream is two of them.\n */\nexport function sceneVoice(o: SceneVoice): Layer {\n return {\n duration: lengthOf(o.d, 0),\n gain: o.vol,\n wet: 0.45,\n source: {\n kind: 'formant_voice',\n wave: o.wave ?? 'sawtooth',\n frequency: { from: o.f0, to: o.f1, curve: 'linear', over: 'duration' },\n vibrato: { rate: [4, 10], depth: 0.08 },\n formants: [\n { frequency: o.fA, q: 4 },\n { frequency: o.fB, q: 6 },\n ],\n breath: { frequency: o.fB, q: 1.1, gain: o.noise },\n mix: 3.2,\n },\n envelope: [\n [0, 0.0001, 'set', 'fixed'],\n [0.1, 1, 'exp'],\n ['0.6d', 1, 'set'],\n ['1d', 0.0001, 'exp', 'fixed'],\n ],\n }\n}\n\n/** The layer played `count` times (a team `for` loop whose body draws numbers): each pass is its own layer, so the draws stay in the loop's order. */\nexport const sceneMany = (count: number, make: () => Layer): Layer[] => Array.from({ length: count }, make)\n\nexport type SceneRecipeOptions = {\n /** Named numbers drawn first (`PlayOptions.params` can override them). */\n readonly vars?: SoundRecipe['vars']\n readonly bus?: BusId\n readonly group?: string\n}\n\n/** A recipe in the art scene's mix: positional with the art scene's curve (`vol / (1 + d² × 0.008)`) and pan; `line` is the team code it comes from (`cena:<line>`). */\nexport function sceneRecipe(id: string, layers: readonly Layer[], line: string, options: SceneRecipeOptions = {}): SoundRecipe {\n return {\n id,\n bus: options.bus ?? 'world',\n pan: true,\n layers,\n falloff: DISTANCE_CURVES.art_scene,\n ...(options.vars ? { vars: options.vars } : {}),\n ...(options.group ? { group: options.group } : {}),\n sources: [`cena:${line}`],\n }\n}\n","// The sounds of a vehicle's cabin and body switches (the turn signal relay, the starter, the alarm, the wipers, the belt chime, the lock chirp). Like the\n// library's horn, they live here until the vehicles package has a bank of its own (Q12). Synthesized; no recording.\nimport type { SoundBank, SoundRecipe } from '../recipe'\n\nexport const CABIN_SOUNDS: readonly SoundRecipe[] = [\n {\n id: 'blinker_tick',\n bus: 'world',\n duration: 0.03,\n layers: [\n // the relay: a click of bright noise and a short low knock\n { source: { kind: 'noise', offset: 'random' }, filters: { mode: 'serial', bank: [{ type: 'highpass', frequency: { set: 2600 } }] }, envelope: [[0, 0.22, 'set'], [0.025, 0.0001, 'exp', 'fixed']] },\n { source: { kind: 'osc', wave: 'triangle', frequency: { set: 180 } }, envelope: [[0, 0.12, 'set'], [0.03, 0.0001, 'exp', 'fixed']] },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'starter_crank',\n bus: 'world',\n duration: 0.9,\n layers: [\n // the starter motor turning the engine over: low noise chopped at the compression strokes\n {\n source: { kind: 'noise', offset: 'random' },\n filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 420 } }] },\n modulators: [{ target: 'gain', wave: 'square', rate: 11, depth: 0.08, base: 0.1 }],\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.05, 0.25, 'linear'], [0.8, 0.22, 'set'], [0.9, 0.0001, 'exp', 'fixed']],\n },\n { source: { kind: 'osc', wave: 'sawtooth', frequency: { set: 95, to: 120, curve: 'linear', over: 0.9 } }, filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 300 } }] }, envelope: [[0, 0.04, 'set'], [0.9, 0.0001, 'exp', 'fixed']] },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'car_alarm',\n bus: 'world',\n order: 'siren',\n duration: 3,\n tail: 0.1,\n layers: [\n // the whoop of a car alarm: a square swept up and down three times a second\n {\n source: { kind: 'osc', wave: 'square', frequency: { set: 1100 } },\n modulators: [{ target: 'frequency', wave: 'triangle', rate: 3, depth: 420 }],\n filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 2600 } }] },\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.05, 0.05, 'linear'], [2.9, 0.05, 'set'], [3, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'alarm_chirp',\n bus: 'world',\n duration: 0.1,\n layers: [{ source: { kind: 'osc', wave: 'square', frequency: { set: 2300 } }, repeat: { count: 2, spacing: 0.16 }, envelope: [[0, 0.05, 'set'], [0.09, 0.0001, 'exp', 'fixed']] }],\n falloff: { model: 'none' },\n },\n {\n id: 'wiper_swish',\n bus: 'world',\n duration: 0.45,\n layers: [\n {\n source: { kind: 'noise', offset: 'random' },\n filters: { mode: 'serial', bank: [{ type: 'bandpass', frequency: { set: 700, to: 1100, curve: 'linear', over: 0.45 }, q: 1.2 }] },\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.2, 0.06, 'linear'], [0.45, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n id: 'seatbelt_chime',\n bus: 'world',\n duration: 0.5,\n layers: [{ source: { kind: 'osc', wave: 'sine', frequency: { set: 880 } }, repeat: { count: 3, spacing: 0.7 }, envelope: [[0, 0.06, 'set'], [0.5, 0.0001, 'exp', 'fixed']] }],\n falloff: { model: 'none' },\n },\n {\n // the parking sensor: a short high beep, repeated by the cabin faster as the obstacle comes close\n id: 'parking_beep',\n bus: 'world',\n duration: 0.09,\n layers: [{ source: { kind: 'osc', wave: 'sine', frequency: { set: 2300 } }, envelope: [[0, 0.07, 'set'], [0.08, 0.0001, 'exp', 'fixed']] }],\n falloff: { model: 'none' },\n },\n {\n // an emergency siren's wail: a tone rising and falling slowly (one sweep about every 3 s), played again by the cabin as it ends\n id: 'siren_wail',\n bus: 'world',\n order: 'siren',\n duration: 3,\n tail: 0.05,\n layers: [\n {\n source: { kind: 'osc', wave: 'sawtooth', frequency: { set: 1050 } },\n modulators: [{ target: 'frequency', wave: 'sine', rate: 0.33, depth: 420 }],\n filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 2400 } }] },\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.08, 0.07, 'linear'], [2.95, 0.07, 'set'], [3, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n // the yelp: the same tone swept fast, for a junction\n id: 'siren_yelp',\n bus: 'world',\n order: 'siren',\n duration: 2,\n tail: 0.05,\n layers: [\n {\n source: { kind: 'osc', wave: 'sawtooth', frequency: { set: 1100 } },\n modulators: [{ target: 'frequency', wave: 'triangle', rate: 4, depth: 380 }],\n filters: { mode: 'serial', bank: [{ type: 'lowpass', frequency: { set: 2600 } }] },\n envelope: [[0, 0.0001, 'set', 'fixed'], [0.05, 0.07, 'linear'], [1.95, 0.07, 'set'], [2, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n // the wires under the column touching: a crackle of bright noise\n id: 'hotwire_spark',\n bus: 'world',\n duration: 0.12,\n layers: [\n {\n source: { kind: 'noise', offset: 'random' },\n filters: { mode: 'serial', bank: [{ type: 'highpass', frequency: { set: 3200 } }] },\n modulators: [{ target: 'gain', wave: 'square', rate: 60, depth: 0.1, base: 0.12 }],\n envelope: [[0, 0.2, 'set'], [0.12, 0.0001, 'exp', 'fixed']],\n },\n ],\n falloff: { model: 'none' },\n },\n {\n // the glovebox latch: a small plastic click and the lid dropping\n id: 'glovebox_latch',\n bus: 'world',\n duration: 0.14,\n layers: [\n { source: { kind: 'noise', offset: 'random' }, filters: { mode: 'serial', bank: [{ type: 'bandpass', frequency: { set: 1800 }, q: 2 }] }, envelope: [[0, 0.16, 'set'], [0.03, 0.0001, 'exp', 'fixed']] },\n { source: { kind: 'osc', wave: 'triangle', frequency: { set: 240 } }, envelope: [[0, 0.0001, 'set', 'fixed'], [0.06, 0.08, 'linear'], [0.14, 0.0001, 'exp', 'fixed']] },\n ],\n falloff: { model: 'none' },\n },\n] as unknown as readonly SoundRecipe[]\n\nexport const CABIN_BANK: SoundBank = { id: 'vehicle_cabin', sounds: CABIN_SOUNDS, loops: [] }\n","// Music for a car radio or tape: three short original loops synthesized from notes (a bass, a chord pad and a melody per bar), so a cabin can pick a\n// track without any recording. Each bar is one recipe whose note layers start at their beat; the cabin plays the bars in turn, so switching the\n// radio off stops the music at the end of the bar.\nimport type { SoundBank, SoundRecipe } from '../recipe'\n\ntype Note = readonly [beat: number, midi: number, beats: number]\ntype TrackSpec = { id: string; bpm: number; bars: number; wave: 'sine' | 'triangle' | 'square' | 'sawtooth'; bass: readonly Note[]; chords: readonly Note[]; melody: readonly Note[] }\n\nconst hz = (midi: number): number => 440 * 2 ** ((midi - 69) / 12)\n\nconst layer = (note: Note, beat: number, wave: string, level: number): object => {\n const [at, midi, beats] = note\n const length = beats * beat\n return {\n at: at * beat,\n duration: length,\n source: { kind: 'osc', wave, frequency: { set: hz(midi) } },\n envelope: [[0, 0.0001, 'set'], [0.01, level, 'linear'], [Math.max(0.02, length * 0.9), level * 0.35, 'linear'], [length, 0.0001, 'exp', 'fixed']],\n }\n}\n\n/** A song of the radio: the ids of its bars in order and the seconds of one bar. */\nexport type RadioSong = { readonly id: string; readonly barSeconds: number; readonly bars: readonly string[] }\n\n/** One song cut in bars: every note a layer at its beat inside its bar. */\nexport function radioTrack(spec: TrackSpec): { song: RadioSong; recipes: SoundRecipe[] } {\n const beat = 60 / spec.bpm\n const recipes = Array.from({ length: spec.bars }, (_, bar): SoundRecipe => {\n const inBar = (notes: readonly Note[]): Note[] => notes.filter((n) => n[0] >= bar * 4 && n[0] < bar * 4 + 4).map((n): Note => [n[0] - bar * 4, n[1], n[2]])\n const layers = [\n ...inBar(spec.bass).map((n) => layer(n, beat, 'triangle', 0.16)),\n ...inBar(spec.chords).map((n) => layer(n, beat, 'sine', 0.05)),\n ...inBar(spec.melody).map((n) => layer(n, beat, spec.wave, 0.07)),\n ]\n return { id: `${spec.id}_${bar}`, bus: 'world', duration: 4 * beat, layers, falloff: { model: 'none' } } as unknown as SoundRecipe\n })\n return { song: { id: spec.id, barSeconds: 4 * beat, bars: recipes.map((r) => (r as unknown as { id: string }).id) }, recipes }\n}\n\n// a bar of a chord: root, third and fifth held the four beats\nconst chord = (bar: number, root: number, minor = false): Note[] => [[bar * 4, root, 4], [bar * 4, root + (minor ? 3 : 4), 4], [bar * 4, root + 7, 4]]\nconst bassLine = (roots: readonly number[], pattern: readonly number[]): Note[] => roots.flatMap((root, bar) => pattern.map((b): Note => [bar * 4 + b, root - 12, 0.9]))\n\nconst TRACKS = [\n // a bright pop loop: I–V–vi–IV in C\n radioTrack({\n id: 'radio_track_pop',\n bpm: 112,\n bars: 4,\n wave: 'square',\n bass: bassLine([48, 55, 57, 53], [0, 1.5, 2, 3]),\n chords: [...chord(0, 60), ...chord(1, 55), ...chord(2, 57, true), ...chord(3, 53)],\n 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]],\n }),\n // a syncopated loop in A minor, the bass on the off-beats\n radioTrack({\n id: 'radio_track_groove',\n bpm: 100,\n bars: 4,\n wave: 'triangle',\n bass: bassLine([57, 62, 64, 57], [0, 0.75, 1.5, 2.5, 3.25]),\n chords: [...chord(0, 57, true), ...chord(1, 62, true), ...chord(2, 64), ...chord(3, 57, true)],\n 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]],\n }),\n // a slow blues-like loop in F with a swung melody\n radioTrack({\n id: 'radio_track_slow',\n bpm: 76,\n bars: 4,\n wave: 'sine',\n bass: bassLine([53, 58, 53, 60], [0, 2]),\n chords: [...chord(0, 65), ...chord(1, 58), ...chord(2, 65), ...chord(3, 60)],\n 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]],\n }),\n]\n\n/** The songs a cabin steps through. */\nexport const RADIO_TRACKS: readonly RadioSong[] = TRACKS.map((t) => t.song)\nexport const RADIO_BANK: SoundBank = { id: 'vehicle_radio', sounds: TRACKS.flatMap((t) => t.recipes), loops: [] }\n","// Foley of the hand: items picked up, opened, drunk and eaten, and the doors, lids and drawers of furniture and vehicles. Synthesised stand-ins under the\n// ids of the sound list (`sons/checklist-sons.md` 5.7 and the car doors of 5.6), so a recorded take filed under the same id replaces the recipe without\n// touching the code that plays it. Every recipe draws its numbers from ranges (pitch about ±4 %, timing and level), so no two plays are the same, and\n// falls off faster than a gunshot and loses its highs with distance: a latch is a near sound.\nimport type { Falloff, Layer, SoundBank, SoundRecipe } from '../recipe'\nimport { sceneMany as many, sceneNoise as noise, sceneTone as tone } from './scene'\n\n/** Small sounds of the hand: `vol / (1 + d² × 0.02)`, lowpass cutoffs `/ (1 + d × 0.04)`, silent below 0.004 (a latch at 10 m is a third, at 50 m gone). */\nexport const FOLEY_FALLOFF: Falloff = {\n model: 'inverse_square',\n k: 0.02,\n cutoffK: 0.04,\n minGain: 0.004,\n}\n\n/** ±`pct` around `f`: the range a recipe draws a frequency from. */\nconst vary = (f: number, pct = 0.04): readonly [number, number] => [Math.round(f * (1 - pct)), Math.round(f * (1 + pct))]\n\nconst foley = (id: string, layers: readonly Layer[], note: string): SoundRecipe => ({\n id,\n bus: 'world',\n pan: true,\n layers,\n falloff: FOLEY_FALLOFF,\n sources: [`sdk: ${note}`],\n})\n\n/** The click of a latch or a catch: a short band of noise and a tick of metal. */\nconst click = (f: number, vol: number, delay: readonly [number, number] | number = 0): Layer[] => [\n noise({\n type: 'bandpass',\n f: vary(f, 0.08),\n q: 4,\n d: [0.018, 0.03],\n vol: [vol * 0.85, vol * 1.1],\n delay,\n }),\n tone({\n f: vary(f * 0.8, 0.06),\n f2: Math.round(f * 0.62),\n d: [0.015, 0.025],\n vol: vol * 0.18,\n delay,\n }),\n]\n\n/** A leaf meeting its frame: the body (a falling tone), the board or panel (a band of noise) and the latch catching right after. */\nconst meet = (body: number, panel: number, vol: number, latch: number): Layer[] => [\n tone({\n f: vary(body),\n f2: Math.round(body * 0.5),\n d: [0.12, 0.16],\n vol: [vol * 0.9, vol * 1.1],\n }),\n noise({\n type: 'bandpass',\n f: vary(panel, 0.06),\n q: 1.2,\n d: [0.08, 0.12],\n vol: [vol * 0.9, vol * 1.1],\n wet: 0.25,\n }),\n ...click(latch, vol * 0.45, [0.012, 0.028]),\n]\n\n/** The doors and lids of furniture and vehicles, by what the leaf is (the room picks one from the item, else from the leaf's material). */\nexport const LEAF_FOLEY: readonly SoundRecipe[] = [\n // a wooden house door or wardrobe door: latch, a short creak, the leaf on the frame (the hard slam adds the frame rattling)\n foley('door_wood_open', click(2400, 0.4), 'the latch of a wooden door giving'),\n foley(\n 'door_creak',\n [\n tone({ f: [190, 240], f2: 310, d: [0.4, 0.55], vol: [0.04, 0.06] }),\n noise({\n type: 'bandpass',\n f: [480, 560],\n q: 6,\n a: 0.05,\n d: [0.35, 0.5],\n vol: [0.1, 0.14],\n }),\n ],\n 'a wooden hinge turning',\n ),\n foley('door_wood_close', meet(120, 600, 0.55, 2400), 'a wooden leaf meeting its frame'),\n foley(\n 'door_wood_slam',\n [\n ...meet(110, 560, 0.85, 2300),\n ...many(3, () =>\n noise({\n type: 'bandpass',\n f: [900, 1500],\n q: 3,\n d: 0.03,\n vol: [0.08, 0.14],\n delay: [0.05, 0.18],\n }),\n ),\n ],\n 'a wooden door slammed: the frame and the hinges rattle after the hit',\n ),\n // a metal door or gate: a hollow panel that rings a little\n foley('door_metal_open_close', [...meet(160, 900, 0.55, 2000), tone({ f: vary(1250), f2: 1150, d: [0.1, 0.16], vol: 0.06, wet: 0.3 })], 'a metal door or gate meeting its frame'),\n foley(\n 'door_creak_metal',\n [\n tone({ f: [620, 760], f2: 900, d: [0.3, 0.4], vol: [0.03, 0.045] }),\n noise({\n type: 'bandpass',\n f: [1300, 1500],\n q: 8,\n a: 0.04,\n d: [0.25, 0.35],\n vol: [0.07, 0.09],\n }),\n ],\n 'a metal hinge turning',\n ),\n // the handle of a locked door shaken: the latch knocking in its keeper, five to seven times in half a second\n foley(\n 'door_locked_rattle',\n [\n ...many(6, () =>\n noise({\n type: 'bandpass',\n f: [1600, 2600],\n q: 3,\n d: [0.025, 0.04],\n vol: [0.22, 0.34],\n delay: [0, 0.45],\n }),\n ),\n ...many(3, () =>\n tone({\n f: [170, 210],\n f2: 120,\n d: 0.05,\n vol: [0.12, 0.18],\n delay: [0.02, 0.4],\n }),\n ),\n ],\n 'the handle of a locked door shaken: latch knocks and the leaf thumping in its frame',\n ),\n // a fridge: the rubber seal lets go with a soft suck, the bottles in the door clink; closing it is a soft thump and the seal pulling shut\n foley(\n 'fridge_open',\n [\n noise({\n type: 'lowpass',\n f: [320, 380],\n a: 0.03,\n d: [0.14, 0.2],\n vol: [0.32, 0.4],\n }),\n noise({\n type: 'bandpass',\n f: [800, 950],\n f2: 1400,\n q: 2,\n a: 0.02,\n d: 0.12,\n vol: [0.08, 0.12],\n }),\n ...many(2, () =>\n tone({\n f: [2600, 4200],\n d: [0.04, 0.08],\n vol: [0.015, 0.03],\n delay: [0.08, 0.22],\n }),\n ),\n ],\n 'a fridge door: the seal letting go and the bottles in the door',\n ),\n foley(\n 'fridge_close',\n [\n tone({ f: vary(85), f2: 45, d: [0.1, 0.13], vol: [0.38, 0.46] }),\n noise({\n type: 'lowpass',\n f: [520, 620],\n d: [0.08, 0.12],\n vol: [0.3, 0.36],\n }),\n noise({\n type: 'lowpass',\n f: [260, 320],\n a: 0.02,\n d: 0.1,\n vol: [0.12, 0.18],\n delay: [0.04, 0.07],\n }),\n ...many(2, () =>\n tone({\n f: [2600, 4200],\n d: [0.04, 0.07],\n vol: [0.015, 0.03],\n delay: [0.03, 0.12],\n }),\n ),\n ],\n 'a fridge door shut: a soft thump, the seal pulling and the bottles',\n ),\n // a microwave: the spring catch of the door, plastic on plastic\n foley(\n 'microwave_open',\n [\n ...click(1800, 0.34),\n tone({\n f: [3000, 3400],\n f2: 2800,\n d: 0.05,\n vol: 0.025,\n delay: [0.01, 0.02],\n }),\n ],\n 'the spring catch of a microwave door',\n ),\n foley(\n 'microwave_close',\n [\n noise({\n type: 'bandpass',\n f: [1200, 1450],\n q: 2.5,\n d: [0.04, 0.06],\n vol: [0.36, 0.44],\n }),\n tone({ f: vary(180), f2: 120, d: 0.05, vol: [0.16, 0.22] }),\n ...click(2200, 0.2, [0.008, 0.016]),\n ],\n 'a microwave door clacking shut',\n ),\n foley('microwave_beep', [tone({ wave: 'square', f: 2000, d: 0.12, vol: 0.05 })], 'the beep of a microwave'),\n // drawers and sliding leaves: the runners, then the stop\n foley(\n 'drawer_open',\n [\n noise({\n type: 'bandpass',\n f: [620, 780],\n q: 2,\n a: 0.04,\n d: [0.28, 0.36],\n vol: [0.18, 0.24],\n }),\n noise({ type: 'bandpass', f: [2000, 2400], q: 5, d: 0.28, vol: 0.04 }),\n ...click(1400, 0.16, [0.28, 0.34]),\n ],\n 'a drawer on its runners and its stop',\n ),\n foley(\n 'drawer_close',\n [\n noise({\n type: 'bandpass',\n f: [620, 780],\n q: 2,\n a: 0.03,\n d: [0.2, 0.28],\n vol: [0.18, 0.24],\n }),\n tone({\n f: vary(150),\n f2: 90,\n d: 0.08,\n vol: [0.22, 0.3],\n delay: [0.2, 0.26],\n }),\n ],\n 'a drawer pushed home',\n ),\n]\n\n/** What the hand does with an item: picking it up by what it is made of, throwing it, and the uses (opening, drinking, eating, first aid). */\nexport const ITEM_FOLEY: readonly SoundRecipe[] = [\n // the hand closing on the item: a touch of skin and cloth, then the item's own small sound\n foley(\n 'item_pickup_metal',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n tone({\n f: [1900, 2600],\n f2: 1700,\n d: [0.05, 0.08],\n vol: [0.06, 0.09],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a metal thing',\n ),\n foley(\n 'item_pickup_plastic',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n noise({\n type: 'bandpass',\n f: [1500, 1900],\n q: 3,\n d: 0.03,\n vol: [0.15, 0.21],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a plastic thing',\n ),\n foley(\n 'item_pickup_glass',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.15 }),\n tone({\n f: [3200, 4200],\n d: [0.05, 0.08],\n vol: [0.038, 0.06],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a glass thing',\n ),\n foley(\n 'item_pickup_paper',\n [\n noise({\n type: 'highpass',\n f: [2600, 3400],\n a: 0.01,\n d: [0.1, 0.14],\n vol: [0.12, 0.18],\n }),\n noise({ type: 'bandpass', f: [800, 1000], q: 1, d: 0.05, vol: 0.12 }),\n ],\n 'picking up paper or cardboard',\n ),\n foley(\n 'item_pickup_fabric',\n [\n noise({\n type: 'bandpass',\n f: [900, 1300],\n q: 0.8,\n a: 0.02,\n d: [0.12, 0.16],\n vol: [0.15, 0.21],\n }),\n ],\n 'picking up cloth',\n ),\n foley(\n 'item_pickup_wood',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n noise({\n type: 'bandpass',\n f: [900, 1100],\n q: 2,\n d: 0.04,\n vol: [0.15, 0.21],\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up a wooden thing',\n ),\n foley(\n 'item_pickup_food',\n [\n noise({ type: 'bandpass', f: [700, 900], q: 1, d: 0.06, vol: 0.18 }),\n noise({\n type: 'lowpass',\n f: [500, 650],\n d: 0.05,\n vol: 0.12,\n delay: [0.01, 0.03],\n }),\n ],\n 'picking up food',\n ),\n foley(\n 'item_throw',\n [\n noise({\n type: 'bandpass',\n f: [450, 650],\n f2: 1400,\n q: 1.5,\n a: 0.05,\n d: 0.18,\n vol: [0.1, 0.14],\n }),\n ],\n 'the arm throwing something: air',\n ),\n // a can: the tab cracks, the gas hisses out; drinking is gulps; crushing it crumples the sheet\n foley(\n 'can_open',\n [\n ...click(3200, 0.36),\n noise({\n type: 'highpass',\n f: [3600, 4400],\n a: 0.005,\n d: [0.22, 0.3],\n vol: [0.16, 0.22],\n delay: [0.012, 0.02],\n }),\n ...many(5, () => tone({ f: [4000, 7000], d: 0.02, vol: 0.01, delay: [0.05, 0.4] })),\n ],\n 'the tab of a can and the gas hissing out',\n ),\n foley(\n 'can_crush',\n [\n noise({\n type: 'bandpass',\n f: [1600, 2200],\n q: 1.2,\n d: [0.18, 0.25],\n vol: [0.3, 0.38],\n }),\n ...many(6, () =>\n tone({\n f: [1200, 3400],\n f2: 900,\n d: 0.03,\n vol: [0.03, 0.06],\n delay: [0, 0.2],\n }),\n ),\n ],\n 'a can crushed in the hand',\n ),\n foley(\n 'can_puncture_spray',\n [\n noise({\n type: 'highpass',\n f: [2400, 3000],\n a: 0.005,\n d: [0.5, 0.7],\n vol: [0.2, 0.26],\n }),\n noise({ type: 'bandpass', f: [600, 800], q: 2, d: 0.4, vol: 0.06 }),\n ],\n 'a can holed: the jet hissing out',\n ),\n foley(\n 'bottle_open',\n [\n ...many(5, () =>\n noise({\n type: 'bandpass',\n f: [2200, 3000],\n q: 4,\n d: 0.008,\n vol: [0.1, 0.16],\n delay: [0, 0.18],\n }),\n ),\n noise({\n type: 'highpass',\n f: 3800,\n a: 0.005,\n d: 0.12,\n vol: [0.06, 0.1],\n delay: [0.18, 0.22],\n }),\n ],\n 'the screw cap of a bottle turning off',\n ),\n foley(\n 'drink_gulp',\n [\n noise({\n type: 'lowpass',\n f: [280, 360],\n a: 0.02,\n d: [0.1, 0.14],\n vol: [0.24, 0.3],\n }),\n tone({ f: [140, 170], f2: 85, d: [0.08, 0.11], vol: [0.12, 0.16] }),\n ],\n 'a gulp',\n ),\n foley(\n 'eat_crunch',\n [\n ...many(4, () =>\n noise({\n type: 'bandpass',\n f: [1800, 3200],\n q: 1.5,\n d: [0.02, 0.04],\n vol: [0.12, 0.2],\n delay: [0, 0.12],\n }),\n ),\n ],\n 'a bite of something crunchy',\n ),\n foley(\n 'eat_chew',\n [\n noise({\n type: 'lowpass',\n f: [450, 600],\n a: 0.03,\n d: [0.1, 0.14],\n vol: [0.12, 0.16],\n }),\n noise({\n type: 'bandpass',\n f: [1100, 1400],\n q: 2,\n d: 0.04,\n vol: 0.04,\n delay: [0.03, 0.06],\n }),\n ],\n 'chewing',\n ),\n foley(\n 'bandage_wrap',\n [\n noise({\n type: 'bandpass',\n f: [1400, 1800],\n f2: 2400,\n q: 1,\n a: 0.04,\n d: [0.3, 0.4],\n vol: [0.12, 0.16],\n }),\n ],\n 'a bandage unrolled round a limb',\n ),\n foley(\n 'pills_shake',\n [\n ...many(8, () =>\n tone({\n f: [2400, 3600],\n d: 0.015,\n vol: [0.03, 0.05],\n delay: [0, 0.25],\n }),\n ),\n noise({ type: 'bandpass', f: [1500, 1900], q: 2, d: 0.25, vol: 0.05 }),\n ],\n 'pills shaken in their bottle',\n ),\n foley(\n 'medkit_use',\n [\n ...click(1700, 0.24),\n noise({\n type: 'bandpass',\n f: [1000, 1400],\n q: 1,\n a: 0.03,\n d: [0.25, 0.32],\n vol: [0.08, 0.12],\n delay: [0.05, 0.08],\n }),\n ],\n 'a first aid kit opened and rummaged',\n ),\n foley('flashlight_click', click(2600, 0.3), 'the switch of a flashlight'),\n]\n\n/** The foley bank: register it in the engine (`engine.register(FOLEY_BANK)`). */\nexport const FOLEY_BANK: SoundBank = {\n id: 'foley',\n sounds: [...LEAF_FOLEY, ...ITEM_FOLEY],\n}\n\n/** What a picked-up item sounds like, by its heaviest material class. */\nexport const PICKUP_CLASSES = ['metal', 'plastic', 'glass', 'paper', 'fabric', 'wood', 'food'] as const\nexport type PickupClass = (typeof PICKUP_CLASSES)[number]\n\n/** The sound set of a leaf worked by hand: the ids it plays at the latch, while it turns, and as it meets the frame (gently, and slammed). */\nexport type LeafFoley = {\n readonly open: string\n readonly turn?: string\n readonly close: string\n readonly slam?: string\n readonly locked: string\n}\n\n/** The leaf sound sets the kit ships, by name; an item names one (`TestableItem.sounds.leaves`), else the room picks `wood_door` or `metal_door` by the leaf's material. */\nexport const LEAF_FOLEY_SETS: Readonly<Record<string, LeafFoley>> = {\n wood_door: {\n open: 'door_wood_open',\n turn: 'door_creak',\n close: 'door_wood_close',\n slam: 'door_wood_slam',\n locked: 'door_locked_rattle',\n },\n metal_door: {\n open: 'door_wood_open',\n turn: 'door_creak_metal',\n close: 'door_metal_open_close',\n locked: 'door_locked_rattle',\n },\n fridge: {\n open: 'fridge_open',\n close: 'fridge_close',\n locked: 'door_locked_rattle',\n },\n microwave: {\n open: 'microwave_open',\n close: 'microwave_close',\n locked: 'door_locked_rattle',\n },\n drawer: {\n open: 'drawer_open',\n close: 'drawer_close',\n locked: 'door_locked_rattle',\n },\n}\n","// The sounds of a body: footsteps by surface and gait, landings, the swing and the hit of each blow, hurt, bite and grab. Synthesised in the meantime\n// (the kit has no recorded take of these yet): each id is a set of four takes, with the numbers of each take apart, so the same action never\n// sounds twice the same. A recorded take replaces a variant by its id (`register` a bank with the same recipe id) without touching who plays it.\n//\n// How each one is built (what the ear picks first):\n// - a footstep is the heel (a low thump, how hollow the floor is) and then the roll to the toe (the surface's own texture: the grit of concrete,\n// the crunch of gravel, the ring of a metal sheet, the splash of water); a run hits harder, brighter and shorter, heel and toe almost together;\n// - a landing is the whole body's weight on the surface: a deeper thump, the surface texture longer, the clothes after;\n// - a swing is air: a band of noise sweeping up while the limb or the tool speeds up, loudest just before the contact, so it is started early\n// (`SWING_LEAD_SECONDS` of game-contracts) and the contact sound follows it;\n// - a hit on a body is skin (a slap), mass (a thud) and, for a blade, a wet tear; on an object it is only the striking part (knuckles, sole, steel)\n// and the material's own impact plays beside it.\nimport {\n BODY_SOUND_IDS,\n FOOTSTEP_SOUND_IDS,\n GAIT_IDS,\n LAND_SOUND_IDS,\n LANDING_IDS,\n SURFACE_IDS,\n SWING_LEAD_SECONDS,\n footstepSoundId,\n} from '@adatechnology/game-contracts'\nimport type { BlowId, BodySoundId, GaitId, LandingId, SurfaceId } from '@adatechnology/game-contracts'\n\nimport type { Falloff, Layer, SoundBank, SoundRecipe, SoundSet } from '../recipe'\nimport { sceneNoise, sceneTone, sceneVoice } from './scene'\n\n/** Takes per id. */\nexport const BODY_FOLEY_TAKES = 4\n\n/** How each take differs from the first: frequency factor, timing factor and level factor (fixed numbers, so takes are really apart). */\nconst TAKES: readonly { readonly f: number; readonly t: number; readonly v: number }[] = [\n { f: 1, t: 1, v: 1 },\n { f: 1.08, t: 0.9, v: 0.92 },\n { f: 0.93, t: 1.12, v: 1.05 },\n { f: 1.03, t: 1.05, v: 0.88 },\n]\n\n\n/** Footsteps fade fast with distance and lose their top: a step 10 m away is a quarter of the level, 30 m a few percent, and duller. */\nexport const FOOTSTEP_FALLOFF: Falloff = { model: 'inverse_square', k: 0.03, cutoffK: 0.03, minGain: 0.004 }\n/** Blows and body sounds carry further than a step. */\nexport const BODY_FALLOFF: Falloff = { model: 'inverse_square', k: 0.012, cutoffK: 0.015, minGain: 0.004 }\n\ntype Take = (typeof TAKES)[number]\n\n/** What a surface sounds like under a foot: the heel's thump and the texture of the roll. */\ntype SurfaceVoice = {\n /** The heel: thump pitch (Hz), its length (s) and level. */\n readonly heel: { readonly f: number; readonly d: number; readonly vol: number }\n /** The roll to the toe and the scuff: a filtered noise. */\n readonly roll: { readonly type: BiquadFilterType; readonly f: number; readonly q: number; readonly d: number; readonly vol: number }\n /** Grit, crunch or drips: short bursts spread after the heel. */\n readonly grains?: { readonly count: number; readonly f: number; readonly q: number; readonly spread: number; readonly vol: number }\n /** A ring of the floor itself (a hollow board, a metal sheet). */\n readonly ring?: readonly { readonly f: number; readonly d: number; readonly vol: number }[]\n /** Water: a sweep of the splash band. */\n readonly splash?: { readonly f: number; readonly f2: number; readonly d: number; readonly vol: number }\n}\n\nconst SURFACES: Readonly<Record<SurfaceId, SurfaceVoice>> = {\n concrete: { heel: { f: 95, d: 0.05, vol: 0.55 }, roll: { type: 'bandpass', f: 2300, q: 1.1, d: 0.05, vol: 0.38 }, grains: { count: 2, f: 4200, q: 2, spread: 0.04, vol: 0.08 } },\n asphalt: { heel: { f: 90, d: 0.05, vol: 0.5 }, roll: { type: 'bandpass', f: 1700, q: 0.9, d: 0.06, vol: 0.36 }, grains: { count: 4, f: 3600, q: 2.5, spread: 0.06, vol: 0.1 } },\n wood: { heel: { f: 130, d: 0.08, vol: 0.55 }, roll: { type: 'lowpass', f: 1300, q: 0.8, d: 0.06, vol: 0.3 }, ring: [{ f: 210, d: 0.1, vol: 0.18 }, { f: 470, d: 0.06, vol: 0.06 }] },\n tile: { heel: { f: 110, d: 0.04, vol: 0.45 }, roll: { type: 'bandpass', f: 3600, q: 2, d: 0.03, vol: 0.42 }, ring: [{ f: 1900, d: 0.03, vol: 0.05 }] },\n dirt: { heel: { f: 75, d: 0.06, vol: 0.45 }, roll: { type: 'lowpass', f: 750, q: 0.7, d: 0.09, vol: 0.4 }, grains: { count: 3, f: 1800, q: 1.5, spread: 0.07, vol: 0.06 } },\n grass: { heel: { f: 70, d: 0.05, vol: 0.32 }, roll: { type: 'highpass', f: 2600, q: 0.7, d: 0.13, vol: 0.28 }, grains: { count: 4, f: 5200, q: 1.2, spread: 0.1, vol: 0.07 } },\n gravel: { heel: { f: 80, d: 0.05, vol: 0.4 }, roll: { type: 'lowpass', f: 950, q: 0.8, d: 0.1, vol: 0.3 }, grains: { count: 8, f: 2600, q: 3, spread: 0.13, vol: 0.2 } },\n sand: { heel: { f: 65, d: 0.06, vol: 0.3 }, roll: { type: 'bandpass', f: 1500, q: 0.6, d: 0.16, vol: 0.3 }, grains: { count: 5, f: 4800, q: 1.5, spread: 0.12, vol: 0.05 } },\n metal: { heel: { f: 120, d: 0.05, vol: 0.5 }, roll: { type: 'bandpass', f: 2800, q: 1.5, d: 0.03, vol: 0.25 }, ring: [{ f: 420, d: 0.25, vol: 0.16 }, { f: 1130, d: 0.18, vol: 0.09 }, { f: 2470, d: 0.1, vol: 0.04 }] },\n water: { heel: { f: 70, d: 0.04, vol: 0.25 }, roll: { type: 'bandpass', f: 3000, q: 1.2, d: 0.1, vol: 0.18 }, splash: { f: 1100, f2: 380, d: 0.22, vol: 0.55 }, grains: { count: 4, f: 2400, q: 6, spread: 0.18, vol: 0.12 } },\n glass: { heel: { f: 90, d: 0.04, vol: 0.4 }, roll: { type: 'highpass', f: 4500, q: 0.8, d: 0.06, vol: 0.2 }, grains: { count: 9, f: 6200, q: 5, spread: 0.12, vol: 0.22 }, ring: [{ f: 3900, d: 0.04, vol: 0.04 }, { f: 5300, d: 0.03, vol: 0.03 }] },\n carpet: { heel: { f: 70, d: 0.05, vol: 0.32 }, roll: { type: 'lowpass', f: 420, q: 0.7, d: 0.07, vol: 0.3 } },\n}\n\nconst GAITS: Readonly<Record<GaitId, { readonly vol: number; readonly bright: number; readonly toe: number; readonly short: number }>> = {\n walk: { vol: 1, bright: 1, toe: 0.075, short: 1 },\n run: { vol: 1.35, bright: 1.25, toe: 0.035, short: 0.75 },\n}\n\nconst grainLayers = (g: NonNullable<SurfaceVoice['grains']>, take: Take, start: number, scale: number): Layer[] =>\n Array.from({ length: g.count }, (_, i) =>\n sceneNoise({ type: 'bandpass', f: [g.f * take.f * 0.85, g.f * take.f * 1.15], q: g.q, d: [0.008, 0.02], vol: g.vol * scale * take.v, delay: start + ((i + 0.5) / g.count) * g.spread * take.t }),\n )\n\nconst ringLayers = (rings: NonNullable<SurfaceVoice['ring']>, take: Take, scale: number, at = 0): Layer[] =>\n rings.map((r) => sceneTone({ f: r.f * take.f, d: r.d * take.t, vol: r.vol * scale * take.v, delay: at }))\n\n/** The layers of one foot on a surface: heel, roll to the toe, then grains, ring or splash. `weight` scales the heel (a landing is the whole body). */\nfunction footLayers(surface: SurfaceId, take: Take, gait: (typeof GAITS)[GaitId], weight = 1): Layer[] {\n const s = SURFACES[surface]\n const toe = gait.toe * take.t\n return [\n sceneTone({ f: s.heel.f * take.f * weight ** -0.3, f2: s.heel.f * take.f * 0.6, d: s.heel.d * gait.short * take.t * weight ** 0.5, vol: s.heel.vol * gait.vol * take.v * weight ** 0.5 }),\n sceneNoise({ type: 'lowpass', f: 500 * gait.bright, d: 0.02 * take.t, vol: 0.18 * gait.vol * take.v * weight ** 0.5 }),\n sceneNoise({ type: s.roll.type, f: [s.roll.f * take.f * gait.bright * 0.92, s.roll.f * take.f * gait.bright * 1.08], q: s.roll.q, d: s.roll.d * gait.short * take.t * weight ** 0.3, vol: s.roll.vol * gait.vol * take.v, delay: toe }),\n ...(s.grains ? grainLayers(s.grains, take, toe * 0.5, gait.vol * weight ** 0.5) : []),\n ...(s.ring ? ringLayers(s.ring, take, gait.vol * weight ** 0.5) : []),\n ...(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 })] : []),\n ]\n}\n\n/** The layers at `level` of their gain (a scene layer's gain is a number or a range). */\nconst quieter = (level: number, layers: readonly Layer[]): Layer[] =>\n layers.map((layer) => {\n const gain = layer.gain ?? 1\n if (typeof gain === 'number') return { ...layer, gain: gain * level }\n if (Array.isArray(gain)) return { ...layer, gain: [gain[0] * level, gain[1] * level] as const }\n return layer\n })\n\nconst recipe = (id: string, layers: readonly Layer[], falloff: Falloff, bus: SoundRecipe['bus'] = 'world'): SoundRecipe => ({ id, bus, pan: true, layers, falloff, sources: ['sdk'] })\n\nconst takeId = (id: string, index: number): string => `${id}_${String(index + 1).padStart(2, '0')}`\n\n/** The four takes of an id and the set that names them. */\nfunction takes(id: string, layersOf: (take: Take, index: number) => Layer[], falloff: Falloff, rate: readonly [number, number] = [0.96, 1.04], bus?: SoundRecipe['bus']): { sounds: SoundRecipe[]; set: SoundSet } {\n const sounds = TAKES.map((take, index) => recipe(takeId(id, index), layersOf(take, index), falloff, bus))\n return { sounds, set: { id, variants: sounds.map((sound) => sound.id), rate } }\n}\n\nconst footstep = (surface: SurfaceId, gait: GaitId) => takes(footstepSoundId(surface, gait), (take) => footLayers(surface, take, GAITS[gait]), FOOTSTEP_FALLOFF)\n\nconst LANDINGS: Readonly<Record<LandingId, { readonly weight: number; readonly cloth: number }>> = { light: { weight: 1.4, cloth: 0.12 }, heavy: { weight: 2.4, cloth: 0.22 } }\n\n/** A landing's layers are the feet's at the body's weight; this brings the whole of it under a blow on a body (C6). */\nconst LANDING_LEVEL = 0.65\n\nconst landing = (surface: SurfaceId, landing: LandingId) =>\n takes(\n `land_${surface}_${landing}`,\n (take) => quieter(LANDING_LEVEL, [\n // both feet, a hair apart, then the knees taking the weight (a low body thump) and the clothes settling\n ...footLayers(surface, take, GAITS.run, LANDINGS[landing].weight),\n ...footLayers(surface, { ...take, v: take.v * 0.6 }, GAITS.run, LANDINGS[landing].weight * 0.6).map((layer) => ({ ...layer, at: (typeof layer.at === 'number' ? layer.at : 0) + 0.018 * take.t })),\n sceneTone({ f: 60 * take.f, f2: 38, d: 0.14 * LANDINGS[landing].weight * take.t, vol: 0.22 * LANDINGS[landing].weight ** 0.7 * take.v, delay: 0.02 }),\n sceneNoise({ type: 'bandpass', f: [1800, 2600], q: 0.8, d: 0.18, vol: LANDINGS[landing].cloth * take.v, delay: 0.04 }),\n ]),\n FOOTSTEP_FALLOFF,\n )\n\nconst whoosh = (blow: BlowId, from: number, to: number, d: number, vol: number, q = 1.6): ((take: Take) => Layer[]) => (take) => [\n // the air: a band sweeping up as the limb speeds up; it peaks `SWING_LEAD_SECONDS` in, the moment before the contact, then dies away\n sceneNoise({ type: 'bandpass', f: from * take.f, f2: to * take.f, q, a: SWING_LEAD_SECONDS[blow], d: d * take.t, vol: vol * take.v }),\n sceneNoise({ type: 'lowpass', f: 600 * take.f, a: SWING_LEAD_SECONDS[blow], d: d * take.t * 0.8, vol: vol * 0.35 * take.v }),\n]\n\n/** Skin, mass and (optionally) bone: what a blow on a body is made of. */\nconst fleshHit = (o: { slap: number; slapF: number; thud: number; thudF: number; thudD: number; crack?: number; wet?: number }): ((take: Take) => Layer[]) => (take) => [\n sceneNoise({ type: 'bandpass', f: o.slapF * take.f, q: 1.2, d: 0.03 * take.t, vol: o.slap * take.v }),\n sceneNoise({ type: 'highpass', f: 3500 * take.f, d: 0.012, vol: o.slap * 0.4 * take.v }),\n sceneTone({ f: o.thudF * take.f, f2: o.thudF * 0.5, d: o.thudD * take.t, vol: o.thud * take.v }),\n sceneNoise({ type: 'lowpass', f: 600 * take.f, d: o.thudD * 1.2 * take.t, vol: o.thud * 0.5 * take.v }),\n ...(o.crack ? [sceneNoise({ type: 'highpass', f: 2500, d: 0.015, vol: o.crack * take.v, delay: 0.006 }), sceneTone({ wave: 'square', f: 900 * take.f, f2: 300, d: 0.02, vol: o.crack * 0.15 * take.v, delay: 0.006 })] : []),\n ...(o.wet ? [sceneNoise({ type: 'bandpass', f: 1400 * take.f, f2: 500, q: 2.5, d: 0.12 * take.t, vol: o.wet * take.v, delay: 0.01 })] : []),\n]\n\n/** What only the striking part sounds like on a hard thing (the material's impact plays beside it). */\nconst knock = (o: { clickF: number; click: number; tones: readonly (readonly [number, number, number])[] }): ((take: Take) => Layer[]) => (take) => [\n sceneNoise({ type: 'bandpass', f: o.clickF * take.f, q: 1.5, d: 0.018, vol: o.click * take.v }),\n ...o.tones.map(([f, d, vol]) => sceneTone({ f: f * take.f, d: d * take.t, vol: vol * take.v })),\n]\n\nconst voice = (o: { f0: number; f1: number; d: number; fA: number; fB: number; noise: number; vol: number }): ((take: Take) => Layer[]) => (take) => [\n sceneVoice({ f0: o.f0 * take.f, f1: o.f1 * take.f, d: o.d * take.t, fA: o.fA * take.f, fB: o.fB * take.f, noise: o.noise, vol: o.vol * take.v }),\n]\n\nconst BODY: Readonly<Record<BodySoundId, (take: Take) => Layer[]>> = {\n jump: (take) => [\n sceneNoise({ type: 'bandpass', f: 900 * take.f, f2: 1700 * take.f, q: 1, a: 0.03, d: 0.12, vol: 0.18 * take.v }),\n sceneNoise({ type: 'bandpass', f: 2200 * take.f, q: 0.8, d: 0.04, vol: 0.12 * take.v }),\n sceneTone({ f: 85 * take.f, f2: 60, d: 0.04, vol: 0.2 * take.v }),\n ],\n cloth_rustle: (take) => [\n { ...sceneNoise({ type: 'bandpass', f: 2400 * take.f, q: 0.8, a: 0.06, d: 0.22 * take.t, vol: 0.12 * take.v }), modulators: [{ target: 'gain', wave: 'triangle', rate: [9, 14], depth: 0.5 }] },\n ],\n body_fall: (take) => [\n sceneTone({ f: 58 * take.f, f2: 35, d: 0.28 * take.t, vol: 0.9 * take.v }),\n sceneNoise({ type: 'lowpass', f: 480 * take.f, d: 0.3 * take.t, vol: 0.55 * take.v }),\n sceneNoise({ type: 'bandpass', f: 1300 * take.f, q: 1, d: 0.05, vol: 0.3 * take.v }),\n // the limbs a moment later, and the clothes\n sceneTone({ f: 75 * take.f, f2: 45, d: 0.12, vol: 0.4 * take.v, delay: 0.13 * take.t }),\n sceneNoise({ type: 'bandpass', f: 2200, q: 0.8, d: 0.2, vol: 0.12 * take.v, delay: 0.05 }),\n ],\n fall_damage: (take) => [\n ...BODY.body_fall(take),\n sceneNoise({ type: 'highpass', f: 2800, d: 0.02, vol: 0.35 * take.v, delay: 0.01 }),\n ...voice({ f0: 170, f1: 110, d: 0.32, fA: 650, fB: 1150, noise: 0.25, vol: 0.32 })(take).map((layer) => ({ ...layer, at: 0.08 })),\n ],\n player_hurt: voice({ f0: 150, f1: 105, d: 0.26, fA: 620, fB: 1100, noise: 0.3, vol: 0.35 }),\n player_breath_run: (take) => [\n sceneNoise({ type: 'bandpass', f: 1200 * take.f, q: 1, a: 0.08, d: 0.22 * take.t, vol: 0.25 * take.v }),\n sceneNoise({ type: 'bandpass', f: 900 * take.f, q: 1, a: 0.06, d: 0.26 * take.t, vol: 0.3 * take.v, delay: 0.3 * take.t }),\n ],\n player_death: voice({ f0: 135, f1: 68, d: 1, fA: 560, fB: 980, noise: 0.35, vol: 0.4 }),\n bite: (take) => [\n sceneNoise({ type: 'highpass', f: 2600, d: 0.015, vol: 0.4 * take.v }),\n sceneNoise({ type: 'bandpass', f: 1600 * take.f, f2: 450, q: 2.2, d: 0.16 * take.t, vol: 0.55 * take.v, delay: 0.01 }),\n sceneNoise({ type: 'bandpass', f: 3200 * take.f, f2: 1800, q: 1.2, d: 0.22 * take.t, vol: 0.25 * take.v, delay: 0.09 }),\n sceneTone({ f: 120 * take.f, f2: 70, d: 0.06, vol: 0.3 * take.v }),\n ],\n grab: (take) => [\n sceneNoise({ type: 'bandpass', f: 1900 * take.f, q: 0.9, a: 0.004, d: 0.13 * take.t, vol: 0.32 * take.v }),\n sceneTone({ f: 95 * take.f, f2: 60, d: 0.07, vol: 0.3 * take.v }),\n sceneNoise({ type: 'lowpass', f: 700, d: 0.08, vol: 0.2 * take.v }),\n ],\n punch_swing: whoosh('punch', 450, 1500, 0.16, 0.9),\n punch_hit_body: fleshHit({ slap: 0.55, slapF: 1500, thud: 0.6, thudF: 115, thudD: 0.09 }),\n punch_hit_face: fleshHit({ slap: 0.75, slapF: 2300, thud: 0.45, thudF: 150, thudD: 0.07, crack: 0.25 }),\n punch_hit_object: knock({ clickF: 1800, click: 0.3, tones: [[210, 0.04, 0.25]] }),\n kick_swing: whoosh('kick', 280, 950, 0.22, 1, 1.3),\n kick_hit: fleshHit({ slap: 0.45, slapF: 1100, thud: 0.85, thudF: 82, thudD: 0.14 }),\n kick_hit_object: knock({ clickF: 1000, click: 0.3, tones: [[92, 0.08, 0.5]] }),\n shove_two_hands: (take) => [\n sceneNoise({ type: 'bandpass', f: 950 * take.f, q: 0.9, a: 0.01, d: 0.13 * take.t, vol: 0.38 * take.v }),\n sceneTone({ f: 100 * take.f, f2: 60, d: 0.1 * take.t, vol: 0.45 * take.v }),\n sceneNoise({ type: 'bandpass', f: 2300, q: 0.8, d: 0.16, vol: 0.12 * take.v, delay: 0.03 }),\n ],\n knife_swing: whoosh('blade', 1900, 4600, 0.12, 1.1, 2.2),\n knife_stab: fleshHit({ slap: 0.2, slapF: 1200, thud: 0.4, thudF: 160, thudD: 0.06, wet: 0.5 }),\n knife_slash: (take) => [\n sceneNoise({ type: 'highpass', f: 3200 * take.f, f2: 1800, d: 0.13 * take.t, vol: 0.35 * take.v }),\n sceneNoise({ type: 'bandpass', f: 1300 * take.f, f2: 600, q: 2.5, d: 0.12 * take.t, vol: 0.35 * take.v, delay: 0.02 }),\n ],\n knife_hit_object: knock({ clickF: 3200, click: 0.25, tones: [[2800, 0.08, 0.07], [4150, 0.06, 0.05]] }),\n blunt_swing: whoosh('blunt', 220, 760, 0.28, 1.1, 1.5),\n blunt_hit: fleshHit({ slap: 0.35, slapF: 900, thud: 1, thudF: 70, thudD: 0.18, crack: 0.3 }),\n blunt_hit_object: knock({ clickF: 1400, click: 0.35, tones: [[300, 0.12, 0.25], [760, 0.08, 0.12]] }),\n axe_swing: whoosh('chop', 190, 620, 0.3, 1.2, 1.4),\n axe_chop: fleshHit({ slap: 0.3, slapF: 1400, thud: 0.75, thudF: 140, thudD: 0.1, crack: 0.35, wet: 0.45 }),\n axe_hit_object: knock({ clickF: 2200, click: 0.4, tones: [[1500, 0.15, 0.1], [2300, 0.1, 0.06], [140, 0.1, 0.35]] }),\n}\n\nconst BODY_BUS: Partial<Record<BodySoundId, SoundRecipe['bus']>> = { player_hurt: 'voices', player_death: 'voices', player_breath_run: 'voices', fall_damage: 'voices' }\n\nconst built = [\n ...SURFACE_IDS.flatMap((surface) => GAIT_IDS.map((gait) => footstep(surface, gait))),\n ...SURFACE_IDS.flatMap((surface) => LANDING_IDS.map((l) => landing(surface, l))),\n ...BODY_SOUND_IDS.map((id) => takes(id, BODY[id], BODY_FALLOFF, id.endsWith('_swing') ? [0.94, 1.06] : [0.96, 1.04], BODY_BUS[id])),\n]\n\n/**\n * Every body sound of `game-contracts`' `BODY_FOLEY_IDS` as a set of four takes (`footstep_concrete_walk` plays `footstep_concrete_walk_01`..`_04`,\n * never the same twice in a row, at ±4% of rate). Register it in the engine the body plays on.\n */\nexport const BODY_FOLEY_BANK: SoundBank = {\n id: 'body_foley',\n sounds: built.flatMap((entry) => entry.sounds),\n sets: built.map((entry) => entry.set),\n}\n\n/** The ids the bank answers (the sets), in the contract's order. */\nexport const BODY_FOLEY_SET_IDS: readonly string[] = [...FOOTSTEP_SOUND_IDS, ...LAND_SOUND_IDS, ...BODY_SOUND_IDS]\n","import type { AudioListener, AudioSink, LoopHandle, SoundHandle, SoundRequest } from '@adatechnology/game-contracts'\n\nimport type { SoundBank } from '../recipe'\nimport type { AudioEngine, VoiceHandle } from './engine'\n\n/** An `AudioSink` (what a host lends its modules) that carries the engine behind it, so a module that wants more than `play` can use the engine. */\nexport type EngineSink = AudioSink & { readonly engine: AudioEngine }\n\n/** Lends an engine as the host's `audio`: sounds by key, loops, the listener, and banks registered into the same engine. */\nexport function createAudioSink(engine: AudioEngine): EngineSink {\n const playing = new Map<number, VoiceHandle>()\n return {\n engine,\n play(request: SoundRequest): SoundHandle | null {\n const handle = engine.play(request.sound, {\n ...(request.position ? { position: request.position } : {}),\n ...(request.volume === undefined ? {} : { volume: request.volume }),\n ...(request.params ? { params: request.params } : {}),\n ...(request.seed === undefined ? {} : { seed: request.seed }),\n ...(request.delay === undefined ? {} : { delay: request.delay }),\n ...(request.urgent ? { urgent: true } : {}),\n })\n if (!handle) return null\n playing.set(handle.id, handle)\n return { id: handle.id }\n },\n stop(handle) {\n playing.get(handle.id)?.stop()\n playing.delete(handle.id)\n },\n loop(sound, options): LoopHandle {\n const loop = engine.loop(sound)\n // the loop's place comes with the first set; `params.cutoff` drives the first filter\n let position = options?.position\n return {\n set: (state) => {\n position = state.position ?? position\n const cutoff = state.params?.['cutoff']\n loop.set({\n ...(state.volume === undefined ? {} : { volume: state.volume }),\n ...(state.frequency === undefined ? {} : { frequency: state.frequency }),\n ...(position ? { position } : {}),\n ...(cutoff === undefined ? {} : { cutoff }),\n })\n },\n stop: () => loop.stop(),\n }\n },\n setListener(listener: AudioListener) {\n engine.setListener(listener)\n },\n register(bank: unknown) {\n engine.register(bank as SoundBank)\n },\n preload(sounds) {\n void engine.loadSamples(sounds).catch(() => undefined)\n },\n }\n}\n"],"mappings":"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","names":["handle","layer","landing"]}