@adatechnology/game-audio 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1064) hide show
  1. package/README.md +44 -1
  2. package/assets/sfx/CREDITOS.md +2 -2
  3. package/dist/{chunk-KBTUANNG.js → chunk-C2K7XN2K.js} +294 -31
  4. package/dist/chunk-C2K7XN2K.js.map +1 -0
  5. package/dist/index.d.ts +113 -3
  6. package/dist/index.global.js +606 -205
  7. package/dist/index.global.js.map +1 -1
  8. package/dist/index.js +179 -8
  9. package/dist/index.js.map +1 -1
  10. package/dist/{locale-CJfDpWnI.d.ts → locale-BJMhMT0G.d.ts} +47 -1
  11. package/dist/testing.d.ts +4 -4
  12. package/dist/testing.js +1 -1
  13. package/package.json +2 -2
  14. package/assets/sfx/ambiente/ambience_city_day_01.ogg +0 -0
  15. package/assets/sfx/ambiente/ambience_city_day_02.ogg +0 -0
  16. package/assets/sfx/ambiente/ambience_construction_01.ogg +0 -0
  17. package/assets/sfx/ambiente/ambience_night_01.ogg +0 -0
  18. package/assets/sfx/ambiente/ambience_room_tone_01.ogg +0 -0
  19. package/assets/sfx/ambiente/ambience_room_tone_02.ogg +0 -0
  20. package/assets/sfx/ambiente/ambience_rural_day_01.ogg +0 -0
  21. package/assets/sfx/ambiente/ambience_rural_day_02.ogg +0 -0
  22. package/assets/sfx/ambiente/rain_loop_01.ogg +0 -0
  23. package/assets/sfx/ambiente/water_river_loop_01.ogg +0 -0
  24. package/assets/sfx/ambiente/water_river_loop_02.ogg +0 -0
  25. package/assets/sfx/ambiente/water_river_loop_03.ogg +0 -0
  26. package/assets/sfx/ambiente/water_splash_01.ogg +0 -0
  27. package/assets/sfx/ambiente/water_splash_02.ogg +0 -0
  28. package/assets/sfx/ambiente/water_splash_03.ogg +0 -0
  29. package/assets/sfx/ambiente/water_splash_04.ogg +0 -0
  30. package/assets/sfx/ambiente/water_splash_05.ogg +0 -0
  31. package/assets/sfx/ambiente/water_splash_06.ogg +0 -0
  32. package/assets/sfx/ambiente/water_splash_07.ogg +0 -0
  33. package/assets/sfx/ambiente/water_splash_08.ogg +0 -0
  34. package/assets/sfx/ambiente/water_splash_09.ogg +0 -0
  35. package/assets/sfx/ambiente/water_splash_10.ogg +0 -0
  36. package/assets/sfx/ambiente/water_splash_11.ogg +0 -0
  37. package/assets/sfx/ambiente/water_splash_12.ogg +0 -0
  38. package/assets/sfx/ambiente/water_splash_13.ogg +0 -0
  39. package/assets/sfx/ambiente/water_splash_14.ogg +0 -0
  40. package/assets/sfx/ambiente/water_splash_15.ogg +0 -0
  41. package/assets/sfx/armas/bolt_lift_medium_01.ogg +0 -0
  42. package/assets/sfx/armas/bolt_lift_medium_02.ogg +0 -0
  43. package/assets/sfx/armas/bolt_lift_medium_03.ogg +0 -0
  44. package/assets/sfx/armas/bolt_lift_medium_04.ogg +0 -0
  45. package/assets/sfx/armas/bolt_lift_medium_05.ogg +0 -0
  46. package/assets/sfx/armas/bolt_lock_medium_01.ogg +0 -0
  47. package/assets/sfx/armas/bolt_lock_medium_02.ogg +0 -0
  48. package/assets/sfx/armas/bolt_lock_medium_03.ogg +0 -0
  49. package/assets/sfx/armas/bolt_lock_medium_04.ogg +0 -0
  50. package/assets/sfx/armas/bolt_lock_medium_05.ogg +0 -0
  51. package/assets/sfx/armas/bolt_pull_heavy_01.ogg +0 -0
  52. package/assets/sfx/armas/bolt_pull_medium_01.ogg +0 -0
  53. package/assets/sfx/armas/bolt_pull_medium_02.ogg +0 -0
  54. package/assets/sfx/armas/bolt_pull_medium_03.ogg +0 -0
  55. package/assets/sfx/armas/bolt_pull_medium_04.ogg +0 -0
  56. package/assets/sfx/armas/bolt_pull_medium_05.ogg +0 -0
  57. package/assets/sfx/armas/bolt_pull_medium_06.ogg +0 -0
  58. package/assets/sfx/armas/bolt_push_heavy_01.ogg +0 -0
  59. package/assets/sfx/armas/bolt_push_medium_01.ogg +0 -0
  60. package/assets/sfx/armas/bolt_push_medium_02.ogg +0 -0
  61. package/assets/sfx/armas/bolt_push_medium_03.ogg +0 -0
  62. package/assets/sfx/armas/bolt_push_medium_04.ogg +0 -0
  63. package/assets/sfx/armas/bolt_push_medium_05.ogg +0 -0
  64. package/assets/sfx/armas/bolt_push_medium_06.ogg +0 -0
  65. package/assets/sfx/armas/casing_drop_concreto_01.ogg +0 -0
  66. package/assets/sfx/armas/casing_drop_concreto_02.ogg +0 -0
  67. package/assets/sfx/armas/casing_drop_concreto_03.ogg +0 -0
  68. package/assets/sfx/armas/casing_drop_metal_01.ogg +0 -0
  69. package/assets/sfx/armas/casing_drop_metal_02.ogg +0 -0
  70. package/assets/sfx/armas/casing_drop_metal_03.ogg +0 -0
  71. package/assets/sfx/armas/casing_drop_terra_01.ogg +0 -0
  72. package/assets/sfx/armas/casing_drop_terra_02.ogg +0 -0
  73. package/assets/sfx/armas/casing_drop_terra_03.ogg +0 -0
  74. package/assets/sfx/armas/charging_handle_pull_light_01.ogg +0 -0
  75. package/assets/sfx/armas/charging_handle_pull_light_02.ogg +0 -0
  76. package/assets/sfx/armas/charging_handle_pull_light_03.ogg +0 -0
  77. package/assets/sfx/armas/charging_handle_pull_light_04.ogg +0 -0
  78. package/assets/sfx/armas/charging_handle_pull_medium_01.ogg +0 -0
  79. package/assets/sfx/armas/charging_handle_pull_medium_02.ogg +0 -0
  80. package/assets/sfx/armas/charging_handle_pull_medium_03.ogg +0 -0
  81. package/assets/sfx/armas/charging_handle_pull_medium_04.ogg +0 -0
  82. package/assets/sfx/armas/charging_handle_pull_medium_05.ogg +0 -0
  83. package/assets/sfx/armas/charging_handle_release_medium_01.ogg +0 -0
  84. package/assets/sfx/armas/charging_handle_release_medium_02.ogg +0 -0
  85. package/assets/sfx/armas/charging_handle_release_medium_03.ogg +0 -0
  86. package/assets/sfx/armas/charging_handle_release_medium_04.ogg +0 -0
  87. package/assets/sfx/armas/charging_handle_release_medium_05.ogg +0 -0
  88. package/assets/sfx/armas/cylinder_close_light_01.ogg +0 -0
  89. package/assets/sfx/armas/cylinder_close_light_02.ogg +0 -0
  90. package/assets/sfx/armas/cylinder_close_light_03.ogg +0 -0
  91. package/assets/sfx/armas/cylinder_close_light_04.ogg +0 -0
  92. package/assets/sfx/armas/cylinder_close_light_05.ogg +0 -0
  93. package/assets/sfx/armas/cylinder_eject_light_01.ogg +0 -0
  94. package/assets/sfx/armas/cylinder_eject_light_02.ogg +0 -0
  95. package/assets/sfx/armas/cylinder_eject_light_03.ogg +0 -0
  96. package/assets/sfx/armas/cylinder_open_light_01.ogg +0 -0
  97. package/assets/sfx/armas/cylinder_open_light_02.ogg +0 -0
  98. package/assets/sfx/armas/cylinder_open_light_03.ogg +0 -0
  99. package/assets/sfx/armas/cylinder_open_light_04.ogg +0 -0
  100. package/assets/sfx/armas/cylinder_open_light_05.ogg +0 -0
  101. package/assets/sfx/armas/lever_close_medium_01.ogg +0 -0
  102. package/assets/sfx/armas/lever_close_medium_02.ogg +0 -0
  103. package/assets/sfx/armas/lever_open_medium_01.ogg +0 -0
  104. package/assets/sfx/armas/lever_open_medium_02.ogg +0 -0
  105. package/assets/sfx/armas/mag_out_heavy_01.ogg +0 -0
  106. package/assets/sfx/armas/mag_out_heavy_02.ogg +0 -0
  107. package/assets/sfx/armas/mag_out_light_01.ogg +0 -0
  108. package/assets/sfx/armas/mag_out_light_02.ogg +0 -0
  109. package/assets/sfx/armas/mag_out_light_03.ogg +0 -0
  110. package/assets/sfx/armas/mag_out_light_04.ogg +0 -0
  111. package/assets/sfx/armas/mag_out_medium_01.ogg +0 -0
  112. package/assets/sfx/armas/mag_out_medium_02.ogg +0 -0
  113. package/assets/sfx/armas/mag_out_medium_03.ogg +0 -0
  114. package/assets/sfx/armas/mag_seat_heavy_01.ogg +0 -0
  115. package/assets/sfx/armas/mag_seat_heavy_02.ogg +0 -0
  116. package/assets/sfx/armas/mag_seat_light_01.ogg +0 -0
  117. package/assets/sfx/armas/mag_seat_light_02.ogg +0 -0
  118. package/assets/sfx/armas/mag_seat_light_03.ogg +0 -0
  119. package/assets/sfx/armas/mag_seat_light_04.ogg +0 -0
  120. package/assets/sfx/armas/mag_seat_light_05.ogg +0 -0
  121. package/assets/sfx/armas/mag_seat_light_06.ogg +0 -0
  122. package/assets/sfx/armas/mag_seat_medium_01.ogg +0 -0
  123. package/assets/sfx/armas/mag_seat_medium_02.ogg +0 -0
  124. package/assets/sfx/armas/mag_seat_medium_03.ogg +0 -0
  125. package/assets/sfx/armas/pistol_22lr_close_01.ogg +0 -0
  126. package/assets/sfx/armas/pistol_22lr_close_02.ogg +0 -0
  127. package/assets/sfx/armas/pistol_22lr_far_01.ogg +0 -0
  128. package/assets/sfx/armas/pistol_22lr_far_02.ogg +0 -0
  129. package/assets/sfx/armas/pistol_22lr_far_03.ogg +0 -0
  130. package/assets/sfx/armas/pistol_22lr_far_04.ogg +0 -0
  131. package/assets/sfx/armas/pistol_45_close_01.ogg +0 -0
  132. package/assets/sfx/armas/pistol_45_close_02.ogg +0 -0
  133. package/assets/sfx/armas/pistol_45_close_03.ogg +0 -0
  134. package/assets/sfx/armas/pistol_45_close_04.ogg +0 -0
  135. package/assets/sfx/armas/pistol_45_close_05.ogg +0 -0
  136. package/assets/sfx/armas/pistol_45_far_01.ogg +0 -0
  137. package/assets/sfx/armas/pistol_45_far_02.ogg +0 -0
  138. package/assets/sfx/armas/pistol_45_far_03.ogg +0 -0
  139. package/assets/sfx/armas/pistol_45_far_04.ogg +0 -0
  140. package/assets/sfx/armas/pistol_9mm_close_01.ogg +0 -0
  141. package/assets/sfx/armas/pistol_9mm_close_02.ogg +0 -0
  142. package/assets/sfx/armas/pistol_9mm_close_03.ogg +0 -0
  143. package/assets/sfx/armas/pistol_9mm_close_04.ogg +0 -0
  144. package/assets/sfx/armas/pistol_9mm_close_05.ogg +0 -0
  145. package/assets/sfx/armas/pistol_9mm_close_06.ogg +0 -0
  146. package/assets/sfx/armas/pistol_9mm_far_01.ogg +0 -0
  147. package/assets/sfx/armas/pistol_9mm_far_02.ogg +0 -0
  148. package/assets/sfx/armas/pistol_9mm_far_03.ogg +0 -0
  149. package/assets/sfx/armas/pistol_9mm_far_04.ogg +0 -0
  150. package/assets/sfx/armas/pump_back_heavy_01.ogg +0 -0
  151. package/assets/sfx/armas/pump_back_heavy_02.ogg +0 -0
  152. package/assets/sfx/armas/pump_back_heavy_03.ogg +0 -0
  153. package/assets/sfx/armas/pump_back_heavy_04.ogg +0 -0
  154. package/assets/sfx/armas/pump_back_heavy_05.ogg +0 -0
  155. package/assets/sfx/armas/pump_forward_heavy_01.ogg +0 -0
  156. package/assets/sfx/armas/pump_forward_heavy_02.ogg +0 -0
  157. package/assets/sfx/armas/pump_forward_heavy_03.ogg +0 -0
  158. package/assets/sfx/armas/revolver_38_357_close_01.ogg +0 -0
  159. package/assets/sfx/armas/revolver_38_357_close_02.ogg +0 -0
  160. package/assets/sfx/armas/revolver_38_357_close_03.ogg +0 -0
  161. package/assets/sfx/armas/revolver_38_357_close_04.ogg +0 -0
  162. package/assets/sfx/armas/revolver_38_357_far_01.ogg +0 -0
  163. package/assets/sfx/armas/revolver_38_357_far_02.ogg +0 -0
  164. package/assets/sfx/armas/revolver_38_357_far_03.ogg +0 -0
  165. package/assets/sfx/armas/revolver_38_357_far_04.ogg +0 -0
  166. package/assets/sfx/armas/rifle_308_3006_close_01.ogg +0 -0
  167. package/assets/sfx/armas/rifle_308_3006_close_02.ogg +0 -0
  168. package/assets/sfx/armas/rifle_308_3006_close_03.ogg +0 -0
  169. package/assets/sfx/armas/rifle_308_3006_close_04.ogg +0 -0
  170. package/assets/sfx/armas/rifle_308_3006_close_05.ogg +0 -0
  171. package/assets/sfx/armas/rifle_308_3006_close_06.ogg +0 -0
  172. package/assets/sfx/armas/rifle_308_3006_far_01.ogg +0 -0
  173. package/assets/sfx/armas/rifle_308_3006_far_02.ogg +0 -0
  174. package/assets/sfx/armas/rifle_308_3006_far_03.ogg +0 -0
  175. package/assets/sfx/armas/rifle_308_3006_far_04.ogg +0 -0
  176. package/assets/sfx/armas/rifle_308_3006_far_05.ogg +0 -0
  177. package/assets/sfx/armas/rifle_308_3006_far_06.ogg +0 -0
  178. package/assets/sfx/armas/rifle_5_56_close_01.ogg +0 -0
  179. package/assets/sfx/armas/rifle_5_56_close_02.ogg +0 -0
  180. package/assets/sfx/armas/rifle_5_56_close_03.ogg +0 -0
  181. package/assets/sfx/armas/rifle_5_56_close_04.ogg +0 -0
  182. package/assets/sfx/armas/rifle_5_56_close_05.ogg +0 -0
  183. package/assets/sfx/armas/rifle_5_56_far_01.ogg +0 -0
  184. package/assets/sfx/armas/rifle_5_56_far_02.ogg +0 -0
  185. package/assets/sfx/armas/rifle_5_56_far_03.ogg +0 -0
  186. package/assets/sfx/armas/rifle_5_56_far_04.ogg +0 -0
  187. package/assets/sfx/armas/rifle_7_62x39_close_01.ogg +0 -0
  188. package/assets/sfx/armas/rifle_7_62x39_close_02.ogg +0 -0
  189. package/assets/sfx/armas/rifle_7_62x39_close_03.ogg +0 -0
  190. package/assets/sfx/armas/rifle_7_62x39_close_04.ogg +0 -0
  191. package/assets/sfx/armas/rifle_7_62x39_close_05.ogg +0 -0
  192. package/assets/sfx/armas/rifle_7_62x39_close_06.ogg +0 -0
  193. package/assets/sfx/armas/rifle_7_62x39_close_07.ogg +0 -0
  194. package/assets/sfx/armas/rifle_7_62x39_close_08.ogg +0 -0
  195. package/assets/sfx/armas/rifle_7_62x39_close_09.ogg +0 -0
  196. package/assets/sfx/armas/rifle_7_62x39_close_10.ogg +0 -0
  197. package/assets/sfx/armas/rifle_7_62x39_close_11.ogg +0 -0
  198. package/assets/sfx/armas/rifle_7_62x39_close_12.ogg +0 -0
  199. package/assets/sfx/armas/rifle_7_62x39_far_01.ogg +0 -0
  200. package/assets/sfx/armas/rifle_7_62x39_far_02.ogg +0 -0
  201. package/assets/sfx/armas/rifle_7_62x39_far_03.ogg +0 -0
  202. package/assets/sfx/armas/shell_insert_heavy_01.ogg +0 -0
  203. package/assets/sfx/armas/shell_insert_heavy_02.ogg +0 -0
  204. package/assets/sfx/armas/shell_insert_heavy_03.ogg +0 -0
  205. package/assets/sfx/armas/shell_insert_heavy_04.ogg +0 -0
  206. package/assets/sfx/armas/shell_insert_heavy_05.ogg +0 -0
  207. package/assets/sfx/armas/shell_insert_heavy_06.ogg +0 -0
  208. package/assets/sfx/armas/shell_insert_heavy_07.ogg +0 -0
  209. package/assets/sfx/armas/shell_insert_heavy_08.ogg +0 -0
  210. package/assets/sfx/armas/shell_insert_heavy_09.ogg +0 -0
  211. package/assets/sfx/armas/shotgun_12_close_01.ogg +0 -0
  212. package/assets/sfx/armas/shotgun_12_close_02.ogg +0 -0
  213. package/assets/sfx/armas/shotgun_12_close_03.ogg +0 -0
  214. package/assets/sfx/armas/shotgun_12_close_04.ogg +0 -0
  215. package/assets/sfx/armas/shotgun_12_close_05.ogg +0 -0
  216. package/assets/sfx/armas/shotgun_12_close_06.ogg +0 -0
  217. package/assets/sfx/armas/shotgun_12_far_01.ogg +0 -0
  218. package/assets/sfx/armas/shotgun_12_far_02.ogg +0 -0
  219. package/assets/sfx/armas/shotgun_12_far_03.ogg +0 -0
  220. package/assets/sfx/armas/shotgun_12_far_04.ogg +0 -0
  221. package/assets/sfx/armas/shotgun_12_far_05.ogg +0 -0
  222. package/assets/sfx/armas/shotgun_12_far_06.ogg +0 -0
  223. package/assets/sfx/armas/slide_release_light_01.ogg +0 -0
  224. package/assets/sfx/armas/slide_release_light_02.ogg +0 -0
  225. package/assets/sfx/armas/slide_release_light_03.ogg +0 -0
  226. package/assets/sfx/armas/slide_release_light_04.ogg +0 -0
  227. package/assets/sfx/armas/slide_release_light_05.ogg +0 -0
  228. package/assets/sfx/armas/slide_release_light_06.ogg +0 -0
  229. package/assets/sfx/armas/slide_release_medium_01.ogg +0 -0
  230. package/assets/sfx/armas/slide_release_medium_02.ogg +0 -0
  231. package/assets/sfx/armas/slide_release_medium_03.ogg +0 -0
  232. package/assets/sfx/armas/slide_release_medium_04.ogg +0 -0
  233. package/assets/sfx/armas/sniper_338_300wm_close_01.ogg +0 -0
  234. package/assets/sfx/armas/sniper_338_300wm_close_02.ogg +0 -0
  235. package/assets/sfx/armas/sniper_338_300wm_close_03.ogg +0 -0
  236. package/assets/sfx/armas/sniper_338_300wm_close_04.ogg +0 -0
  237. package/assets/sfx/armas/sniper_338_300wm_close_05.ogg +0 -0
  238. package/assets/sfx/armas/sniper_338_300wm_close_06.ogg +0 -0
  239. package/assets/sfx/armas/sniper_338_300wm_close_07.ogg +0 -0
  240. package/assets/sfx/armas/sniper_338_300wm_far_01.ogg +0 -0
  241. package/assets/sfx/armas/sniper_338_300wm_far_02.ogg +0 -0
  242. package/assets/sfx/armas/sniper_338_300wm_far_03.ogg +0 -0
  243. package/assets/sfx/armas/sniper_338_300wm_far_04.ogg +0 -0
  244. package/assets/sfx/armas/sniper_338_300wm_far_05.ogg +0 -0
  245. package/assets/sfx/armas/sniper_338_300wm_far_06.ogg +0 -0
  246. package/assets/sfx/armas/speedloader_light_01.ogg +0 -0
  247. package/assets/sfx/armas/speedloader_light_02.ogg +0 -0
  248. package/assets/sfx/armas/speedloader_light_03.ogg +0 -0
  249. package/assets/sfx/armas/speedloader_light_04.ogg +0 -0
  250. package/assets/sfx/armas/speedloader_light_05.ogg +0 -0
  251. package/assets/sfx/armas/speedloader_light_06.ogg +0 -0
  252. package/assets/sfx/armas/speedloader_light_07.ogg +0 -0
  253. package/assets/sfx/armas/speedloader_light_08.ogg +0 -0
  254. package/assets/sfx/armas/suppressed_pistol_close_01.ogg +0 -0
  255. package/assets/sfx/armas/suppressed_pistol_close_02.ogg +0 -0
  256. package/assets/sfx/armas/suppressed_pistol_close_03.ogg +0 -0
  257. package/assets/sfx/armas/suppressed_pistol_close_04.ogg +0 -0
  258. package/assets/sfx/armas/suppressed_pistol_close_05.ogg +0 -0
  259. package/assets/sfx/armas/suppressed_pistol_far_01.ogg +0 -0
  260. package/assets/sfx/armas/suppressed_pistol_far_02.ogg +0 -0
  261. package/assets/sfx/armas/suppressed_pistol_far_03.ogg +0 -0
  262. package/assets/sfx/armas/suppressed_pistol_far_04.ogg +0 -0
  263. package/assets/sfx/armas/suppressed_pistol_far_05.ogg +0 -0
  264. package/assets/sfx/armas/suppressed_rifle_close_01.ogg +0 -0
  265. package/assets/sfx/armas/suppressed_rifle_close_02.ogg +0 -0
  266. package/assets/sfx/armas/suppressed_rifle_close_03.ogg +0 -0
  267. package/assets/sfx/armas/suppressed_rifle_close_04.ogg +0 -0
  268. package/assets/sfx/armas/suppressed_rifle_far_01.ogg +0 -0
  269. package/assets/sfx/armas/suppressed_rifle_far_02.ogg +0 -0
  270. package/assets/sfx/armas/suppressed_rifle_far_03.ogg +0 -0
  271. package/assets/sfx/armas/suppressed_rifle_far_04.ogg +0 -0
  272. package/assets/sfx/explosoes-fogo/debris_rain_mixed_01.ogg +0 -0
  273. package/assets/sfx/explosoes-fogo/debris_rain_mixed_02.ogg +0 -0
  274. package/assets/sfx/explosoes-fogo/debris_rain_mixed_03.ogg +0 -0
  275. package/assets/sfx/explosoes-fogo/debris_rain_mixed_04.ogg +0 -0
  276. package/assets/sfx/explosoes-fogo/debris_rain_mixed_05.ogg +0 -0
  277. package/assets/sfx/explosoes-fogo/debris_rain_mixed_06.ogg +0 -0
  278. package/assets/sfx/explosoes-fogo/debris_rain_mixed_07.ogg +0 -0
  279. package/assets/sfx/explosoes-fogo/debris_rain_stone_01.ogg +0 -0
  280. package/assets/sfx/explosoes-fogo/debris_rain_stone_02.ogg +0 -0
  281. package/assets/sfx/explosoes-fogo/debris_rain_stone_03.ogg +0 -0
  282. package/assets/sfx/explosoes-fogo/debris_rain_stone_04.ogg +0 -0
  283. package/assets/sfx/explosoes-fogo/debris_rain_stone_05.ogg +0 -0
  284. package/assets/sfx/explosoes-fogo/debris_rain_stone_06.ogg +0 -0
  285. package/assets/sfx/explosoes-fogo/debris_rain_stone_07.ogg +0 -0
  286. package/assets/sfx/explosoes-fogo/debris_rain_stone_08.ogg +0 -0
  287. package/assets/sfx/explosoes-fogo/debris_rain_stone_09.ogg +0 -0
  288. package/assets/sfx/explosoes-fogo/explosion_big_01.ogg +0 -0
  289. package/assets/sfx/explosoes-fogo/explosion_big_02.ogg +0 -0
  290. package/assets/sfx/explosoes-fogo/explosion_big_03.ogg +0 -0
  291. package/assets/sfx/explosoes-fogo/explosion_big_04.ogg +0 -0
  292. package/assets/sfx/explosoes-fogo/explosion_big_05.ogg +0 -0
  293. package/assets/sfx/explosoes-fogo/explosion_car_01.ogg +0 -0
  294. package/assets/sfx/explosoes-fogo/explosion_car_02.ogg +0 -0
  295. package/assets/sfx/explosoes-fogo/explosion_car_03.ogg +0 -0
  296. package/assets/sfx/explosoes-fogo/explosion_car_04.ogg +0 -0
  297. package/assets/sfx/explosoes-fogo/explosion_far_close_01.ogg +0 -0
  298. package/assets/sfx/explosoes-fogo/explosion_far_close_02.ogg +0 -0
  299. package/assets/sfx/explosoes-fogo/explosion_far_close_03.ogg +0 -0
  300. package/assets/sfx/explosoes-fogo/explosion_far_close_04.ogg +0 -0
  301. package/assets/sfx/explosoes-fogo/explosion_flashbang_01.ogg +0 -0
  302. package/assets/sfx/explosoes-fogo/explosion_flashbang_02.ogg +0 -0
  303. package/assets/sfx/explosoes-fogo/explosion_grenade_01.ogg +0 -0
  304. package/assets/sfx/explosoes-fogo/explosion_grenade_02.ogg +0 -0
  305. package/assets/sfx/explosoes-fogo/explosion_grenade_03.ogg +0 -0
  306. package/assets/sfx/explosoes-fogo/explosion_grenade_04.ogg +0 -0
  307. package/assets/sfx/explosoes-fogo/explosion_grenade_05.ogg +0 -0
  308. package/assets/sfx/explosoes-fogo/explosion_grenade_06.ogg +0 -0
  309. package/assets/sfx/explosoes-fogo/explosion_small_bang_01.ogg +0 -0
  310. package/assets/sfx/explosoes-fogo/explosion_small_bang_02.ogg +0 -0
  311. package/assets/sfx/explosoes-fogo/explosion_small_bang_03.ogg +0 -0
  312. package/assets/sfx/explosoes-fogo/explosion_small_bang_04.ogg +0 -0
  313. package/assets/sfx/explosoes-fogo/explosion_small_bang_05.ogg +0 -0
  314. package/assets/sfx/explosoes-fogo/explosion_small_bang_06.ogg +0 -0
  315. package/assets/sfx/explosoes-fogo/explosion_small_bang_07.ogg +0 -0
  316. package/assets/sfx/explosoes-fogo/explosion_small_bang_08.ogg +0 -0
  317. package/assets/sfx/explosoes-fogo/explosion_small_bang_09.ogg +0 -0
  318. package/assets/sfx/explosoes-fogo/explosion_small_bang_10.ogg +0 -0
  319. package/assets/sfx/explosoes-fogo/fire_crackle_01.ogg +0 -0
  320. package/assets/sfx/explosoes-fogo/fire_crackle_02.ogg +0 -0
  321. package/assets/sfx/explosoes-fogo/fire_crackle_03.ogg +0 -0
  322. package/assets/sfx/explosoes-fogo/fire_crackle_05.ogg +0 -0
  323. package/assets/sfx/explosoes-fogo/fire_crackle_07.ogg +0 -0
  324. package/assets/sfx/explosoes-fogo/fire_extinguish_01.ogg +0 -0
  325. package/assets/sfx/explosoes-fogo/fire_extinguish_02.ogg +0 -0
  326. package/assets/sfx/explosoes-fogo/fire_ignite_01.ogg +0 -0
  327. package/assets/sfx/explosoes-fogo/fire_ignite_02.ogg +0 -0
  328. package/assets/sfx/explosoes-fogo/fire_ignite_03.ogg +0 -0
  329. package/assets/sfx/explosoes-fogo/fire_ignite_04.ogg +0 -0
  330. package/assets/sfx/explosoes-fogo/fire_loop_01.ogg +0 -0
  331. package/assets/sfx/explosoes-fogo/fire_loop_03.ogg +0 -0
  332. package/assets/sfx/explosoes-fogo/fire_loop_04.ogg +0 -0
  333. package/assets/sfx/explosoes-fogo/fire_loop_gas_01.ogg +0 -0
  334. package/assets/sfx/explosoes-fogo/fire_loop_gas_02.ogg +0 -0
  335. package/assets/sfx/explosoes-fogo/fire_loop_gas_03.ogg +0 -0
  336. package/assets/sfx/explosoes-fogo/fire_loop_gas_04.ogg +0 -0
  337. package/assets/sfx/explosoes-fogo/fire_loop_liquid_01.ogg +0 -0
  338. package/assets/sfx/explosoes-fogo/fire_loop_liquid_02.ogg +0 -0
  339. package/assets/sfx/explosoes-fogo/fire_loop_liquid_03.ogg +0 -0
  340. package/assets/sfx/explosoes-fogo/fire_loop_plastic_01.ogg +0 -0
  341. package/assets/sfx/explosoes-fogo/fire_loop_plastic_02.ogg +0 -0
  342. package/assets/sfx/explosoes-fogo/fire_loop_plastic_03.ogg +0 -0
  343. package/assets/sfx/explosoes-fogo/fire_loop_plastic_04.ogg +0 -0
  344. package/assets/sfx/explosoes-fogo/fire_loop_small_01.ogg +0 -0
  345. package/assets/sfx/explosoes-fogo/fire_pop_01.ogg +0 -0
  346. package/assets/sfx/explosoes-fogo/fire_pop_02.ogg +0 -0
  347. package/assets/sfx/explosoes-fogo/fire_pop_03.ogg +0 -0
  348. package/assets/sfx/explosoes-fogo/flamethrower_loop_01.ogg +0 -0
  349. package/assets/sfx/explosoes-fogo/gas_leak_01.ogg +0 -0
  350. package/assets/sfx/explosoes-fogo/molotov_break_ignite_01.ogg +0 -0
  351. package/assets/sfx/explosoes-fogo/molotov_break_ignite_02.ogg +0 -0
  352. package/assets/sfx/impactos/ceramic_hit_close_01.ogg +0 -0
  353. package/assets/sfx/impactos/concrete_block_drag_close_01.ogg +0 -0
  354. package/assets/sfx/impactos/concrete_block_drag_close_02.ogg +0 -0
  355. package/assets/sfx/impactos/concrete_block_drag_close_03.ogg +0 -0
  356. package/assets/sfx/impactos/concrete_block_drag_close_04.ogg +0 -0
  357. package/assets/sfx/impactos/concrete_block_drag_close_05.ogg +0 -0
  358. package/assets/sfx/impactos/concrete_block_drag_close_06.ogg +0 -0
  359. package/assets/sfx/impactos/concrete_block_drag_close_07.ogg +0 -0
  360. package/assets/sfx/impactos/crack_close_01.ogg +0 -0
  361. package/assets/sfx/impactos/crack_close_02.ogg +0 -0
  362. package/assets/sfx/impactos/crack_close_03.ogg +0 -0
  363. package/assets/sfx/impactos/crack_close_04.ogg +0 -0
  364. package/assets/sfx/impactos/crack_close_05.ogg +0 -0
  365. package/assets/sfx/impactos/crack_close_06.ogg +0 -0
  366. package/assets/sfx/impactos/crack_close_07.ogg +0 -0
  367. package/assets/sfx/impactos/crack_close_08.ogg +0 -0
  368. package/assets/sfx/impactos/crack_close_09.ogg +0 -0
  369. package/assets/sfx/impactos/crack_close_10.ogg +0 -0
  370. package/assets/sfx/impactos/crumble_close_01.ogg +0 -0
  371. package/assets/sfx/impactos/crumble_close_02.ogg +0 -0
  372. package/assets/sfx/impactos/crumble_close_03.ogg +0 -0
  373. package/assets/sfx/impactos/crumble_close_04.ogg +0 -0
  374. package/assets/sfx/impactos/crumble_close_05.ogg +0 -0
  375. package/assets/sfx/impactos/flesh_fruit_splat_close_01.ogg +0 -0
  376. package/assets/sfx/impactos/flesh_fruit_splat_close_02.ogg +0 -0
  377. package/assets/sfx/impactos/flesh_fruit_splat_close_03.ogg +0 -0
  378. package/assets/sfx/impactos/furniture_push_wood_close_01.ogg +0 -0
  379. package/assets/sfx/impactos/glass_blunt_heavy_close_01.ogg +0 -0
  380. package/assets/sfx/impactos/glass_blunt_heavy_close_02.ogg +0 -0
  381. package/assets/sfx/impactos/glass_blunt_heavy_close_03.ogg +0 -0
  382. package/assets/sfx/impactos/glass_blunt_heavy_close_04.ogg +0 -0
  383. package/assets/sfx/impactos/glass_blunt_heavy_close_05.ogg +0 -0
  384. package/assets/sfx/impactos/glass_blunt_light_close_01.ogg +0 -0
  385. package/assets/sfx/impactos/glass_blunt_light_close_02.ogg +0 -0
  386. package/assets/sfx/impactos/glass_blunt_light_close_03.ogg +0 -0
  387. package/assets/sfx/impactos/glass_blunt_light_close_04.ogg +0 -0
  388. package/assets/sfx/impactos/glass_blunt_light_close_05.ogg +0 -0
  389. package/assets/sfx/impactos/glass_blunt_medium_close_01.ogg +0 -0
  390. package/assets/sfx/impactos/glass_blunt_medium_close_02.ogg +0 -0
  391. package/assets/sfx/impactos/glass_blunt_medium_close_03.ogg +0 -0
  392. package/assets/sfx/impactos/glass_blunt_medium_close_04.ogg +0 -0
  393. package/assets/sfx/impactos/glass_blunt_medium_close_05.ogg +0 -0
  394. package/assets/sfx/impactos/glass_bottle_break_close_01.ogg +0 -0
  395. package/assets/sfx/impactos/glass_debris_fall_close_01.ogg +0 -0
  396. package/assets/sfx/impactos/glass_debris_fall_close_02.ogg +0 -0
  397. package/assets/sfx/impactos/glass_debris_fall_close_03.ogg +0 -0
  398. package/assets/sfx/impactos/glass_debris_fall_close_04.ogg +0 -0
  399. package/assets/sfx/impactos/glass_shatter_close_01.ogg +0 -0
  400. package/assets/sfx/impactos/glass_shatter_close_02.ogg +0 -0
  401. package/assets/sfx/impactos/glass_shatter_close_03.ogg +0 -0
  402. package/assets/sfx/impactos/glass_shatter_close_04.ogg +0 -0
  403. package/assets/sfx/impactos/glass_shatter_close_05.ogg +0 -0
  404. package/assets/sfx/impactos/glass_shatter_close_06.ogg +0 -0
  405. package/assets/sfx/impactos/glass_shatter_close_07.ogg +0 -0
  406. package/assets/sfx/impactos/glass_shatter_close_08.ogg +0 -0
  407. package/assets/sfx/impactos/glass_shatter_close_09.ogg +0 -0
  408. package/assets/sfx/impactos/gravel_hit_close_21.ogg +0 -0
  409. package/assets/sfx/impactos/gravel_hit_close_22.ogg +0 -0
  410. package/assets/sfx/impactos/gravel_hit_close_23.ogg +0 -0
  411. package/assets/sfx/impactos/gravel_hit_close_24.ogg +0 -0
  412. package/assets/sfx/impactos/gravel_hit_close_25.ogg +0 -0
  413. package/assets/sfx/impactos/gravel_hit_close_26.ogg +0 -0
  414. package/assets/sfx/impactos/gravel_hit_close_27.ogg +0 -0
  415. package/assets/sfx/impactos/gravel_hit_close_28.ogg +0 -0
  416. package/assets/sfx/impactos/gravel_hit_close_29.ogg +0 -0
  417. package/assets/sfx/impactos/impact_generic_light_close_01.ogg +0 -0
  418. package/assets/sfx/impactos/impact_generic_light_close_02.ogg +0 -0
  419. package/assets/sfx/impactos/impact_generic_light_close_03.ogg +0 -0
  420. package/assets/sfx/impactos/impact_generic_light_close_04.ogg +0 -0
  421. package/assets/sfx/impactos/impact_generic_light_close_05.ogg +0 -0
  422. package/assets/sfx/impactos/masonry_blunt_close_01.ogg +0 -0
  423. package/assets/sfx/impactos/masonry_blunt_close_02.ogg +0 -0
  424. package/assets/sfx/impactos/masonry_blunt_close_03.ogg +0 -0
  425. package/assets/sfx/impactos/masonry_blunt_close_04.ogg +0 -0
  426. package/assets/sfx/impactos/masonry_blunt_close_05.ogg +0 -0
  427. package/assets/sfx/impactos/masonry_blunt_close_06.ogg +0 -0
  428. package/assets/sfx/impactos/masonry_blunt_close_07.ogg +0 -0
  429. package/assets/sfx/impactos/masonry_bullet_close_01.ogg +0 -0
  430. package/assets/sfx/impactos/masonry_bullet_close_02.ogg +0 -0
  431. package/assets/sfx/impactos/masonry_bullet_close_03.ogg +0 -0
  432. package/assets/sfx/impactos/masonry_bullet_close_04.ogg +0 -0
  433. package/assets/sfx/impactos/masonry_bullet_close_05.ogg +0 -0
  434. package/assets/sfx/impactos/masonry_bullet_close_21.ogg +0 -0
  435. package/assets/sfx/impactos/masonry_bullet_close_22.ogg +0 -0
  436. package/assets/sfx/impactos/masonry_bullet_close_23.ogg +0 -0
  437. package/assets/sfx/impactos/masonry_bullet_close_24.ogg +0 -0
  438. package/assets/sfx/impactos/masonry_bullet_close_25.ogg +0 -0
  439. package/assets/sfx/impactos/masonry_bullet_close_26.ogg +0 -0
  440. package/assets/sfx/impactos/masonry_bullet_close_27.ogg +0 -0
  441. package/assets/sfx/impactos/masonry_bullet_close_28.ogg +0 -0
  442. package/assets/sfx/impactos/metal_blunt_close_01.ogg +0 -0
  443. package/assets/sfx/impactos/metal_blunt_close_02.ogg +0 -0
  444. package/assets/sfx/impactos/metal_blunt_close_03.ogg +0 -0
  445. package/assets/sfx/impactos/metal_blunt_close_04.ogg +0 -0
  446. package/assets/sfx/impactos/metal_blunt_close_05.ogg +0 -0
  447. package/assets/sfx/impactos/metal_blunt_heavy_close_01.ogg +0 -0
  448. package/assets/sfx/impactos/metal_blunt_heavy_close_02.ogg +0 -0
  449. package/assets/sfx/impactos/metal_blunt_heavy_close_03.ogg +0 -0
  450. package/assets/sfx/impactos/metal_blunt_heavy_close_04.ogg +0 -0
  451. package/assets/sfx/impactos/metal_blunt_heavy_close_05.ogg +0 -0
  452. package/assets/sfx/impactos/metal_blunt_light_close_01.ogg +0 -0
  453. package/assets/sfx/impactos/metal_blunt_light_close_02.ogg +0 -0
  454. package/assets/sfx/impactos/metal_blunt_light_close_03.ogg +0 -0
  455. package/assets/sfx/impactos/metal_blunt_light_close_04.ogg +0 -0
  456. package/assets/sfx/impactos/metal_blunt_light_close_05.ogg +0 -0
  457. package/assets/sfx/impactos/metal_blunt_medium_close_01.ogg +0 -0
  458. package/assets/sfx/impactos/metal_blunt_medium_close_02.ogg +0 -0
  459. package/assets/sfx/impactos/metal_blunt_medium_close_03.ogg +0 -0
  460. package/assets/sfx/impactos/metal_blunt_medium_close_04.ogg +0 -0
  461. package/assets/sfx/impactos/metal_blunt_medium_close_05.ogg +0 -0
  462. package/assets/sfx/impactos/metal_bullet_close_01.ogg +0 -0
  463. package/assets/sfx/impactos/metal_bullet_close_02.ogg +0 -0
  464. package/assets/sfx/impactos/metal_bullet_close_03.ogg +0 -0
  465. package/assets/sfx/impactos/metal_bullet_close_04.ogg +0 -0
  466. package/assets/sfx/impactos/metal_bullet_close_05.ogg +0 -0
  467. package/assets/sfx/impactos/metal_bullet_close_06.ogg +0 -0
  468. package/assets/sfx/impactos/metal_bullet_close_21.ogg +0 -0
  469. package/assets/sfx/impactos/metal_bullet_close_22.ogg +0 -0
  470. package/assets/sfx/impactos/metal_bullet_close_23.ogg +0 -0
  471. package/assets/sfx/impactos/metal_bullet_close_24.ogg +0 -0
  472. package/assets/sfx/impactos/metal_bullet_close_25.ogg +0 -0
  473. package/assets/sfx/impactos/metal_bullet_close_26.ogg +0 -0
  474. package/assets/sfx/impactos/metal_bullet_close_27.ogg +0 -0
  475. package/assets/sfx/impactos/metal_bullet_close_28.ogg +0 -0
  476. package/assets/sfx/impactos/metal_bullet_close_29.ogg +0 -0
  477. package/assets/sfx/impactos/metal_bullet_close_30.ogg +0 -0
  478. package/assets/sfx/impactos/metal_bullet_close_31.ogg +0 -0
  479. package/assets/sfx/impactos/metal_bullet_close_32.ogg +0 -0
  480. package/assets/sfx/impactos/metal_bullet_close_33.ogg +0 -0
  481. package/assets/sfx/impactos/metal_bullet_close_34.ogg +0 -0
  482. package/assets/sfx/impactos/metal_fall_close_01.ogg +0 -0
  483. package/assets/sfx/impactos/metal_fall_close_02.ogg +0 -0
  484. package/assets/sfx/impactos/metal_fall_close_03.ogg +0 -0
  485. package/assets/sfx/impactos/metal_fall_close_04.ogg +0 -0
  486. package/assets/sfx/impactos/metal_fall_close_05.ogg +0 -0
  487. package/assets/sfx/impactos/metal_fall_close_06.ogg +0 -0
  488. package/assets/sfx/impactos/metal_fall_close_07.ogg +0 -0
  489. package/assets/sfx/impactos/metal_fall_close_08.ogg +0 -0
  490. package/assets/sfx/impactos/metal_fall_close_09.ogg +0 -0
  491. package/assets/sfx/impactos/metal_fall_close_10.ogg +0 -0
  492. package/assets/sfx/impactos/metal_thin_close_01.ogg +0 -0
  493. package/assets/sfx/impactos/metal_thin_close_02.ogg +0 -0
  494. package/assets/sfx/impactos/metal_thin_close_03.ogg +0 -0
  495. package/assets/sfx/impactos/metal_thin_close_04.ogg +0 -0
  496. package/assets/sfx/impactos/metal_thin_close_05.ogg +0 -0
  497. package/assets/sfx/impactos/metal_thin_close_06.ogg +0 -0
  498. package/assets/sfx/impactos/metal_thin_close_07.ogg +0 -0
  499. package/assets/sfx/impactos/metal_thin_close_08.ogg +0 -0
  500. package/assets/sfx/impactos/metal_thin_close_09.ogg +0 -0
  501. package/assets/sfx/impactos/metal_thin_close_10.ogg +0 -0
  502. package/assets/sfx/impactos/metal_thin_close_11.ogg +0 -0
  503. package/assets/sfx/impactos/metal_thin_close_12.ogg +0 -0
  504. package/assets/sfx/impactos/metal_thin_close_13.ogg +0 -0
  505. package/assets/sfx/impactos/metal_thin_close_14.ogg +0 -0
  506. package/assets/sfx/impactos/metal_thin_close_15.ogg +0 -0
  507. package/assets/sfx/impactos/metal_thin_close_16.ogg +0 -0
  508. package/assets/sfx/impactos/metal_thin_close_17.ogg +0 -0
  509. package/assets/sfx/impactos/metal_thin_close_18.ogg +0 -0
  510. package/assets/sfx/impactos/metal_thin_close_19.ogg +0 -0
  511. package/assets/sfx/impactos/metal_thin_close_20.ogg +0 -0
  512. package/assets/sfx/impactos/metal_thin_close_21.ogg +0 -0
  513. package/assets/sfx/impactos/metal_thin_close_22.ogg +0 -0
  514. package/assets/sfx/impactos/metal_thin_close_23.ogg +0 -0
  515. package/assets/sfx/impactos/metal_thin_close_24.ogg +0 -0
  516. package/assets/sfx/impactos/metal_thin_close_25.ogg +0 -0
  517. package/assets/sfx/impactos/metal_thin_close_26.ogg +0 -0
  518. package/assets/sfx/impactos/paper_tear_close_01.ogg +0 -0
  519. package/assets/sfx/impactos/paper_tear_close_02.ogg +0 -0
  520. package/assets/sfx/impactos/plastic_hit_close_01.ogg +0 -0
  521. package/assets/sfx/impactos/plastic_hit_close_02.ogg +0 -0
  522. package/assets/sfx/impactos/plastic_hit_close_03.ogg +0 -0
  523. package/assets/sfx/impactos/plastic_hit_close_04.ogg +0 -0
  524. package/assets/sfx/impactos/ricochet_metal_close_21.ogg +0 -0
  525. package/assets/sfx/impactos/ricochet_metal_close_22.ogg +0 -0
  526. package/assets/sfx/impactos/ricochet_metal_close_23.ogg +0 -0
  527. package/assets/sfx/impactos/ricochet_metal_close_24.ogg +0 -0
  528. package/assets/sfx/impactos/ricochet_metal_close_25.ogg +0 -0
  529. package/assets/sfx/impactos/ricochet_metal_close_26.ogg +0 -0
  530. package/assets/sfx/impactos/ricochet_metal_close_27.ogg +0 -0
  531. package/assets/sfx/impactos/ricochet_metal_close_28.ogg +0 -0
  532. package/assets/sfx/impactos/rubble_falling_close_01.ogg +0 -0
  533. package/assets/sfx/impactos/rubble_falling_close_02.ogg +0 -0
  534. package/assets/sfx/impactos/rubble_falling_close_03.ogg +0 -0
  535. package/assets/sfx/impactos/rubble_falling_close_04.ogg +0 -0
  536. package/assets/sfx/impactos/rubble_falling_close_05.ogg +0 -0
  537. package/assets/sfx/impactos/rubble_falling_close_06.ogg +0 -0
  538. package/assets/sfx/impactos/rubble_falling_close_07.ogg +0 -0
  539. package/assets/sfx/impactos/rubble_falling_close_08.ogg +0 -0
  540. package/assets/sfx/impactos/rubble_falling_close_09.ogg +0 -0
  541. package/assets/sfx/impactos/soft_bullet_close_01.ogg +0 -0
  542. package/assets/sfx/impactos/soft_bullet_close_02.ogg +0 -0
  543. package/assets/sfx/impactos/soft_bullet_close_03.ogg +0 -0
  544. package/assets/sfx/impactos/soft_bullet_close_04.ogg +0 -0
  545. package/assets/sfx/impactos/soft_bullet_close_05.ogg +0 -0
  546. package/assets/sfx/impactos/soft_bullet_close_06.ogg +0 -0
  547. package/assets/sfx/impactos/soft_bullet_close_07.ogg +0 -0
  548. package/assets/sfx/impactos/soft_bullet_close_08.ogg +0 -0
  549. package/assets/sfx/impactos/soft_bullet_close_09.ogg +0 -0
  550. package/assets/sfx/impactos/soft_bullet_close_10.ogg +0 -0
  551. package/assets/sfx/impactos/soil_bullet_close_21.ogg +0 -0
  552. package/assets/sfx/impactos/soil_bullet_close_22.ogg +0 -0
  553. package/assets/sfx/impactos/soil_bullet_close_23.ogg +0 -0
  554. package/assets/sfx/impactos/wood_blunt_heavy_close_01.ogg +0 -0
  555. package/assets/sfx/impactos/wood_blunt_heavy_close_02.ogg +0 -0
  556. package/assets/sfx/impactos/wood_blunt_heavy_close_03.ogg +0 -0
  557. package/assets/sfx/impactos/wood_blunt_heavy_close_04.ogg +0 -0
  558. package/assets/sfx/impactos/wood_blunt_heavy_close_05.ogg +0 -0
  559. package/assets/sfx/impactos/wood_blunt_light_close_01.ogg +0 -0
  560. package/assets/sfx/impactos/wood_blunt_light_close_02.ogg +0 -0
  561. package/assets/sfx/impactos/wood_blunt_light_close_03.ogg +0 -0
  562. package/assets/sfx/impactos/wood_blunt_light_close_04.ogg +0 -0
  563. package/assets/sfx/impactos/wood_blunt_light_close_05.ogg +0 -0
  564. package/assets/sfx/impactos/wood_blunt_medium_close_01.ogg +0 -0
  565. package/assets/sfx/impactos/wood_blunt_medium_close_02.ogg +0 -0
  566. package/assets/sfx/impactos/wood_blunt_medium_close_03.ogg +0 -0
  567. package/assets/sfx/impactos/wood_blunt_medium_close_04.ogg +0 -0
  568. package/assets/sfx/impactos/wood_blunt_medium_close_05.ogg +0 -0
  569. package/assets/sfx/impactos/wood_fall_close_01.ogg +0 -0
  570. package/assets/sfx/impactos/wood_fall_close_02.ogg +0 -0
  571. package/assets/sfx/impactos/wood_fall_close_03.ogg +0 -0
  572. package/assets/sfx/impactos/wood_fall_close_04.ogg +0 -0
  573. package/assets/sfx/impactos/wood_fall_close_05.ogg +0 -0
  574. package/assets/sfx/impactos/wood_fall_close_06.ogg +0 -0
  575. package/assets/sfx/impactos/wood_fall_close_07.ogg +0 -0
  576. package/assets/sfx/impactos/wood_fall_close_08.ogg +0 -0
  577. package/assets/sfx/impactos/wood_fall_close_09.ogg +0 -0
  578. package/assets/sfx/impactos/wood_hit_close_01.ogg +0 -0
  579. package/assets/sfx/impactos/wood_hit_close_02.ogg +0 -0
  580. package/assets/sfx/impactos/wood_hit_close_03.ogg +0 -0
  581. package/assets/sfx/impactos/wood_hit_close_04.ogg +0 -0
  582. package/assets/sfx/impactos/wood_hit_close_05.ogg +0 -0
  583. package/assets/sfx/impactos/wood_hit_close_06.ogg +0 -0
  584. package/assets/sfx/impactos/wood_hit_close_07.ogg +0 -0
  585. package/assets/sfx/impactos/wood_hit_close_08.ogg +0 -0
  586. package/assets/sfx/impactos/wood_hit_close_09.ogg +0 -0
  587. package/assets/sfx/impactos/wood_hit_close_10.ogg +0 -0
  588. package/assets/sfx/impactos/wood_hit_close_11.ogg +0 -0
  589. package/assets/sfx/impactos/wood_hit_close_12.ogg +0 -0
  590. package/assets/sfx/impactos/wood_hit_close_13.ogg +0 -0
  591. package/assets/sfx/impactos/wood_hit_close_14.ogg +0 -0
  592. package/assets/sfx/impactos/wood_hit_close_21.ogg +0 -0
  593. package/assets/sfx/impactos/wood_hit_close_22.ogg +0 -0
  594. package/assets/sfx/impactos/wood_hit_close_23.ogg +0 -0
  595. package/assets/sfx/impactos/wood_hit_close_24.ogg +0 -0
  596. package/assets/sfx/impactos/wood_hit_close_25.ogg +0 -0
  597. package/assets/sfx/impactos/wood_hit_close_26.ogg +0 -0
  598. package/assets/sfx/impactos/wood_hit_close_27.ogg +0 -0
  599. package/assets/sfx/itens-portas/backpack_open_shut_01.ogg +0 -0
  600. package/assets/sfx/itens-portas/backpack_open_shut_02.ogg +0 -0
  601. package/assets/sfx/itens-portas/backpack_open_shut_03.ogg +0 -0
  602. package/assets/sfx/itens-portas/backpack_open_shut_04.ogg +0 -0
  603. package/assets/sfx/itens-portas/backpack_open_shut_05.ogg +0 -0
  604. package/assets/sfx/itens-portas/backpack_open_shut_06.ogg +0 -0
  605. package/assets/sfx/itens-portas/book_open_shut_01.ogg +0 -0
  606. package/assets/sfx/itens-portas/book_open_shut_02.ogg +0 -0
  607. package/assets/sfx/itens-portas/book_open_shut_03.ogg +0 -0
  608. package/assets/sfx/itens-portas/book_open_shut_04.ogg +0 -0
  609. package/assets/sfx/itens-portas/book_open_shut_05.ogg +0 -0
  610. package/assets/sfx/itens-portas/book_open_shut_06.ogg +0 -0
  611. package/assets/sfx/itens-portas/book_open_shut_07.ogg +0 -0
  612. package/assets/sfx/itens-portas/book_open_shut_08.ogg +0 -0
  613. package/assets/sfx/itens-portas/book_open_shut_09.ogg +0 -0
  614. package/assets/sfx/itens-portas/book_open_shut_10.ogg +0 -0
  615. package/assets/sfx/itens-portas/book_open_shut_11.ogg +0 -0
  616. package/assets/sfx/itens-portas/door_creak_01.ogg +0 -0
  617. package/assets/sfx/itens-portas/door_creak_02.ogg +0 -0
  618. package/assets/sfx/itens-portas/door_creak_03.ogg +0 -0
  619. package/assets/sfx/itens-portas/door_creak_06.ogg +0 -0
  620. package/assets/sfx/itens-portas/door_creak_07.ogg +0 -0
  621. package/assets/sfx/itens-portas/door_glass_sliding_01.ogg +0 -0
  622. package/assets/sfx/itens-portas/door_glass_sliding_02.ogg +0 -0
  623. package/assets/sfx/itens-portas/door_glass_sliding_03.ogg +0 -0
  624. package/assets/sfx/itens-portas/door_glass_sliding_04.ogg +0 -0
  625. package/assets/sfx/itens-portas/door_knock_01.ogg +0 -0
  626. package/assets/sfx/itens-portas/door_lock_unlock_01.ogg +0 -0
  627. package/assets/sfx/itens-portas/door_lock_unlock_02.ogg +0 -0
  628. package/assets/sfx/itens-portas/door_lock_unlock_03.ogg +0 -0
  629. package/assets/sfx/itens-portas/door_lock_unlock_04.ogg +0 -0
  630. package/assets/sfx/itens-portas/door_lock_unlock_05.ogg +0 -0
  631. package/assets/sfx/itens-portas/door_lock_unlock_06.ogg +0 -0
  632. package/assets/sfx/itens-portas/door_lock_unlock_07.ogg +0 -0
  633. package/assets/sfx/itens-portas/door_lock_unlock_08.ogg +0 -0
  634. package/assets/sfx/itens-portas/door_lock_unlock_09.ogg +0 -0
  635. package/assets/sfx/itens-portas/door_lock_unlock_10.ogg +0 -0
  636. package/assets/sfx/itens-portas/door_lock_unlock_11.ogg +0 -0
  637. package/assets/sfx/itens-portas/door_locked_rattle_01.ogg +0 -0
  638. package/assets/sfx/itens-portas/door_locked_rattle_02.ogg +0 -0
  639. package/assets/sfx/itens-portas/door_locked_rattle_03.ogg +0 -0
  640. package/assets/sfx/itens-portas/door_metal_open_shut_01.ogg +0 -0
  641. package/assets/sfx/itens-portas/door_metal_open_shut_02.ogg +0 -0
  642. package/assets/sfx/itens-portas/door_metal_open_shut_03.ogg +0 -0
  643. package/assets/sfx/itens-portas/door_metal_open_shut_04.ogg +0 -0
  644. package/assets/sfx/itens-portas/door_metal_open_shut_05.ogg +0 -0
  645. package/assets/sfx/itens-portas/door_metal_open_shut_06.ogg +0 -0
  646. package/assets/sfx/itens-portas/door_metal_open_shut_07.ogg +0 -0
  647. package/assets/sfx/itens-portas/door_slam_wood_01.ogg +0 -0
  648. package/assets/sfx/itens-portas/door_slam_wood_02.ogg +0 -0
  649. package/assets/sfx/itens-portas/door_slam_wood_03.ogg +0 -0
  650. package/assets/sfx/itens-portas/door_slam_wood_04.ogg +0 -0
  651. package/assets/sfx/itens-portas/door_wood_open_01.ogg +0 -0
  652. package/assets/sfx/itens-portas/door_wood_open_02.ogg +0 -0
  653. package/assets/sfx/itens-portas/door_wood_open_03.ogg +0 -0
  654. package/assets/sfx/itens-portas/door_wood_open_04.ogg +0 -0
  655. package/assets/sfx/itens-portas/door_wood_shut_01.ogg +0 -0
  656. package/assets/sfx/itens-portas/door_wood_shut_02.ogg +0 -0
  657. package/assets/sfx/itens-portas/door_wood_shut_03.ogg +0 -0
  658. package/assets/sfx/itens-portas/door_wood_shut_04.ogg +0 -0
  659. package/assets/sfx/itens-portas/door_wood_shut_05.ogg +0 -0
  660. package/assets/sfx/itens-portas/door_wood_shut_06.ogg +0 -0
  661. package/assets/sfx/itens-portas/door_wood_shut_07.ogg +0 -0
  662. package/assets/sfx/itens-portas/door_wood_shut_08.ogg +0 -0
  663. package/assets/sfx/itens-portas/drawer_open_01.ogg +0 -0
  664. package/assets/sfx/itens-portas/drawer_open_02.ogg +0 -0
  665. package/assets/sfx/itens-portas/drawer_shut_01.ogg +0 -0
  666. package/assets/sfx/itens-portas/drawer_shut_02.ogg +0 -0
  667. package/assets/sfx/itens-portas/item_drop_bag_01.ogg +0 -0
  668. package/assets/sfx/itens-portas/item_drop_bag_02.ogg +0 -0
  669. package/assets/sfx/itens-portas/item_drop_glass_01.ogg +0 -0
  670. package/assets/sfx/itens-portas/item_drop_metal_01.ogg +0 -0
  671. package/assets/sfx/itens-portas/item_drop_metal_02.ogg +0 -0
  672. package/assets/sfx/itens-portas/item_drop_metal_03.ogg +0 -0
  673. package/assets/sfx/itens-portas/item_drop_metal_04.ogg +0 -0
  674. package/assets/sfx/itens-portas/item_drop_metal_05.ogg +0 -0
  675. package/assets/sfx/itens-portas/item_drop_paper_01.ogg +0 -0
  676. package/assets/sfx/itens-portas/item_pickup_coins_01.ogg +0 -0
  677. package/assets/sfx/itens-portas/item_pickup_coins_02.ogg +0 -0
  678. package/assets/sfx/itens-portas/item_pickup_generic_01.ogg +0 -0
  679. package/assets/sfx/itens-portas/item_pickup_generic_02.ogg +0 -0
  680. package/assets/sfx/itens-portas/item_pickup_generic_03.ogg +0 -0
  681. package/assets/sfx/itens-portas/item_pickup_generic_04.ogg +0 -0
  682. package/assets/sfx/itens-portas/item_pickup_leather_01.ogg +0 -0
  683. package/assets/sfx/itens-portas/item_pickup_leather_02.ogg +0 -0
  684. package/assets/sfx/itens-portas/item_pickup_leather_03.ogg +0 -0
  685. package/assets/sfx/itens-portas/item_pickup_leather_04.ogg +0 -0
  686. package/assets/sfx/itens-portas/item_pickup_leather_05.ogg +0 -0
  687. package/assets/sfx/itens-portas/item_setdown_01.ogg +0 -0
  688. package/assets/sfx/itens-portas/item_setdown_02.ogg +0 -0
  689. package/assets/sfx/itens-portas/keys_jingle_01.ogg +0 -0
  690. package/assets/sfx/itens-portas/keys_jingle_02.ogg +0 -0
  691. package/assets/sfx/itens-portas/keys_jingle_03.ogg +0 -0
  692. package/assets/sfx/itens-portas/keys_jingle_04.ogg +0 -0
  693. package/assets/sfx/itens-portas/keys_jingle_05.ogg +0 -0
  694. package/assets/sfx/itens-portas/keys_jingle_06.ogg +0 -0
  695. package/assets/sfx/itens-portas/keys_jingle_07.ogg +0 -0
  696. package/assets/sfx/itens-portas/lever_pull_01.ogg +0 -0
  697. package/assets/sfx/itens-portas/lever_pull_02.ogg +0 -0
  698. package/assets/sfx/itens-portas/lever_pull_03.ogg +0 -0
  699. package/assets/sfx/itens-portas/lever_pull_04.ogg +0 -0
  700. package/assets/sfx/itens-portas/lever_pull_05.ogg +0 -0
  701. package/assets/sfx/itens-portas/lever_pull_06.ogg +0 -0
  702. package/assets/sfx/itens-portas/metal_latch_01.ogg +0 -0
  703. package/assets/sfx/itens-portas/metal_latch_02.ogg +0 -0
  704. package/assets/sfx/itens-portas/plates_hit_01.ogg +0 -0
  705. package/assets/sfx/itens-portas/plates_hit_02.ogg +0 -0
  706. package/assets/sfx/itens-portas/plates_hit_03.ogg +0 -0
  707. package/assets/sfx/itens-portas/plates_hit_04.ogg +0 -0
  708. package/assets/sfx/itens-portas/plates_hit_05.ogg +0 -0
  709. package/assets/sfx/itens-portas/plates_hit_06.ogg +0 -0
  710. package/assets/sfx/itens-portas/plates_hit_07.ogg +0 -0
  711. package/assets/sfx/itens-portas/plates_hit_08.ogg +0 -0
  712. package/assets/sfx/itens-portas/plates_hit_09.ogg +0 -0
  713. package/assets/sfx/itens-portas/plates_hit_10.ogg +0 -0
  714. package/assets/sfx/itens-portas/plates_slide_01.ogg +0 -0
  715. package/assets/sfx/itens-portas/plates_slide_02.ogg +0 -0
  716. package/assets/sfx/itens-portas/plates_slide_03.ogg +0 -0
  717. package/assets/sfx/itens-portas/plates_slide_04.ogg +0 -0
  718. package/assets/sfx/itens-portas/saw_wood_01.ogg +0 -0
  719. package/assets/sfx/itens-portas/switch_click_01.ogg +0 -0
  720. package/assets/sfx/itens-portas/switch_click_02.ogg +0 -0
  721. package/assets/sfx/itens-portas/switch_click_03.ogg +0 -0
  722. package/assets/sfx/itens-portas/switch_click_04.ogg +0 -0
  723. package/assets/sfx/itens-portas/toilet_flush_01.ogg +0 -0
  724. package/assets/sfx/itens-portas/tools_handling_01.ogg +0 -0
  725. package/assets/sfx/itens-portas/tools_handling_02.ogg +0 -0
  726. package/assets/sfx/itens-portas/tools_handling_03.ogg +0 -0
  727. package/assets/sfx/itens-portas/tools_handling_04.ogg +0 -0
  728. package/assets/sfx/itens-portas/tools_handling_05.ogg +0 -0
  729. package/assets/sfx/itens-portas/tools_handling_06.ogg +0 -0
  730. package/assets/sfx/itens-portas/tools_handling_07.ogg +0 -0
  731. package/assets/sfx/itens-portas/tools_handling_08.ogg +0 -0
  732. package/assets/sfx/itens-portas/tools_handling_09.ogg +0 -0
  733. package/assets/sfx/itens-portas/tools_handling_10.ogg +0 -0
  734. package/assets/sfx/itens-portas/tools_handling_11.ogg +0 -0
  735. package/assets/sfx/itens-portas/tools_handling_12.ogg +0 -0
  736. package/assets/sfx/itens-portas/tools_handling_13.ogg +0 -0
  737. package/assets/sfx/itens-portas/tools_handling_14.ogg +0 -0
  738. package/assets/sfx/itens-portas/tools_handling_15.ogg +0 -0
  739. package/assets/sfx/itens-portas/tools_handling_16.ogg +0 -0
  740. package/assets/sfx/itens-portas/water_drip_01.ogg +0 -0
  741. package/assets/sfx/itens-portas/water_drip_02.ogg +0 -0
  742. package/assets/sfx/itens-portas/water_drip_03.ogg +0 -0
  743. package/assets/sfx/itens-portas/water_drip_04.ogg +0 -0
  744. package/assets/sfx/itens-portas/water_faucet_01.ogg +0 -0
  745. package/assets/sfx/itens-portas/water_faucet_02.ogg +0 -0
  746. package/assets/sfx/itens-portas/water_faucet_03.ogg +0 -0
  747. package/assets/sfx/itens-portas/water_faucet_04.ogg +0 -0
  748. package/assets/sfx/itens-portas/water_faucet_05.ogg +0 -0
  749. package/assets/sfx/itens-portas/water_faucet_06.ogg +0 -0
  750. package/assets/sfx/itens-portas/water_faucet_07.ogg +0 -0
  751. package/assets/sfx/itens-portas/water_faucet_08.ogg +0 -0
  752. package/assets/sfx/itens-portas/water_faucet_09.ogg +0 -0
  753. package/assets/sfx/itens-portas/water_faucet_10.ogg +0 -0
  754. package/assets/sfx/personagem/axe_chop_01.ogg +0 -0
  755. package/assets/sfx/personagem/axe_chop_02.ogg +0 -0
  756. package/assets/sfx/personagem/blunt_hit_metal_01.ogg +0 -0
  757. package/assets/sfx/personagem/blunt_hit_metal_02.ogg +0 -0
  758. package/assets/sfx/personagem/blunt_hit_metal_03.ogg +0 -0
  759. package/assets/sfx/personagem/blunt_hit_metal_04.ogg +0 -0
  760. package/assets/sfx/personagem/blunt_hit_metal_05.ogg +0 -0
  761. package/assets/sfx/personagem/body_fall_01.ogg +0 -0
  762. package/assets/sfx/personagem/body_fall_02.ogg +0 -0
  763. package/assets/sfx/personagem/body_fall_03.ogg +0 -0
  764. package/assets/sfx/personagem/body_fall_04.ogg +0 -0
  765. package/assets/sfx/personagem/body_fall_05.ogg +0 -0
  766. package/assets/sfx/personagem/cloth_rustle_01.ogg +0 -0
  767. package/assets/sfx/personagem/cloth_rustle_02.ogg +0 -0
  768. package/assets/sfx/personagem/cloth_rustle_03.ogg +0 -0
  769. package/assets/sfx/personagem/cloth_rustle_04.ogg +0 -0
  770. package/assets/sfx/personagem/cloth_rustle_05.ogg +0 -0
  771. package/assets/sfx/personagem/cloth_rustle_06.ogg +0 -0
  772. package/assets/sfx/personagem/cloth_rustle_07.ogg +0 -0
  773. package/assets/sfx/personagem/cloth_rustle_08.ogg +0 -0
  774. package/assets/sfx/personagem/cloth_rustle_09.ogg +0 -0
  775. package/assets/sfx/personagem/cloth_rustle_10.ogg +0 -0
  776. package/assets/sfx/personagem/cloth_rustle_11.ogg +0 -0
  777. package/assets/sfx/personagem/cloth_rustle_12.ogg +0 -0
  778. package/assets/sfx/personagem/cloth_rustle_13.ogg +0 -0
  779. package/assets/sfx/personagem/cloth_rustle_14.ogg +0 -0
  780. package/assets/sfx/personagem/drink_gulp_01.ogg +0 -0
  781. package/assets/sfx/personagem/drink_gulp_02.ogg +0 -0
  782. package/assets/sfx/personagem/drink_gulp_03.ogg +0 -0
  783. package/assets/sfx/personagem/footstep_carpet_alt_01.ogg +0 -0
  784. package/assets/sfx/personagem/footstep_carpet_alt_02.ogg +0 -0
  785. package/assets/sfx/personagem/footstep_carpet_alt_03.ogg +0 -0
  786. package/assets/sfx/personagem/footstep_carpet_alt_04.ogg +0 -0
  787. package/assets/sfx/personagem/footstep_carpet_alt_05.ogg +0 -0
  788. package/assets/sfx/personagem/footstep_concrete_alt_01.ogg +0 -0
  789. package/assets/sfx/personagem/footstep_concrete_alt_02.ogg +0 -0
  790. package/assets/sfx/personagem/footstep_concrete_alt_03.ogg +0 -0
  791. package/assets/sfx/personagem/footstep_concrete_alt_04.ogg +0 -0
  792. package/assets/sfx/personagem/footstep_concrete_alt_05.ogg +0 -0
  793. package/assets/sfx/personagem/footstep_concrete_run_01.ogg +0 -0
  794. package/assets/sfx/personagem/footstep_concrete_run_02.ogg +0 -0
  795. package/assets/sfx/personagem/footstep_concrete_run_03.ogg +0 -0
  796. package/assets/sfx/personagem/footstep_concrete_run_04.ogg +0 -0
  797. package/assets/sfx/personagem/footstep_concrete_run_05.ogg +0 -0
  798. package/assets/sfx/personagem/footstep_concrete_walk_01.ogg +0 -0
  799. package/assets/sfx/personagem/footstep_concrete_walk_02.ogg +0 -0
  800. package/assets/sfx/personagem/footstep_concrete_walk_03.ogg +0 -0
  801. package/assets/sfx/personagem/footstep_concrete_walk_04.ogg +0 -0
  802. package/assets/sfx/personagem/footstep_concrete_walk_05.ogg +0 -0
  803. package/assets/sfx/personagem/footstep_dirt_run_01.ogg +0 -0
  804. package/assets/sfx/personagem/footstep_dirt_run_02.ogg +0 -0
  805. package/assets/sfx/personagem/footstep_dirt_run_03.ogg +0 -0
  806. package/assets/sfx/personagem/footstep_dirt_run_04.ogg +0 -0
  807. package/assets/sfx/personagem/footstep_dirt_run_05.ogg +0 -0
  808. package/assets/sfx/personagem/footstep_dirt_walk_01.ogg +0 -0
  809. package/assets/sfx/personagem/footstep_dirt_walk_02.ogg +0 -0
  810. package/assets/sfx/personagem/footstep_dirt_walk_03.ogg +0 -0
  811. package/assets/sfx/personagem/footstep_dirt_walk_04.ogg +0 -0
  812. package/assets/sfx/personagem/footstep_dirt_walk_05.ogg +0 -0
  813. package/assets/sfx/personagem/footstep_generic_alt_01.ogg +0 -0
  814. package/assets/sfx/personagem/footstep_generic_alt_02.ogg +0 -0
  815. package/assets/sfx/personagem/footstep_generic_alt_03.ogg +0 -0
  816. package/assets/sfx/personagem/footstep_generic_alt_04.ogg +0 -0
  817. package/assets/sfx/personagem/footstep_generic_alt_05.ogg +0 -0
  818. package/assets/sfx/personagem/footstep_generic_alt_06.ogg +0 -0
  819. package/assets/sfx/personagem/footstep_generic_alt_07.ogg +0 -0
  820. package/assets/sfx/personagem/footstep_generic_alt_08.ogg +0 -0
  821. package/assets/sfx/personagem/footstep_generic_alt_09.ogg +0 -0
  822. package/assets/sfx/personagem/footstep_generic_alt_10.ogg +0 -0
  823. package/assets/sfx/personagem/footstep_grass_alt2_01.ogg +0 -0
  824. package/assets/sfx/personagem/footstep_grass_alt2_02.ogg +0 -0
  825. package/assets/sfx/personagem/footstep_grass_alt2_03.ogg +0 -0
  826. package/assets/sfx/personagem/footstep_grass_alt2_04.ogg +0 -0
  827. package/assets/sfx/personagem/footstep_grass_alt_01.ogg +0 -0
  828. package/assets/sfx/personagem/footstep_grass_alt_02.ogg +0 -0
  829. package/assets/sfx/personagem/footstep_grass_alt_03.ogg +0 -0
  830. package/assets/sfx/personagem/footstep_grass_alt_04.ogg +0 -0
  831. package/assets/sfx/personagem/footstep_grass_alt_05.ogg +0 -0
  832. package/assets/sfx/personagem/footstep_grass_run_01.ogg +0 -0
  833. package/assets/sfx/personagem/footstep_grass_run_02.ogg +0 -0
  834. package/assets/sfx/personagem/footstep_grass_run_03.ogg +0 -0
  835. package/assets/sfx/personagem/footstep_grass_run_04.ogg +0 -0
  836. package/assets/sfx/personagem/footstep_grass_run_05.ogg +0 -0
  837. package/assets/sfx/personagem/footstep_grass_walk_01.ogg +0 -0
  838. package/assets/sfx/personagem/footstep_grass_walk_02.ogg +0 -0
  839. package/assets/sfx/personagem/footstep_grass_walk_03.ogg +0 -0
  840. package/assets/sfx/personagem/footstep_grass_walk_04.ogg +0 -0
  841. package/assets/sfx/personagem/footstep_grass_walk_05.ogg +0 -0
  842. package/assets/sfx/personagem/footstep_hard_alt_01.ogg +0 -0
  843. package/assets/sfx/personagem/footstep_hard_alt_02.ogg +0 -0
  844. package/assets/sfx/personagem/footstep_hard_alt_03.ogg +0 -0
  845. package/assets/sfx/personagem/footstep_hard_alt_04.ogg +0 -0
  846. package/assets/sfx/personagem/footstep_hard_alt_05.ogg +0 -0
  847. package/assets/sfx/personagem/footstep_hard_alt_06.ogg +0 -0
  848. package/assets/sfx/personagem/footstep_hard_alt_07.ogg +0 -0
  849. package/assets/sfx/personagem/footstep_hard_alt_08.ogg +0 -0
  850. package/assets/sfx/personagem/footstep_hard_alt_09.ogg +0 -0
  851. package/assets/sfx/personagem/footstep_metal_run_01.ogg +0 -0
  852. package/assets/sfx/personagem/footstep_metal_run_02.ogg +0 -0
  853. package/assets/sfx/personagem/footstep_metal_run_03.ogg +0 -0
  854. package/assets/sfx/personagem/footstep_metal_run_04.ogg +0 -0
  855. package/assets/sfx/personagem/footstep_metal_run_05.ogg +0 -0
  856. package/assets/sfx/personagem/footstep_metal_walk_01.ogg +0 -0
  857. package/assets/sfx/personagem/footstep_metal_walk_02.ogg +0 -0
  858. package/assets/sfx/personagem/footstep_metal_walk_03.ogg +0 -0
  859. package/assets/sfx/personagem/footstep_metal_walk_04.ogg +0 -0
  860. package/assets/sfx/personagem/footstep_metal_walk_05.ogg +0 -0
  861. package/assets/sfx/personagem/footstep_snow_alt_01.ogg +0 -0
  862. package/assets/sfx/personagem/footstep_snow_alt_02.ogg +0 -0
  863. package/assets/sfx/personagem/footstep_snow_alt_03.ogg +0 -0
  864. package/assets/sfx/personagem/footstep_snow_alt_04.ogg +0 -0
  865. package/assets/sfx/personagem/footstep_snow_alt_05.ogg +0 -0
  866. package/assets/sfx/personagem/footstep_snow_run_01.ogg +0 -0
  867. package/assets/sfx/personagem/footstep_snow_run_02.ogg +0 -0
  868. package/assets/sfx/personagem/footstep_snow_run_03.ogg +0 -0
  869. package/assets/sfx/personagem/footstep_snow_run_04.ogg +0 -0
  870. package/assets/sfx/personagem/footstep_snow_run_05.ogg +0 -0
  871. package/assets/sfx/personagem/footstep_snow_walk_01.ogg +0 -0
  872. package/assets/sfx/personagem/footstep_snow_walk_02.ogg +0 -0
  873. package/assets/sfx/personagem/footstep_snow_walk_03.ogg +0 -0
  874. package/assets/sfx/personagem/footstep_snow_walk_04.ogg +0 -0
  875. package/assets/sfx/personagem/footstep_snow_walk_05.ogg +0 -0
  876. package/assets/sfx/personagem/footstep_wood_alt_01.ogg +0 -0
  877. package/assets/sfx/personagem/footstep_wood_alt_02.ogg +0 -0
  878. package/assets/sfx/personagem/footstep_wood_alt_03.ogg +0 -0
  879. package/assets/sfx/personagem/footstep_wood_alt_04.ogg +0 -0
  880. package/assets/sfx/personagem/footstep_wood_alt_05.ogg +0 -0
  881. package/assets/sfx/personagem/footstep_wood_run_01.ogg +0 -0
  882. package/assets/sfx/personagem/footstep_wood_run_02.ogg +0 -0
  883. package/assets/sfx/personagem/footstep_wood_run_03.ogg +0 -0
  884. package/assets/sfx/personagem/footstep_wood_run_04.ogg +0 -0
  885. package/assets/sfx/personagem/footstep_wood_run_05.ogg +0 -0
  886. package/assets/sfx/personagem/footstep_wood_walk_01.ogg +0 -0
  887. package/assets/sfx/personagem/footstep_wood_walk_02.ogg +0 -0
  888. package/assets/sfx/personagem/footstep_wood_walk_03.ogg +0 -0
  889. package/assets/sfx/personagem/footstep_wood_walk_04.ogg +0 -0
  890. package/assets/sfx/personagem/footstep_wood_walk_05.ogg +0 -0
  891. package/assets/sfx/personagem/frying_pan_hit_01.ogg +0 -0
  892. package/assets/sfx/personagem/frying_pan_hit_02.ogg +0 -0
  893. package/assets/sfx/personagem/frying_pan_hit_03.ogg +0 -0
  894. package/assets/sfx/personagem/grab_01.ogg +0 -0
  895. package/assets/sfx/personagem/kick_hit_01.ogg +0 -0
  896. package/assets/sfx/personagem/kick_hit_02.ogg +0 -0
  897. package/assets/sfx/personagem/kick_hit_03.ogg +0 -0
  898. package/assets/sfx/personagem/kick_hit_04.ogg +0 -0
  899. package/assets/sfx/personagem/kick_hit_05.ogg +0 -0
  900. package/assets/sfx/personagem/knife_draw_01.ogg +0 -0
  901. package/assets/sfx/personagem/knife_draw_02.ogg +0 -0
  902. package/assets/sfx/personagem/knife_draw_03.ogg +0 -0
  903. package/assets/sfx/personagem/knife_scrape_01.ogg +0 -0
  904. package/assets/sfx/personagem/knife_slash_01.ogg +0 -0
  905. package/assets/sfx/personagem/knife_slash_02.ogg +0 -0
  906. package/assets/sfx/personagem/land_concrete_01.ogg +0 -0
  907. package/assets/sfx/personagem/land_concrete_02.ogg +0 -0
  908. package/assets/sfx/personagem/land_dirt_01.ogg +0 -0
  909. package/assets/sfx/personagem/land_dirt_02.ogg +0 -0
  910. package/assets/sfx/personagem/land_grass_01.ogg +0 -0
  911. package/assets/sfx/personagem/land_grass_02.ogg +0 -0
  912. package/assets/sfx/personagem/land_metal_01.ogg +0 -0
  913. package/assets/sfx/personagem/land_metal_02.ogg +0 -0
  914. package/assets/sfx/personagem/land_snow_01.ogg +0 -0
  915. package/assets/sfx/personagem/land_snow_02.ogg +0 -0
  916. package/assets/sfx/personagem/land_wood_01.ogg +0 -0
  917. package/assets/sfx/personagem/land_wood_02.ogg +0 -0
  918. package/assets/sfx/personagem/player_breath_run_01.ogg +0 -0
  919. package/assets/sfx/personagem/player_breath_run_02.ogg +0 -0
  920. package/assets/sfx/personagem/player_breath_run_03.ogg +0 -0
  921. package/assets/sfx/personagem/player_breath_run_04.ogg +0 -0
  922. package/assets/sfx/personagem/player_breath_run_05.ogg +0 -0
  923. package/assets/sfx/personagem/player_death_female_01.ogg +0 -0
  924. package/assets/sfx/personagem/player_death_female_02.ogg +0 -0
  925. package/assets/sfx/personagem/player_death_female_03.ogg +0 -0
  926. package/assets/sfx/personagem/player_death_female_04.ogg +0 -0
  927. package/assets/sfx/personagem/player_death_female_05.ogg +0 -0
  928. package/assets/sfx/personagem/player_death_female_06.ogg +0 -0
  929. package/assets/sfx/personagem/player_death_female_07.ogg +0 -0
  930. package/assets/sfx/personagem/player_death_female_08.ogg +0 -0
  931. package/assets/sfx/personagem/player_death_male_01.ogg +0 -0
  932. package/assets/sfx/personagem/player_death_male_02.ogg +0 -0
  933. package/assets/sfx/personagem/player_death_male_03.ogg +0 -0
  934. package/assets/sfx/personagem/player_death_male_04.ogg +0 -0
  935. package/assets/sfx/personagem/player_death_male_05.ogg +0 -0
  936. package/assets/sfx/personagem/player_death_male_06.ogg +0 -0
  937. package/assets/sfx/personagem/player_death_male_07.ogg +0 -0
  938. package/assets/sfx/personagem/player_death_male_08.ogg +0 -0
  939. package/assets/sfx/personagem/player_effort_01.ogg +0 -0
  940. package/assets/sfx/personagem/player_effort_02.ogg +0 -0
  941. package/assets/sfx/personagem/player_effort_03.ogg +0 -0
  942. package/assets/sfx/personagem/player_effort_04.ogg +0 -0
  943. package/assets/sfx/personagem/player_hurt_female_01.ogg +0 -0
  944. package/assets/sfx/personagem/player_hurt_female_02.ogg +0 -0
  945. package/assets/sfx/personagem/player_hurt_female_03.ogg +0 -0
  946. package/assets/sfx/personagem/player_hurt_female_04.ogg +0 -0
  947. package/assets/sfx/personagem/player_hurt_female_05.ogg +0 -0
  948. package/assets/sfx/personagem/player_hurt_female_06.ogg +0 -0
  949. package/assets/sfx/personagem/player_hurt_male_01.ogg +0 -0
  950. package/assets/sfx/personagem/player_hurt_male_02.ogg +0 -0
  951. package/assets/sfx/personagem/player_hurt_male_03.ogg +0 -0
  952. package/assets/sfx/personagem/player_hurt_male_04.ogg +0 -0
  953. package/assets/sfx/personagem/player_hurt_male_05.ogg +0 -0
  954. package/assets/sfx/personagem/player_hurt_male_06.ogg +0 -0
  955. package/assets/sfx/personagem/punch_hit_alt_01.ogg +0 -0
  956. package/assets/sfx/personagem/punch_hit_alt_02.ogg +0 -0
  957. package/assets/sfx/personagem/punch_hit_alt_03.ogg +0 -0
  958. package/assets/sfx/personagem/punch_hit_alt_04.ogg +0 -0
  959. package/assets/sfx/personagem/punch_hit_alt_05.ogg +0 -0
  960. package/assets/sfx/personagem/punch_hit_alt_06.ogg +0 -0
  961. package/assets/sfx/personagem/punch_hit_alt_07.ogg +0 -0
  962. package/assets/sfx/personagem/punch_hit_alt_08.ogg +0 -0
  963. package/assets/sfx/personagem/punch_hit_alt_09.ogg +0 -0
  964. package/assets/sfx/personagem/punch_hit_alt_10.ogg +0 -0
  965. package/assets/sfx/personagem/punch_hit_body_01.ogg +0 -0
  966. package/assets/sfx/personagem/punch_hit_body_02.ogg +0 -0
  967. package/assets/sfx/personagem/punch_hit_body_03.ogg +0 -0
  968. package/assets/sfx/personagem/punch_hit_body_04.ogg +0 -0
  969. package/assets/sfx/personagem/punch_hit_body_05.ogg +0 -0
  970. package/assets/sfx/personagem/punch_hit_body_06.ogg +0 -0
  971. package/assets/sfx/personagem/punch_hit_face_01.ogg +0 -0
  972. package/assets/sfx/personagem/punch_hit_face_02.ogg +0 -0
  973. package/assets/sfx/personagem/punch_hit_face_03.ogg +0 -0
  974. package/assets/sfx/personagem/punch_hit_face_04.ogg +0 -0
  975. package/assets/sfx/personagem/punch_hit_face_05.ogg +0 -0
  976. package/assets/sfx/personagem/punch_swing_01.ogg +0 -0
  977. package/assets/sfx/personagem/punch_swing_02.ogg +0 -0
  978. package/assets/sfx/personagem/punch_swing_03.ogg +0 -0
  979. package/assets/sfx/personagem/punch_swing_04.ogg +0 -0
  980. package/assets/sfx/personagem/punch_swing_05.ogg +0 -0
  981. package/assets/sfx/personagem/punch_swing_06.ogg +0 -0
  982. package/assets/sfx/personagem/punch_swing_07.ogg +0 -0
  983. package/assets/sfx/personagem/punch_swing_08.ogg +0 -0
  984. package/assets/sfx/personagem/scream_01.ogg +0 -0
  985. package/assets/sfx/personagem/scream_02.ogg +0 -0
  986. package/assets/sfx/personagem/scream_03.ogg +0 -0
  987. package/assets/sfx/personagem/scream_04.ogg +0 -0
  988. package/assets/sfx/personagem/slap_01.ogg +0 -0
  989. package/assets/sfx/personagem/swing_whoosh_alt_01.ogg +0 -0
  990. package/assets/sfx/personagem/swing_whoosh_alt_02.ogg +0 -0
  991. package/assets/sfx/personagem/swing_whoosh_alt_03.ogg +0 -0
  992. package/assets/sfx/personagem/swing_whoosh_alt_04.ogg +0 -0
  993. package/assets/sfx/personagem/swing_whoosh_alt_05.ogg +0 -0
  994. package/assets/sfx/personagem/swing_whoosh_alt_06.ogg +0 -0
  995. package/assets/sfx/personagem/swing_whoosh_alt_07.ogg +0 -0
  996. package/assets/sfx/personagem/swing_whoosh_alt_08.ogg +0 -0
  997. package/assets/sfx/personagem/swing_whoosh_alt_09.ogg +0 -0
  998. package/assets/sfx/personagem/swing_whoosh_alt_10.ogg +0 -0
  999. package/assets/sfx/personagem/swing_whoosh_alt_11.ogg +0 -0
  1000. package/assets/sfx/personagem/swing_whoosh_alt_12.ogg +0 -0
  1001. package/assets/sfx/personagem/swing_whoosh_alt_13.ogg +0 -0
  1002. package/assets/sfx/personagem/swing_whoosh_alt_14.ogg +0 -0
  1003. package/assets/sfx/personagem/swing_whoosh_alt_15.ogg +0 -0
  1004. package/assets/sfx/personagem/swing_whoosh_alt_16.ogg +0 -0
  1005. package/assets/sfx/personagem/swing_whoosh_alt_17.ogg +0 -0
  1006. package/assets/sfx/personagem/swing_whoosh_alt_18.ogg +0 -0
  1007. package/assets/sfx/personagem/swing_whoosh_alt_19.ogg +0 -0
  1008. package/assets/sfx/personagem/swing_whoosh_alt_20.ogg +0 -0
  1009. package/assets/sfx/personagem/swing_whoosh_alt_21.ogg +0 -0
  1010. package/assets/sfx/personagem/swing_whoosh_alt_22.ogg +0 -0
  1011. package/assets/sfx/personagem/swing_whoosh_alt_23.ogg +0 -0
  1012. package/assets/sfx/personagem/swing_whoosh_alt_24.ogg +0 -0
  1013. package/assets/sfx/personagem/swing_whoosh_alt_25.ogg +0 -0
  1014. package/assets/sfx/personagem/swing_whoosh_alt_26.ogg +0 -0
  1015. package/assets/sfx/personagem/swing_whoosh_alt_27.ogg +0 -0
  1016. package/assets/sfx/personagem/swing_whoosh_alt_28.ogg +0 -0
  1017. package/assets/sfx/personagem/swing_whoosh_alt_29.ogg +0 -0
  1018. package/assets/sfx/personagem/swing_whoosh_alt_30.ogg +0 -0
  1019. package/assets/sfx/personagem/swing_whoosh_alt_31.ogg +0 -0
  1020. package/assets/sfx/personagem/swing_whoosh_alt_32.ogg +0 -0
  1021. package/assets/sfx/personagem/swing_whoosh_alt_33.ogg +0 -0
  1022. package/assets/sfx/personagem/swing_whoosh_alt_34.ogg +0 -0
  1023. package/assets/sfx/personagem/swing_whoosh_alt_35.ogg +0 -0
  1024. package/assets/sfx/personagem/swing_whoosh_alt_36.ogg +0 -0
  1025. package/assets/sfx/personagem/swing_whoosh_alt_37.ogg +0 -0
  1026. package/assets/sfx/personagem/swing_whoosh_alt_38.ogg +0 -0
  1027. package/assets/sfx/personagem/swing_whoosh_alt_39.ogg +0 -0
  1028. package/assets/sfx/personagem/swing_whoosh_alt_40.ogg +0 -0
  1029. package/assets/sfx/personagem/swing_whoosh_alt_41.ogg +0 -0
  1030. package/assets/sfx/personagem/swing_whoosh_alt_42.ogg +0 -0
  1031. package/assets/sfx/personagem/swing_whoosh_alt_43.ogg +0 -0
  1032. package/assets/sfx/personagem/zombie_creature_01.ogg +0 -0
  1033. package/assets/sfx/personagem/zombie_creature_02.ogg +0 -0
  1034. package/assets/sfx/personagem/zombie_creature_03.ogg +0 -0
  1035. package/assets/sfx/personagem/zombie_death_01.ogg +0 -0
  1036. package/assets/sfx/personagem/zombie_death_02.ogg +0 -0
  1037. package/assets/sfx/personagem/zombie_death_03.ogg +0 -0
  1038. package/assets/sfx/personagem/zombie_death_04.ogg +0 -0
  1039. package/assets/sfx/personagem/zombie_death_05.ogg +0 -0
  1040. package/assets/sfx/personagem/zombie_death_06.ogg +0 -0
  1041. package/assets/sfx/personagem/zombie_death_07.ogg +0 -0
  1042. package/assets/sfx/personagem/zombie_death_08.ogg +0 -0
  1043. package/assets/sfx/personagem/zombie_groan_01.ogg +0 -0
  1044. package/assets/sfx/personagem/zombie_groan_02.ogg +0 -0
  1045. package/assets/sfx/personagem/zombie_groan_03.ogg +0 -0
  1046. package/assets/sfx/personagem/zombie_groan_04.ogg +0 -0
  1047. package/assets/sfx/personagem/zombie_groan_05.ogg +0 -0
  1048. package/assets/sfx/personagem/zombie_groan_06.ogg +0 -0
  1049. package/assets/sfx/personagem/zombie_groan_07.ogg +0 -0
  1050. package/assets/sfx/personagem/zombie_groan_08.ogg +0 -0
  1051. package/assets/sfx/personagem/zombie_groan_09.ogg +0 -0
  1052. package/assets/sfx/personagem/zombie_groan_10.ogg +0 -0
  1053. package/assets/sfx/personagem/zombie_groan_11.ogg +0 -0
  1054. package/assets/sfx/veiculos/car_door_open_01.ogg +0 -0
  1055. package/assets/sfx/veiculos/car_door_shut_01.ogg +0 -0
  1056. package/assets/sfx/veiculos/car_gear_shift_01.ogg +0 -0
  1057. package/assets/sfx/veiculos/car_trunk_shut_01.ogg +0 -0
  1058. package/assets/sfx/veiculos/car_window_01.ogg +0 -0
  1059. package/assets/sfx/veiculos/car_window_02.ogg +0 -0
  1060. package/assets/sfx/veiculos/engine_loop_car_high_01.ogg +0 -0
  1061. package/assets/sfx/veiculos/engine_loop_car_idle_01.ogg +0 -0
  1062. package/assets/sfx/veiculos/engine_start_run_stop_01.ogg +0 -0
  1063. package/assets/sfx/veiculos/engine_start_run_stop_02.ogg +0 -0
  1064. package/dist/chunk-KBTUANNG.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/recipes/scene.ts","../src/library/cabin.ts","../src/recipes/foley.ts","../src/recipes/body-foley.ts","../src/webaudio/sink.ts"],"sourcesContent":["// 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] as unknown as readonly SoundRecipe[]\n\nexport const CABIN_BANK: SoundBank = { id: 'vehicle_cabin', sounds: CABIN_SOUNDS, 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":["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] 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"]}
@@ -244,11 +244,36 @@ type SoundBank = {
244
244
  readonly sets?: readonly SoundSet[];
245
245
  /** Sounds played from recorded files (see `sample.ts`). A sample and a recipe may share an id: the sample plays once its files are loaded. */
246
246
  readonly samples?: readonly SampleSound[];
247
+ /**
248
+ * Ids of this bank that play the takes of a sample sound registered by another bank (a manifest's file id), resolved when the id is looked up, so
249
+ * the order the banks register in does not matter. A sample of the alias's own id, when one is registered, wins.
250
+ */
251
+ readonly sampleAliases?: readonly SampleAlias[];
252
+ };
253
+ /**
254
+ * One id answered by the takes of another sample sound (`file`): `engine_car_low` by `engine_loop_car_idle`. The other numbers replace the file's;
255
+ * `offset` and `duration` trim every take (one recording holding the start, the run and the stop gives each its own id). The recipe or loop of `id`
256
+ * stays as the fallback while the files load or where they are missing.
257
+ */
258
+ type SampleAlias = {
259
+ readonly id: string;
260
+ readonly file: string;
261
+ readonly offset?: number;
262
+ readonly duration?: number;
263
+ readonly loop?: SampleSound['loop'];
264
+ readonly baseFrequency?: number;
265
+ readonly gain?: number;
266
+ readonly pitch?: number;
267
+ readonly falloff?: Falloff;
247
268
  };
248
269
  /** One take: a file and its own trim (linear gain, default 1). */
249
270
  type SampleRef = {
250
271
  readonly url: string;
251
272
  readonly gain?: number;
273
+ /** Seconds into the file the take starts at (default 0). A looping take starts there the first time round. */
274
+ readonly offset?: number;
275
+ /** Seconds of the file the take plays (default to its end); a trimmed one-shot fades out over its last 40 ms, so the cut does not click. */
276
+ readonly duration?: number;
252
277
  };
253
278
  /** Where a sound happens: a closed room rings short and dense, the open field long and thin. */
254
279
  type SampleEnvironment = 'indoor' | 'outdoor';
@@ -315,10 +340,17 @@ type SampleSound = {
315
340
  readonly loop?: boolean | {
316
341
  readonly crossfade?: number;
317
342
  };
343
+ /**
344
+ * The frequency the recording of a loop sounds at (an engine's firing frequency at the RPM it was recorded at): `set({ frequency })` then plays
345
+ * the takes at `frequency / baseFrequency`, gliding, as an oscillator loop follows it. Without it the loop keeps the pitch of its files.
346
+ */
347
+ readonly baseFrequency?: number;
318
348
  /** A recipe id the engine plays while the files are not loaded yet (or failed): the synthesized sound stays as the fallback. */
319
349
  readonly fallback?: string;
320
350
  /** Where each file came from: `"freesound:123456 autor CC0"`, or `"sdk"` for files the kit made. */
321
351
  readonly sources: readonly string[];
352
+ /** The licence of the files when one is declared (a local pack's entry); the sound panel lists those that are not CC0 / CC-BY. */
353
+ readonly license?: string;
322
354
  };
323
355
 
324
356
  /** Where the ears are. `yaw` turns around y like a three.js camera: the right ear points at `(cos yaw, 0, −sin yaw)`. */
@@ -477,6 +509,10 @@ type PlannedSampleLayer = {
477
509
  readonly gain: number;
478
510
  readonly rate: number;
479
511
  readonly at: number;
512
+ /** Seconds into the file (the take's trim). */
513
+ readonly offset?: number;
514
+ /** Seconds of the file played (the take's trim). */
515
+ readonly duration?: number;
480
516
  };
481
517
  type SamplePlan = {
482
518
  readonly kind: 'sample';
@@ -633,18 +669,24 @@ type SoundRegistry = {
633
669
  /** Merged into the recipe by id (objects merge, arrays such as `layers` are replaced); an unknown id is ignored. */
634
670
  patch(id: string, patch: DeepPartial<SoundRecipe> | DeepPartial<LoopRecipe> | DeepPartial<SampleSound>): void;
635
671
  remove(id: string): void;
672
+ /** Drops only the sample sound of an id; a recipe or loop of the same id stays. */
673
+ removeSample(id: string): void;
636
674
  sound(id: string): SoundRecipe | undefined;
637
675
  loop(id: string): LoopRecipe | undefined;
638
676
  /** The set an id names (`SoundBank.sets`), if any; a recipe with the same id wins in `play`. */
639
677
  set(id: string): SoundSet | undefined;
678
+ /** The sample sound of an id: its own, or the takes of the sound a bank's `sampleAliases` points it at (once that one is registered). */
640
679
  sample(id: string): SampleSound | undefined;
641
680
  soundIds(): string[];
642
681
  setIds(): string[];
643
682
  loopIds(): string[];
683
+ /** Every id `sample` answers, aliases whose file is registered included. */
644
684
  sampleIds(): string[];
645
685
  /** Which bank each id came from. */
646
686
  bankOf(id: string): string | undefined;
647
687
  };
688
+ /** The sample an alias names: the file's takes and numbers, with the alias's id and its own numbers; the recipe of the alias id is the fallback. */
689
+ declare function aliasSample(alias: SampleAlias, file: SampleSound): SampleSound;
648
690
  declare function createSoundRegistry(banks?: readonly SoundBank[]): SoundRegistry;
649
691
 
650
692
  /**
@@ -1124,6 +1166,10 @@ type UserSoundPick = {
1124
1166
  /** 0–10: how well the files fit the sound (rate, clipping, band). */
1125
1167
  readonly score: number;
1126
1168
  readonly loop?: boolean;
1169
+ /** Who made the files, when the pack is not the list's `author`. */
1170
+ readonly author?: string;
1171
+ /** Their licence, when not the list's `license`. */
1172
+ readonly license?: string;
1127
1173
  };
1128
1174
  type UserSoundPicks = {
1129
1175
  readonly version: 1;
@@ -1247,4 +1293,4 @@ type AudioBenchText = {
1247
1293
  };
1248
1294
  declare const audioBenchTextOf: (locale: string) => AudioBenchText;
1249
1295
 
1250
- export { type FormantVoiceSource as $, type AudioLoopHandle as A, type BusId as B, CRITERIA as C, CRITERIA_TARGETS as D, type CriterionId as E, type Falloff as F, type CriterionResult as G, type Curve as H, DEFAULT_CROSSOVER as I, DEFAULT_LISTENER as J, DEFAULT_MAX_VOICES as K, type LoopRecipe as L, type MixProfile as M, DEFAULT_MIX as N, DEFAULT_SAMPLE_CUTOFF_K as O, type ParamRef as P, DEFAULT_SAMPLE_FALLOFF as Q, type Range as R, type SampleSound as S, DEFAULT_SAMPLE_PITCH as T, DEFAULT_TAIL_GAIN as U, type DeepPartial as V, type DistanceMode as W, type Envelope as X, type EnvelopePoint as Y, type FilterBank as Z, type FilterSpec as _, type SampleLoader as a, type UserSampleBankOptions as a$, KIT_SAMPLES_BANK as a0, LAYER_FLOOR as a1, type LayerSource as a2, type Listener as a3, type LoadUserSamplesOptions as a4, type LoopOrder as a5, type LoopSet as a6, MIX_PROFILES as a7, type MeasureOptions as a8, type Modulator as a9, type SampleLayerRole as aA, type SampleLoadReport as aB, type SampleMemory as aC, type SampleOptions as aD, type SamplePlanInput as aE, type SampleRef as aF, type SampleStatus as aG, type SampleStore as aH, type SampleTail as aI, type SampleTier as aJ, type SdkLicense as aK, type SfxBlow as aL, type SfxCategory as aM, type SfxEntry as aN, type SfxFileEntry as aO, type SfxLayer as aP, type SfxManifestLike as aQ, type SfxManifestSound as aR, type SfxMaterial as aS, type SfxPriority as aT, type SfxState as aU, type SoundRegistry as aV, type SoundSource as aW, type StartQueueOptions as aX, type Time as aY, USER_SAMPLES_BANK as aZ, USER_SOUND_PREFIX as a_, type NoiseSource as aa, OPEN_CUTOFF as ab, type OscSource as ac, PAN_LIMIT as ad, PAN_MIN_DISTANCE as ae, type PlanInput as af, type PlannedAutomation as ag, type PlannedEnvelopePoint as ah, type PlannedFilter as ai, type PlannedLayer as aj, type PlannedModulator as ak, type PlannedSampleLayer as al, type PlannedSource as am, type PlayOptions as an, SAMPLE_ENVIRONMENTS as ao, SDK_LICENSES as ap, SFX_BLOWS as aq, SFX_CATALOG as ar, SFX_CATEGORIES as as, SFX_IMPACTS as at, SFX_LAYERS as au, SFX_MATERIALS as av, SFX_TIERS as aw, type SampleBankOptions as ax, type SampleCrossover as ay, type SampleEnvironment as az, type SfxManifest as b, type UserSampleBankResult as b0, type UserSfxFile as b1, type UserSfxManifest as b2, type UserSfxSound as b3, type UserSoundPick as b4, type UserSoundPicks as b5, type UserSoundRole as b6, VOICE_GROUPS as b7, type VoiceDecision as b8, type VoiceGroup as b9, pickTake as bA, planSample as bB, planSound as bC, recordOutput as bD, resolveMix as bE, sampleBankFromManifest as bF, sampleCutoff as bG, sampleUrls as bH, sfxState as bI, soundSourceOf as bJ, splitTier as bK, tierFor as bL, userSampleBank as bM, type VoiceHandle as ba, type VoiceManager as bb, type VoiceManagerOptions as bc, type VoiceRefusal as bd, type VoiceRequest as be, type VoiceStartEvent as bf, type VoiceStats as bg, audioBenchTextOf as bh, busGain as bi, busPriority as bj, createAudioEngine as bk, createAudioTestModule as bl, createSampleStore as bm, createSoundRegistry as bn, createVoiceManager as bo, crossGains as bp, farMixAt as bq, fetchLoader as br, impactSoundId as bs, inlineLoader as bt, limiterCurve as bu, listenerDistance as bv, loadUserSamples as bw, measureCriteria as bx, panFor as by, parseSfxName as bz, type SoundBank as c, type SampleDefaults as d, type SoundRecipe as e, type Layer as f, type SoundSet as g, type SoundPlan as h, type SamplePlan as i, type LoopEntry as j, type AudioEngine as k, type ActionCheck as l, type AudioBenchText as m, type AudioChannel as n, type AudioEngineOptions as o, type AudioScenarioLike as p, type AudioStats as q, type AudioTestModule as r, type AudioTestModuleOptions as s, type Automation as t, BENCH_BANK as u, BUILD_ORDERS as v, BUS_IDS as w, BUS_PRIORITY as x, type BuildOrder as y, type BusSetting as z };
1296
+ export { type FilterSpec as $, type AudioEngine as A, type BusId as B, type BusSetting as C, type DistanceMode as D, CRITERIA as E, type Falloff as F, CRITERIA_TARGETS as G, type CriterionId as H, type CriterionResult as I, type Curve as J, DEFAULT_CROSSOVER as K, type LoopRecipe as L, type MixProfile as M, DEFAULT_LISTENER as N, DEFAULT_MAX_VOICES as O, type ParamRef as P, DEFAULT_MIX as Q, type Range as R, type SampleSound as S, DEFAULT_SAMPLE_CUTOFF_K as T, DEFAULT_SAMPLE_FALLOFF as U, DEFAULT_SAMPLE_PITCH as V, DEFAULT_TAIL_GAIN as W, type DeepPartial as X, type Envelope as Y, type EnvelopePoint as Z, type FilterBank as _, type SampleLoader as a, USER_SOUND_PREFIX as a$, type FormantVoiceSource as a0, KIT_SAMPLES_BANK as a1, LAYER_FLOOR as a2, type LayerSource as a3, type LoadUserSamplesOptions as a4, type LoopOrder as a5, type LoopSet as a6, MIX_PROFILES as a7, type MeasureOptions as a8, type Modulator as a9, type SampleEnvironment as aA, type SampleLayerRole as aB, type SampleLoadReport as aC, type SampleMemory as aD, type SampleOptions as aE, type SamplePlanInput as aF, type SampleRef as aG, type SampleStatus as aH, type SampleStore as aI, type SampleTail as aJ, type SampleTier as aK, type SdkLicense as aL, type SfxBlow as aM, type SfxCategory as aN, type SfxEntry as aO, type SfxFileEntry as aP, type SfxLayer as aQ, type SfxManifestLike as aR, type SfxManifestSound as aS, type SfxMaterial as aT, type SfxPriority as aU, type SfxState as aV, type SoundRegistry as aW, type SoundSource as aX, type StartQueueOptions as aY, type Time as aZ, USER_SAMPLES_BANK as a_, type NoiseSource as aa, OPEN_CUTOFF as ab, type OscSource as ac, PAN_LIMIT as ad, PAN_MIN_DISTANCE as ae, type PlanInput as af, type PlannedAutomation as ag, type PlannedEnvelopePoint as ah, type PlannedFilter as ai, type PlannedLayer as aj, type PlannedModulator as ak, type PlannedSampleLayer as al, type PlannedSource as am, type PlayOptions as an, SAMPLE_ENVIRONMENTS as ao, SDK_LICENSES as ap, SFX_BLOWS as aq, SFX_CATALOG as ar, SFX_CATEGORIES as as, SFX_IMPACTS as at, SFX_LAYERS as au, SFX_MATERIALS as av, SFX_TIERS as aw, type SampleAlias as ax, type SampleBankOptions as ay, type SampleCrossover as az, type SfxManifest as b, type UserSampleBankOptions as b0, type UserSampleBankResult as b1, type UserSfxFile as b2, type UserSfxManifest as b3, type UserSfxSound as b4, type UserSoundPick as b5, type UserSoundPicks as b6, type UserSoundRole as b7, VOICE_GROUPS as b8, type VoiceDecision as b9, panFor as bA, parseSfxName as bB, pickTake as bC, planSample as bD, planSound as bE, recordOutput as bF, resolveMix as bG, sampleBankFromManifest as bH, sampleCutoff as bI, sampleUrls as bJ, sfxState as bK, soundSourceOf as bL, splitTier as bM, tierFor as bN, userSampleBank as bO, type VoiceGroup as ba, type VoiceHandle as bb, type VoiceManager as bc, type VoiceManagerOptions as bd, type VoiceRefusal as be, type VoiceRequest as bf, type VoiceStartEvent as bg, type VoiceStats as bh, aliasSample as bi, audioBenchTextOf as bj, busGain as bk, busPriority as bl, createAudioEngine as bm, createAudioTestModule as bn, createSampleStore as bo, createSoundRegistry as bp, createVoiceManager as bq, crossGains as br, farMixAt as bs, fetchLoader as bt, impactSoundId as bu, inlineLoader as bv, limiterCurve as bw, listenerDistance as bx, loadUserSamples as by, measureCriteria as bz, type SoundBank as c, type SampleDefaults as d, type SoundRecipe as e, type Layer as f, type SoundSet as g, type SoundPlan as h, type SamplePlan as i, type AudioLoopHandle as j, type LoopEntry as k, type Listener as l, type ActionCheck as m, type AudioBenchText as n, type AudioChannel as o, type AudioEngineOptions as p, type AudioScenarioLike as q, type AudioStats as r, type AudioTestModule as s, type AudioTestModuleOptions as t, type Automation as u, BENCH_BANK as v, BUILD_ORDERS as w, BUS_IDS as x, BUS_PRIORITY as y, type BuildOrder as z };
package/dist/testing.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { aL as SfxBlow, aS as SfxMaterial, az as SampleEnvironment, aU as SfxState, E as CriterionId, aW as SoundSource, p as AudioScenarioLike, k as AudioEngine, G as CriterionResult, bf as VoiceStartEvent, ba as VoiceHandle, c as SoundBank, a as SampleLoader, aN as SfxEntry, l as ActionCheck } from './locale-CJfDpWnI.js';
2
- export { m as AudioBenchText, r as AudioTestModule, s as AudioTestModuleOptions, u as BENCH_BANK, bh as audioBenchTextOf, bl as createAudioTestModule } from './locale-CJfDpWnI.js';
1
+ import { aM as SfxBlow, aT as SfxMaterial, aA as SampleEnvironment, aV as SfxState, H as CriterionId, aX as SoundSource, q as AudioScenarioLike, A as AudioEngine, I as CriterionResult, bg as VoiceStartEvent, bb as VoiceHandle, c as SoundBank, a as SampleLoader, aO as SfxEntry, m as ActionCheck } from './locale-BJMhMT0G.js';
2
+ export { n as AudioBenchText, s as AudioTestModule, t as AudioTestModuleOptions, v as BENCH_BANK, bj as audioBenchTextOf, bn as createAudioTestModule } from './locale-BJMhMT0G.js';
3
3
  import { TestableModule } from '@adatechnology/game-contracts';
4
4
 
5
5
  type Strength = 'light' | 'medium' | 'heavy';
@@ -15,9 +15,9 @@ type SoundCheckText = {
15
15
  readonly strengths: Readonly<Record<Strength, string>>;
16
16
  readonly states: Readonly<Record<SfxState, string>>;
17
17
  readonly criteria: Readonly<Record<CriterionId, string>>;
18
- readonly metrics: Readonly<Record<'source' | 'chosen' | 'matrix' | 'last' | 'ab' | 'blind' | 'verdicts' | 'state' | 'count', string>>;
18
+ readonly metrics: Readonly<Record<'source' | 'chosen' | 'matrix' | 'last' | 'ab' | 'blind' | 'verdicts' | 'state' | 'count' | 'unlicensed', string>>;
19
19
  readonly run: Readonly<Record<'idle' | 'measuring' | 'done' | 'failed' | 'recording' | 'recorded', string>>;
20
- readonly words: Readonly<Record<'none' | 'hidden' | 'prefers' | 'approved', string>>;
20
+ readonly words: Readonly<Record<'none' | 'hidden' | 'prefers' | 'approved' | 'local_file' | 'sdk_file' | 'synth', string>>;
21
21
  /** Where the voice came from: the kit's file, the owner's file, the synthesized recipe. */
22
22
  readonly sources: Readonly<Record<SoundSource, string>>;
23
23
  readonly probe: string;
package/dist/testing.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  createAudioTestModule,
7
7
  createSoundCheckModule,
8
8
  soundCheckTextOf
9
- } from "./chunk-KBTUANNG.js";
9
+ } from "./chunk-C2K7XN2K.js";
10
10
  export {
11
11
  BENCH_BANK,
12
12
  CALIBRATION_CATEGORY,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adatechnology/game-audio",
3
- "version": "0.6.1",
3
+ "version": "0.8.0",
4
4
  "license": "MIT",
5
5
  "description": "Sound as data for games: recipes planned into resolved, seeded sound plans, a WebAudio layer that builds them, distance curves, pan, a voice limiter, loops and mixing profiles taken from the teams (the game and the art scene). Sounds from recorded files too (.ogg takes with round-robin, pitch, near/far layers, indoor/outdoor tails and strength tiers), a converter for the files the team drops in, and a measuring harness of the sound criteria. Knows nothing about any game.",
6
6
  "keywords": [
@@ -44,7 +44,7 @@
44
44
  "assets"
45
45
  ],
46
46
  "dependencies": {
47
- "@adatechnology/game-contracts": "^0.24.0"
47
+ "@adatechnology/game-contracts": "^0.25.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/node": "^22.10.7",