react-native-audio-api 0.12.0-nightly-37d6b7c-20260119 → 0.12.0-nightly-75589dc-20260121

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 (356) hide show
  1. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +8 -5
  2. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -1
  3. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +1 -1
  4. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +7 -3
  5. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +1 -1
  6. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +4 -2
  7. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +1 -1
  8. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +5 -4
  9. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +2 -2
  10. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +52 -49
  11. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +2 -1
  12. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -0
  13. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +1 -0
  14. package/common/cpp/audioapi/HostObjects/utils/NodeOptions.h +111 -0
  15. package/common/cpp/audioapi/HostObjects/utils/NodeOptionsParser.h +262 -0
  16. package/common/cpp/audioapi/core/AudioNode.cpp +13 -6
  17. package/common/cpp/audioapi/core/AudioNode.h +2 -0
  18. package/common/cpp/audioapi/core/BaseAudioContext.cpp +42 -44
  19. package/common/cpp/audioapi/core/BaseAudioContext.h +32 -21
  20. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +8 -6
  21. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +2 -1
  22. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +7 -8
  23. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +4 -1
  24. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +5 -9
  25. package/common/cpp/audioapi/core/effects/ConvolverNode.h +2 -2
  26. package/common/cpp/audioapi/core/effects/DelayNode.cpp +5 -4
  27. package/common/cpp/audioapi/core/effects/DelayNode.h +2 -1
  28. package/common/cpp/audioapi/core/effects/GainNode.cpp +4 -3
  29. package/common/cpp/audioapi/core/effects/GainNode.h +2 -1
  30. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +6 -6
  31. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +3 -2
  32. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +3 -3
  33. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -1
  34. package/common/cpp/audioapi/core/effects/WaveShaperNode.cpp +4 -3
  35. package/common/cpp/audioapi/core/effects/WaveShaperNode.h +4 -1
  36. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +1 -1
  37. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +3 -2
  38. package/common/cpp/audioapi/core/sources/AudioBuffer.h +2 -1
  39. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +16 -22
  40. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +2 -1
  41. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +9 -6
  42. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -1
  43. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +9 -7
  44. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +4 -1
  45. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +5 -8
  46. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +4 -1
  47. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +21 -16
  48. package/common/cpp/audioapi/core/sources/OscillatorNode.h +4 -1
  49. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +4 -2
  50. package/common/cpp/audioapi/core/sources/StreamerNode.h +11 -1
  51. package/common/cpp/test/src/ConstantSourceTest.cpp +3 -2
  52. package/common/cpp/test/src/DelayTest.cpp +12 -5
  53. package/common/cpp/test/src/GainTest.cpp +3 -2
  54. package/common/cpp/test/src/IIRFilterTest.cpp +3 -2
  55. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  56. package/common/cpp/test/src/StereoPannerTest.cpp +3 -2
  57. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +10 -9
  58. package/common/cpp/test/src/core/effects/WaveShaperNodeTest.cpp +4 -3
  59. package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -1
  60. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +5 -4
  61. package/ios/audioapi/ios/core/utils/FileOptions.h +3 -1
  62. package/ios/audioapi/ios/core/utils/FileOptions.mm +9 -3
  63. package/ios/audioapi/ios/core/utils/IOSFileWriter.h +2 -1
  64. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +5 -2
  65. package/lib/commonjs/api.js +11 -3
  66. package/lib/commonjs/api.js.map +1 -1
  67. package/lib/commonjs/api.web.js +4 -10
  68. package/lib/commonjs/api.web.js.map +1 -1
  69. package/lib/commonjs/core/AnalyserNode.js +11 -0
  70. package/lib/commonjs/core/AnalyserNode.js.map +1 -1
  71. package/lib/commonjs/core/AudioBuffer.js +20 -6
  72. package/lib/commonjs/core/AudioBuffer.js.map +1 -1
  73. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +9 -0
  74. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  75. package/lib/commonjs/core/AudioBufferSourceNode.js +9 -0
  76. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  77. package/lib/commonjs/core/AudioRecorder.js +3 -3
  78. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  79. package/lib/commonjs/core/BaseAudioContext.js +52 -65
  80. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  81. package/lib/commonjs/core/BiquadFilterNode.js +7 -1
  82. package/lib/commonjs/core/BiquadFilterNode.js.map +1 -1
  83. package/lib/commonjs/core/ConstantSourceNode.js +7 -1
  84. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -1
  85. package/lib/commonjs/core/ConvolverNode.js +9 -3
  86. package/lib/commonjs/core/ConvolverNode.js.map +1 -1
  87. package/lib/commonjs/core/DelayNode.js +7 -1
  88. package/lib/commonjs/core/DelayNode.js.map +1 -1
  89. package/lib/commonjs/core/GainNode.js +9 -3
  90. package/lib/commonjs/core/GainNode.js.map +1 -1
  91. package/lib/commonjs/core/IIRFilterNode.js +9 -0
  92. package/lib/commonjs/core/IIRFilterNode.js.map +1 -1
  93. package/lib/commonjs/core/OscillatorNode.js +10 -1
  94. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  95. package/lib/commonjs/core/PeriodicWave.js +30 -2
  96. package/lib/commonjs/core/PeriodicWave.js.map +1 -1
  97. package/lib/commonjs/core/RecorderAdapterNode.js +3 -0
  98. package/lib/commonjs/core/RecorderAdapterNode.js.map +1 -1
  99. package/lib/commonjs/core/StereoPannerNode.js +7 -1
  100. package/lib/commonjs/core/StereoPannerNode.js.map +1 -1
  101. package/lib/commonjs/core/StreamerNode.js +25 -1
  102. package/lib/commonjs/core/StreamerNode.js.map +1 -1
  103. package/lib/commonjs/core/WaveShaperNode.js +12 -0
  104. package/lib/commonjs/core/WaveShaperNode.js.map +1 -1
  105. package/lib/commonjs/core/WorkletNode.js +13 -1
  106. package/lib/commonjs/core/WorkletNode.js.map +1 -1
  107. package/lib/commonjs/core/WorkletProcessingNode.js +14 -1
  108. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -1
  109. package/lib/commonjs/core/WorkletSourceNode.js +13 -1
  110. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -1
  111. package/lib/commonjs/defaults.js +78 -0
  112. package/lib/commonjs/defaults.js.map +1 -0
  113. package/lib/commonjs/options-validators.js +40 -0
  114. package/lib/commonjs/options-validators.js.map +1 -0
  115. package/lib/commonjs/types.js.map +1 -1
  116. package/lib/commonjs/web-core/AnalyserNode.js +2 -1
  117. package/lib/commonjs/web-core/AnalyserNode.js.map +1 -1
  118. package/lib/commonjs/web-core/AudioBuffer.js +14 -6
  119. package/lib/commonjs/web-core/AudioBuffer.js.map +1 -1
  120. package/lib/commonjs/web-core/AudioBufferSourceNode.js +276 -89
  121. package/lib/commonjs/web-core/AudioBufferSourceNode.js.map +1 -1
  122. package/lib/commonjs/web-core/AudioContext.js +33 -32
  123. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  124. package/lib/commonjs/web-core/AudioNode.js +4 -0
  125. package/lib/commonjs/web-core/AudioNode.js.map +1 -1
  126. package/lib/commonjs/web-core/BiquadFilterNode.js +2 -1
  127. package/lib/commonjs/web-core/BiquadFilterNode.js.map +1 -1
  128. package/lib/commonjs/web-core/ConstantSourceNode.js +2 -1
  129. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -1
  130. package/lib/commonjs/web-core/ConvolverNode.js +3 -5
  131. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -1
  132. package/lib/commonjs/web-core/DelayNode.js +7 -1
  133. package/lib/commonjs/web-core/DelayNode.js.map +1 -1
  134. package/lib/commonjs/web-core/GainNode.js +2 -1
  135. package/lib/commonjs/web-core/GainNode.js.map +1 -1
  136. package/lib/commonjs/web-core/IIRFilterNode.js +12 -0
  137. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -1
  138. package/lib/commonjs/web-core/OfflineAudioContext.js +33 -32
  139. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  140. package/lib/commonjs/web-core/OscillatorNode.js +2 -1
  141. package/lib/commonjs/web-core/OscillatorNode.js.map +1 -1
  142. package/lib/commonjs/web-core/PeriodicWave.js +6 -1
  143. package/lib/commonjs/web-core/PeriodicWave.js.map +1 -1
  144. package/lib/commonjs/web-core/StereoPannerNode.js +2 -1
  145. package/lib/commonjs/web-core/StereoPannerNode.js.map +1 -1
  146. package/lib/module/api.js +2 -1
  147. package/lib/module/api.js.map +1 -1
  148. package/lib/module/api.web.js +2 -1
  149. package/lib/module/api.web.js.map +1 -1
  150. package/lib/module/core/AnalyserNode.js +11 -0
  151. package/lib/module/core/AnalyserNode.js.map +1 -1
  152. package/lib/module/core/AudioBuffer.js +19 -6
  153. package/lib/module/core/AudioBuffer.js.map +1 -1
  154. package/lib/module/core/AudioBufferQueueSourceNode.js +9 -0
  155. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  156. package/lib/module/core/AudioBufferSourceNode.js +9 -0
  157. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  158. package/lib/module/core/AudioRecorder.js +3 -4
  159. package/lib/module/core/AudioRecorder.js.map +1 -1
  160. package/lib/module/core/BaseAudioContext.js +52 -65
  161. package/lib/module/core/BaseAudioContext.js.map +1 -1
  162. package/lib/module/core/BiquadFilterNode.js +7 -1
  163. package/lib/module/core/BiquadFilterNode.js.map +1 -1
  164. package/lib/module/core/ConstantSourceNode.js +7 -1
  165. package/lib/module/core/ConstantSourceNode.js.map +1 -1
  166. package/lib/module/core/ConvolverNode.js +9 -3
  167. package/lib/module/core/ConvolverNode.js.map +1 -1
  168. package/lib/module/core/DelayNode.js +7 -1
  169. package/lib/module/core/DelayNode.js.map +1 -1
  170. package/lib/module/core/GainNode.js +9 -3
  171. package/lib/module/core/GainNode.js.map +1 -1
  172. package/lib/module/core/IIRFilterNode.js +9 -0
  173. package/lib/module/core/IIRFilterNode.js.map +1 -1
  174. package/lib/module/core/OscillatorNode.js +10 -1
  175. package/lib/module/core/OscillatorNode.js.map +1 -1
  176. package/lib/module/core/PeriodicWave.js +29 -2
  177. package/lib/module/core/PeriodicWave.js.map +1 -1
  178. package/lib/module/core/RecorderAdapterNode.js +3 -0
  179. package/lib/module/core/RecorderAdapterNode.js.map +1 -1
  180. package/lib/module/core/StereoPannerNode.js +7 -1
  181. package/lib/module/core/StereoPannerNode.js.map +1 -1
  182. package/lib/module/core/StreamerNode.js +25 -1
  183. package/lib/module/core/StreamerNode.js.map +1 -1
  184. package/lib/module/core/WaveShaperNode.js +12 -0
  185. package/lib/module/core/WaveShaperNode.js.map +1 -1
  186. package/lib/module/core/WorkletNode.js +13 -1
  187. package/lib/module/core/WorkletNode.js.map +1 -1
  188. package/lib/module/core/WorkletProcessingNode.js +14 -1
  189. package/lib/module/core/WorkletProcessingNode.js.map +1 -1
  190. package/lib/module/core/WorkletSourceNode.js +13 -1
  191. package/lib/module/core/WorkletSourceNode.js.map +1 -1
  192. package/lib/module/defaults.js +74 -0
  193. package/lib/module/defaults.js.map +1 -0
  194. package/lib/module/options-validators.js +36 -0
  195. package/lib/module/options-validators.js.map +1 -0
  196. package/lib/module/types.js.map +1 -1
  197. package/lib/module/web-core/AnalyserNode.js +2 -1
  198. package/lib/module/web-core/AnalyserNode.js.map +1 -1
  199. package/lib/module/web-core/AudioBuffer.js +13 -6
  200. package/lib/module/web-core/AudioBuffer.js.map +1 -1
  201. package/lib/module/web-core/AudioBufferSourceNode.js +277 -90
  202. package/lib/module/web-core/AudioBufferSourceNode.js.map +1 -1
  203. package/lib/module/web-core/AudioContext.js +33 -32
  204. package/lib/module/web-core/AudioContext.js.map +1 -1
  205. package/lib/module/web-core/AudioNode.js +4 -0
  206. package/lib/module/web-core/AudioNode.js.map +1 -1
  207. package/lib/module/web-core/BiquadFilterNode.js +2 -1
  208. package/lib/module/web-core/BiquadFilterNode.js.map +1 -1
  209. package/lib/module/web-core/ConstantSourceNode.js +2 -1
  210. package/lib/module/web-core/ConstantSourceNode.js.map +1 -1
  211. package/lib/module/web-core/ConvolverNode.js +3 -5
  212. package/lib/module/web-core/ConvolverNode.js.map +1 -1
  213. package/lib/module/web-core/DelayNode.js +7 -1
  214. package/lib/module/web-core/DelayNode.js.map +1 -1
  215. package/lib/module/web-core/GainNode.js +2 -1
  216. package/lib/module/web-core/GainNode.js.map +1 -1
  217. package/lib/module/web-core/IIRFilterNode.js +12 -0
  218. package/lib/module/web-core/IIRFilterNode.js.map +1 -1
  219. package/lib/module/web-core/OfflineAudioContext.js +33 -32
  220. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  221. package/lib/module/web-core/OscillatorNode.js +2 -1
  222. package/lib/module/web-core/OscillatorNode.js.map +1 -1
  223. package/lib/module/web-core/PeriodicWave.js +6 -1
  224. package/lib/module/web-core/PeriodicWave.js.map +1 -1
  225. package/lib/module/web-core/StereoPannerNode.js +2 -1
  226. package/lib/module/web-core/StereoPannerNode.js.map +1 -1
  227. package/lib/typescript/api.d.ts +2 -1
  228. package/lib/typescript/api.d.ts.map +1 -1
  229. package/lib/typescript/api.web.d.ts +2 -1
  230. package/lib/typescript/api.web.d.ts.map +1 -1
  231. package/lib/typescript/core/AnalyserNode.d.ts +3 -1
  232. package/lib/typescript/core/AnalyserNode.d.ts.map +1 -1
  233. package/lib/typescript/core/AudioBuffer.d.ts +3 -0
  234. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -1
  235. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +3 -0
  236. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  237. package/lib/typescript/core/AudioBufferSourceNode.d.ts +3 -0
  238. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  239. package/lib/typescript/core/AudioRecorder.d.ts +2 -2
  240. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  241. package/lib/typescript/core/BaseAudioContext.d.ts +10 -6
  242. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  243. package/lib/typescript/core/BiquadFilterNode.d.ts +2 -3
  244. package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -1
  245. package/lib/typescript/core/ConstantSourceNode.d.ts +2 -2
  246. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -1
  247. package/lib/typescript/core/ConvolverNode.d.ts +2 -2
  248. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -1
  249. package/lib/typescript/core/DelayNode.d.ts +2 -2
  250. package/lib/typescript/core/DelayNode.d.ts.map +1 -1
  251. package/lib/typescript/core/GainNode.d.ts +2 -2
  252. package/lib/typescript/core/GainNode.d.ts.map +1 -1
  253. package/lib/typescript/core/IIRFilterNode.d.ts +3 -0
  254. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -1
  255. package/lib/typescript/core/OscillatorNode.d.ts +2 -3
  256. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  257. package/lib/typescript/core/PeriodicWave.d.ts +4 -1
  258. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -1
  259. package/lib/typescript/core/RecorderAdapterNode.d.ts +2 -0
  260. package/lib/typescript/core/RecorderAdapterNode.d.ts.map +1 -1
  261. package/lib/typescript/core/StereoPannerNode.d.ts +2 -2
  262. package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -1
  263. package/lib/typescript/core/StreamerNode.d.ts +5 -0
  264. package/lib/typescript/core/StreamerNode.d.ts.map +1 -1
  265. package/lib/typescript/core/WaveShaperNode.d.ts +3 -0
  266. package/lib/typescript/core/WaveShaperNode.d.ts.map +1 -1
  267. package/lib/typescript/core/WorkletNode.d.ts +3 -0
  268. package/lib/typescript/core/WorkletNode.d.ts.map +1 -1
  269. package/lib/typescript/core/WorkletProcessingNode.d.ts +3 -0
  270. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -1
  271. package/lib/typescript/core/WorkletSourceNode.d.ts +3 -0
  272. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -1
  273. package/lib/typescript/defaults.d.ts +16 -0
  274. package/lib/typescript/defaults.d.ts.map +1 -0
  275. package/lib/typescript/interfaces.d.ts +17 -16
  276. package/lib/typescript/interfaces.d.ts.map +1 -1
  277. package/lib/typescript/options-validators.d.ts +6 -0
  278. package/lib/typescript/options-validators.d.ts.map +1 -0
  279. package/lib/typescript/types.d.ts +83 -11
  280. package/lib/typescript/types.d.ts.map +1 -1
  281. package/lib/typescript/web-core/AnalyserNode.d.ts +2 -2
  282. package/lib/typescript/web-core/AnalyserNode.d.ts.map +1 -1
  283. package/lib/typescript/web-core/AudioBuffer.d.ts +3 -0
  284. package/lib/typescript/web-core/AudioBuffer.d.ts.map +1 -1
  285. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +24 -15
  286. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts.map +1 -1
  287. package/lib/typescript/web-core/AudioContext.d.ts +5 -6
  288. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  289. package/lib/typescript/web-core/AudioNode.d.ts +2 -2
  290. package/lib/typescript/web-core/AudioNode.d.ts.map +1 -1
  291. package/lib/typescript/web-core/BaseAudioContext.d.ts +3 -3
  292. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  293. package/lib/typescript/web-core/BiquadFilterNode.d.ts +2 -2
  294. package/lib/typescript/web-core/BiquadFilterNode.d.ts.map +1 -1
  295. package/lib/typescript/web-core/ConstantSourceNode.d.ts +2 -1
  296. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -1
  297. package/lib/typescript/web-core/ConvolverNode.d.ts +2 -1
  298. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -1
  299. package/lib/typescript/web-core/DelayNode.d.ts +2 -1
  300. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -1
  301. package/lib/typescript/web-core/GainNode.d.ts +2 -1
  302. package/lib/typescript/web-core/GainNode.d.ts.map +1 -1
  303. package/lib/typescript/web-core/IIRFilterNode.d.ts +3 -0
  304. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -1
  305. package/lib/typescript/web-core/OfflineAudioContext.d.ts +5 -6
  306. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  307. package/lib/typescript/web-core/OscillatorNode.d.ts +2 -2
  308. package/lib/typescript/web-core/OscillatorNode.d.ts.map +1 -1
  309. package/lib/typescript/web-core/PeriodicWave.d.ts +3 -1
  310. package/lib/typescript/web-core/PeriodicWave.d.ts.map +1 -1
  311. package/lib/typescript/web-core/StereoPannerNode.d.ts +2 -1
  312. package/lib/typescript/web-core/StereoPannerNode.d.ts.map +1 -1
  313. package/package.json +1 -1
  314. package/src/api.ts +3 -1
  315. package/src/api.web.ts +1 -2
  316. package/src/core/AnalyserNode.ts +16 -1
  317. package/src/core/AudioBuffer.ts +26 -6
  318. package/src/core/AudioBufferQueueSourceNode.ts +15 -0
  319. package/src/core/AudioBufferSourceNode.ts +12 -0
  320. package/src/core/AudioRecorder.ts +4 -3
  321. package/src/core/BaseAudioContext.ts +48 -151
  322. package/src/core/BiquadFilterNode.ts +9 -2
  323. package/src/core/ConstantSourceNode.ts +9 -1
  324. package/src/core/ConvolverNode.ts +11 -3
  325. package/src/core/DelayNode.ts +5 -2
  326. package/src/core/GainNode.ts +10 -3
  327. package/src/core/IIRFilterNode.ts +12 -0
  328. package/src/core/OscillatorNode.ts +13 -2
  329. package/src/core/PeriodicWave.ts +36 -2
  330. package/src/core/RecorderAdapterNode.ts +5 -0
  331. package/src/core/StereoPannerNode.ts +9 -1
  332. package/src/core/StreamerNode.ts +29 -1
  333. package/src/core/WaveShaperNode.ts +17 -0
  334. package/src/core/WorkletNode.ts +30 -1
  335. package/src/core/WorkletProcessingNode.ts +39 -1
  336. package/src/core/WorkletSourceNode.ts +36 -1
  337. package/src/defaults.ts +100 -0
  338. package/src/interfaces.ts +38 -25
  339. package/src/options-validators.ts +66 -0
  340. package/src/types.ts +100 -12
  341. package/src/web-core/AnalyserNode.tsx +15 -6
  342. package/src/web-core/AudioBuffer.tsx +20 -6
  343. package/src/web-core/AudioBufferSourceNode.tsx +393 -148
  344. package/src/web-core/AudioContext.tsx +22 -72
  345. package/src/web-core/AudioNode.tsx +6 -2
  346. package/src/web-core/BaseAudioContext.tsx +3 -7
  347. package/src/web-core/BiquadFilterNode.tsx +6 -2
  348. package/src/web-core/ConstantSourceNode.tsx +3 -1
  349. package/src/web-core/ConvolverNode.tsx +8 -8
  350. package/src/web-core/DelayNode.tsx +5 -1
  351. package/src/web-core/GainNode.tsx +3 -1
  352. package/src/web-core/IIRFilterNode.tsx +15 -0
  353. package/src/web-core/OfflineAudioContext.tsx +19 -67
  354. package/src/web-core/OscillatorNode.tsx +3 -2
  355. package/src/web-core/PeriodicWave.tsx +11 -1
  356. package/src/web-core/StereoPannerNode.tsx +9 -1
@@ -102,7 +102,7 @@ Result<NoneType, std::string> AndroidAudioRecorder::openAudioStream() {
102
102
  /// RN side requires their "file://" prefix, but sometimes it returned raw path.
103
103
  /// Most likely this was due to alpha version mistakes, but in case of problems leaving this here. (ㆆ _ ㆆ)
104
104
  /// @returns On success, returns the file URI where the recording is being saved (if file output is enabled).
105
- Result<std::string, std::string> AndroidAudioRecorder::start() {
105
+ Result<std::string, std::string> AndroidAudioRecorder::start(const std::string &fileNameOverride) {
106
106
  std::scoped_lock startLock(callbackMutex_, fileWriterMutex_, adapterNodeMutex_);
107
107
 
108
108
  if (!isIdle()) {
@@ -120,9 +120,12 @@ Result<std::string, std::string> AndroidAudioRecorder::start() {
120
120
  }
121
121
 
122
122
  if (usesFileOutput()) {
123
- auto fileResult =
124
- std::static_pointer_cast<AndroidFileWriterBackend>(fileWriter_)
125
- ->openFile(streamSampleRate_, streamChannelCount_, streamMaxBufferSizeInFrames_);
123
+ auto fileResult = std::static_pointer_cast<AndroidFileWriterBackend>(fileWriter_)
124
+ ->openFile(
125
+ streamSampleRate_,
126
+ streamChannelCount_,
127
+ streamMaxBufferSizeInFrames_,
128
+ fileNameOverride);
126
129
 
127
130
  if (!fileResult.is_ok()) {
128
131
  return Result<std::string, std::string>::Err(
@@ -228,7 +231,7 @@ Result<std::string, std::string> AndroidAudioRecorder::enableFileOutput(
228
231
  if (!isIdle()) {
229
232
  auto fileResult =
230
233
  std::static_pointer_cast<AndroidFileWriterBackend>(fileWriter_)
231
- ->openFile(streamSampleRate_, streamChannelCount_, streamMaxBufferSizeInFrames_);
234
+ ->openFile(streamSampleRate_, streamChannelCount_, streamMaxBufferSizeInFrames_, "");
232
235
 
233
236
  if (!fileResult.is_ok()) {
234
237
  return Result<std::string, std::string>::Err(
@@ -26,7 +26,7 @@ class AndroidAudioRecorder : public oboe::AudioStreamCallback, public AudioRecor
26
26
  ~AndroidAudioRecorder() override;
27
27
  void cleanup();
28
28
 
29
- Result<std::string, std::string> start() override;
29
+ Result<std::string, std::string> start(const std::string &fileNameOverride) override;
30
30
  Result<std::tuple<std::string, double, double>, std::string> stop() override;
31
31
 
32
32
  Result<std::string, std::string> enableFileOutput(std::shared_ptr<AudioFileProperties> properties) override;
@@ -17,7 +17,7 @@ class AndroidFileWriterBackend : public AudioFileWriter {
17
17
  const std::shared_ptr<AudioFileProperties> &fileProperties)
18
18
  : AudioFileWriter(audioEventHandlerRegistry, fileProperties) {}
19
19
 
20
- virtual OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) = 0;
20
+ virtual OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize, const std::string &fileNameOverride) = 0;
21
21
  virtual bool writeAudioData(void *data, int numFrames) = 0;
22
22
 
23
23
  std::string getFilePath() const override { return filePath_; }
@@ -63,7 +63,8 @@ std::string getFileExtension(const std::shared_ptr<AudioFileProperties> &propert
63
63
  }
64
64
 
65
65
  Result<std::string, std::string> getFilePath(
66
- const std::shared_ptr<AudioFileProperties> &properties) {
66
+ const std::shared_ptr<AudioFileProperties> &properties,
67
+ const std::string &fileNameOverride) {
67
68
  std::string directory = getDirectory(properties);
68
69
  std::string subDirectory = std::format("{}/{}", directory, properties->subDirectory);
69
70
  std::string fileTimestamp = getTimestampString();
@@ -75,8 +76,11 @@ Result<std::string, std::string> getFilePath(
75
76
  return Result<std::string, std::string>::Err(result.unwrap_err());
76
77
  }
77
78
 
78
- auto filePath = std::format(
79
- "{}/{}_{}.{}", subDirectory, properties->fileNamePrefix, fileTimestamp, extension);
79
+ auto filePath = fileNameOverride.length() > 0
80
+ ? std::format("{}/{}.{}", subDirectory, fileNameOverride, extension)
81
+ : std::format(
82
+ "{}/{}_{}.{}", subDirectory, properties->fileNamePrefix, fileTimestamp, extension);
83
+
80
84
  return Result<std::string, std::string>::Ok(filePath);
81
85
  }
82
86
 
@@ -15,7 +15,7 @@ std::string getTimestampString();
15
15
 
16
16
  std::string getDirectory(const std::shared_ptr<AudioFileProperties> &properties);
17
17
  std::string getFileExtension(const std::shared_ptr<AudioFileProperties> &properties);
18
- Result<std::string, std::string> getFilePath(const std::shared_ptr<AudioFileProperties> &properties);
18
+ Result<std::string, std::string> getFilePath(const std::shared_ptr<AudioFileProperties> &properties, const std::string &fileNameOverride);
19
19
 
20
20
  } // namespace android::fileoptions
21
21
 
@@ -53,14 +53,16 @@ FFmpegAudioFileWriter::~FFmpegAudioFileWriter() {
53
53
  OpenFileResult FFmpegAudioFileWriter::openFile(
54
54
  float streamSampleRate,
55
55
  int32_t streamChannelCount,
56
- int32_t streamMaxBufferSize) {
56
+ int32_t streamMaxBufferSize,
57
+ const std::string &fileNameOverride) {
57
58
  streamSampleRate_ = streamSampleRate;
58
59
  streamChannelCount_ = streamChannelCount;
59
60
  streamMaxBufferSize_ = streamMaxBufferSize;
60
61
  framesWritten_.store(0, std::memory_order_release);
61
62
  nextPts_ = 0;
62
63
  Result<NoneType, std::string> result = Result<NoneType, std::string>::Ok(None);
63
- Result<std::string, std::string> filePathResult = fileoptions::getFilePath(fileProperties_);
64
+ Result<std::string, std::string> filePathResult =
65
+ fileoptions::getFilePath(fileProperties_, fileNameOverride);
64
66
 
65
67
  if (!filePathResult.is_ok()) {
66
68
  return OpenFileResult::Err(filePathResult.unwrap_err());
@@ -29,7 +29,7 @@ class FFmpegAudioFileWriter : public AndroidFileWriterBackend {
29
29
  const std::shared_ptr<AudioFileProperties> &fileProperties);
30
30
  ~FFmpegAudioFileWriter();
31
31
 
32
- OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
32
+ OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize, const std::string &fileNameOverride) override;
33
33
  CloseFileResult closeFile() override;
34
34
 
35
35
  bool writeAudioData(void *data, int numFrames) override;
@@ -75,7 +75,8 @@ MiniAudioFileWriter::~MiniAudioFileWriter() {
75
75
  OpenFileResult MiniAudioFileWriter::openFile(
76
76
  float streamSampleRate,
77
77
  int32_t streamChannelCount,
78
- int32_t streamMaxBufferSize) {
78
+ int32_t streamMaxBufferSize,
79
+ const std::string &fileNameOverride) {
79
80
  streamSampleRate_ = streamSampleRate;
80
81
  streamChannelCount_ = streamChannelCount;
81
82
  streamMaxBufferSize_ = streamMaxBufferSize;
@@ -95,7 +96,7 @@ OpenFileResult MiniAudioFileWriter::openFile(
95
96
  "Failed to initialize converter" + std::string(ma_result_description(result)));
96
97
  }
97
98
 
98
- result = initializeEncoder();
99
+ result = initializeEncoder(fileNameOverride);
99
100
 
100
101
  if (result != MA_SUCCESS) {
101
102
  return OpenFileResult ::Err(
@@ -266,10 +267,10 @@ ma_result MiniAudioFileWriter::initializeConverterIfNeeded() {
266
267
  /// This method sets up the audio encoder for writing to the file,
267
268
  /// it should be called only on the JS thread. (during file opening)
268
269
  /// @return MA_SUCCESS if initialization was successful, otherwise an error code.
269
- ma_result MiniAudioFileWriter::initializeEncoder() {
270
+ ma_result MiniAudioFileWriter::initializeEncoder(const std::string &fileNameOverride) {
270
271
  ma_result result;
271
272
  Result<std::string, std::string> filePathResult =
272
- android::fileoptions::getFilePath(fileProperties_);
273
+ android::fileoptions::getFilePath(fileProperties_, fileNameOverride);
273
274
 
274
275
  if (!filePathResult.is_ok()) {
275
276
  return MA_ERROR;
@@ -17,7 +17,7 @@ class MiniAudioFileWriter : public AndroidFileWriterBackend {
17
17
  const std::shared_ptr<AudioFileProperties> &fileProperties);
18
18
  ~MiniAudioFileWriter();
19
19
 
20
- OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
20
+ OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize, const std::string &fileNameOverride) override;
21
21
  CloseFileResult closeFile() override;
22
22
 
23
23
  bool writeAudioData(void *data, int numFrames) override;
@@ -31,7 +31,7 @@ class MiniAudioFileWriter : public AndroidFileWriterBackend {
31
31
  ma_uint64 processingBufferLength_{0};
32
32
 
33
33
  ma_result initializeConverterIfNeeded();
34
- ma_result initializeEncoder();
34
+ ma_result initializeEncoder(const std::string &fileNameOverride);
35
35
  ma_uint64 convertBuffer(void *data, int numFrames);
36
36
 
37
37
  bool isConverterRequired();
@@ -22,7 +22,9 @@
22
22
  #include <audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h>
23
23
  #include <audioapi/core/BaseAudioContext.h>
24
24
 
25
+ #include <audioapi/HostObjects/utils/NodeOptionsParser.h>
25
26
  #include <memory>
27
+ #include <utility>
26
28
  #include <vector>
27
29
 
28
30
  namespace audioapi {
@@ -165,14 +167,21 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createRecorderAdapter) {
165
167
  }
166
168
 
167
169
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createOscillator) {
168
- auto oscillator = context_->createOscillator();
170
+ const auto options = args[0].asObject(runtime);
171
+ const auto oscillatorOptions = audioapi::option_parser::parseOscillatorOptions(runtime, options);
172
+ auto oscillator = context_->createOscillator(oscillatorOptions);
169
173
  auto oscillatorHostObject = std::make_shared<OscillatorNodeHostObject>(oscillator);
170
174
  return jsi::Object::createFromHostObject(runtime, oscillatorHostObject);
171
175
  }
172
176
 
173
177
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStreamer) {
174
178
  #if !RN_AUDIO_API_FFMPEG_DISABLED
175
- auto streamer = context_->createStreamer();
179
+ auto streamerOptions = StreamerOptions();
180
+ if (!args[0].isUndefined()) {
181
+ const auto options = args[0].asObject(runtime);
182
+ streamerOptions = audioapi::option_parser::parseStreamerOptions(runtime, options);
183
+ }
184
+ auto streamer = context_->createStreamer(streamerOptions);
176
185
  auto streamerHostObject = std::make_shared<StreamerNodeHostObject>(streamer);
177
186
  auto object = jsi::Object::createFromHostObject(runtime, streamerHostObject);
178
187
  object.setExternalMemoryPressure(runtime, StreamerNodeHostObject::getSizeInBytes());
@@ -183,20 +192,26 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStreamer) {
183
192
  }
184
193
 
185
194
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createConstantSource) {
186
- auto constantSource = context_->createConstantSource();
195
+ const auto options = args[0].asObject(runtime);
196
+ const auto constantSourceOptions =
197
+ audioapi::option_parser::parseConstantSourceOptions(runtime, options);
198
+ auto constantSource = context_->createConstantSource(constantSourceOptions);
187
199
  auto constantSourceHostObject = std::make_shared<ConstantSourceNodeHostObject>(constantSource);
188
200
  return jsi::Object::createFromHostObject(runtime, constantSourceHostObject);
189
201
  }
190
202
 
191
203
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createGain) {
192
- auto gain = context_->createGain();
204
+ const auto options = args[0].asObject(runtime);
205
+ const auto gainOptions = audioapi::option_parser::parseGainOptions(runtime, options);
206
+ auto gain = context_->createGain(std::move(gainOptions));
193
207
  auto gainHostObject = std::make_shared<GainNodeHostObject>(gain);
194
208
  return jsi::Object::createFromHostObject(runtime, gainHostObject);
195
209
  }
196
210
 
197
211
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createDelay) {
198
- auto maxDelayTime = static_cast<float>(args[0].getNumber());
199
- auto delayNode = context_->createDelay(maxDelayTime);
212
+ const auto options = args[0].asObject(runtime);
213
+ const auto delayOptions = audioapi::option_parser::parseDelayOptions(runtime, options);
214
+ auto delayNode = context_->createDelay(delayOptions);
200
215
  auto delayNodeHostObject = std::make_shared<DelayNodeHostObject>(delayNode);
201
216
  auto jsiObject = jsi::Object::createFromHostObject(runtime, delayNodeHostObject);
202
217
  jsiObject.setExternalMemoryPressure(runtime, delayNodeHostObject->getSizeInBytes());
@@ -204,63 +219,52 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createDelay) {
204
219
  }
205
220
 
206
221
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStereoPanner) {
207
- auto stereoPanner = context_->createStereoPanner();
222
+ const auto options = args[0].asObject(runtime);
223
+ const auto stereoPannerOptions = audioapi::option_parser::parseStereoPannerOptions(runtime, options);
224
+ auto stereoPanner = context_->createStereoPanner(stereoPannerOptions);
208
225
  auto stereoPannerHostObject = std::make_shared<StereoPannerNodeHostObject>(stereoPanner);
209
226
  return jsi::Object::createFromHostObject(runtime, stereoPannerHostObject);
210
227
  }
211
228
 
212
229
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBiquadFilter) {
213
- auto biquadFilter = context_->createBiquadFilter();
230
+ const auto options = args[0].asObject(runtime);
231
+ const auto biquadFilterOptions = audioapi::option_parser::parseBiquadFilterOptions(runtime, options);
232
+ auto biquadFilter = context_->createBiquadFilter(biquadFilterOptions);
214
233
  auto biquadFilterHostObject = std::make_shared<BiquadFilterNodeHostObject>(biquadFilter);
215
234
  return jsi::Object::createFromHostObject(runtime, biquadFilterHostObject);
216
235
  }
217
236
 
218
237
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createIIRFilter) {
219
- auto feedforwardArray = args[0].asObject(runtime).asArray(runtime);
220
- auto feedbackArray = args[1].asObject(runtime).asArray(runtime);
221
-
222
- size_t feedforwardLength = feedforwardArray.length(runtime);
223
- size_t feedbackLength = feedbackArray.length(runtime);
224
-
225
- std::vector<float> feedforward;
226
- std::vector<float> feedback;
227
-
228
- feedforward.reserve(feedforwardLength);
229
- feedback.reserve(feedbackLength);
230
-
231
- for (size_t i = 0; i < feedforwardLength; ++i) {
232
- feedforward.push_back(feedforwardArray.getValueAtIndex(runtime, i).asNumber());
233
- }
234
-
235
- for (size_t i = 0; i < feedbackLength; ++i) {
236
- feedback.push_back(feedbackArray.getValueAtIndex(runtime, i).asNumber());
237
- }
238
-
239
- auto iirFilter = context_->createIIRFilter(feedforward, feedback);
238
+ const auto options = args[0].asObject(runtime);
239
+ const auto iirFilterOptions = audioapi::option_parser::parseIIRFilterOptions(runtime, options);
240
+ auto iirFilter = context_->createIIRFilter(iirFilterOptions);
240
241
  auto iirFilterHostObject = std::make_shared<IIRFilterNodeHostObject>(iirFilter);
241
242
  return jsi::Object::createFromHostObject(runtime, iirFilterHostObject);
242
243
  }
243
244
 
244
245
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferSource) {
245
- auto pitchCorrection = args[0].asBool();
246
- auto bufferSource = context_->createBufferSource(pitchCorrection);
246
+ const auto options = args[0].asObject(runtime);
247
+ const auto audioBufferSourceOptions =
248
+ audioapi::option_parser::parseAudioBufferSourceOptions(runtime, options);
249
+ auto bufferSource = context_->createBufferSource(audioBufferSourceOptions);
247
250
  auto bufferSourceHostObject = std::make_shared<AudioBufferSourceNodeHostObject>(bufferSource);
248
251
  return jsi::Object::createFromHostObject(runtime, bufferSourceHostObject);
249
252
  }
250
253
 
251
254
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferQueueSource) {
252
- auto pitchCorrection = args[0].asBool();
253
- auto bufferSource = context_->createBufferQueueSource(pitchCorrection);
255
+ const auto options = args[0].asObject(runtime);
256
+ const auto baseAudioBufferSourceOptions =
257
+ audioapi::option_parser::parseBaseAudioBufferSourceOptions(runtime, options);
258
+ auto bufferSource = context_->createBufferQueueSource(baseAudioBufferSourceOptions);
254
259
  auto bufferStreamSourceHostObject =
255
260
  std::make_shared<AudioBufferQueueSourceNodeHostObject>(bufferSource);
256
261
  return jsi::Object::createFromHostObject(runtime, bufferStreamSourceHostObject);
257
262
  }
258
263
 
259
264
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBuffer) {
260
- auto numberOfChannels = static_cast<int>(args[0].getNumber());
261
- auto length = static_cast<size_t>(args[1].getNumber());
262
- auto sampleRate = static_cast<float>(args[2].getNumber());
263
- auto buffer = BaseAudioContext::createBuffer(numberOfChannels, length, sampleRate);
265
+ const auto options = args[0].asObject(runtime);
266
+ const auto audioBufferOptions = audioapi::option_parser::parseAudioBufferOptions(runtime, options);
267
+ auto buffer = BaseAudioContext::createBuffer(audioBufferOptions);
264
268
  auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
265
269
 
266
270
  auto jsiObject = jsi::Object::createFromHostObject(runtime, bufferHostObject);
@@ -294,31 +298,30 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createPeriodicWave) {
294
298
  }
295
299
 
296
300
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createAnalyser) {
297
- auto analyser = context_->createAnalyser();
301
+ const auto options = args[0].asObject(runtime);
302
+ const auto analyserOptions = audioapi::option_parser::parseAnalyserOptions(runtime, options);
303
+ auto analyser = context_->createAnalyser(analyserOptions);
298
304
  auto analyserHostObject = std::make_shared<AnalyserNodeHostObject>(analyser);
299
305
  return jsi::Object::createFromHostObject(runtime, analyserHostObject);
300
306
  }
301
307
 
302
308
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createConvolver) {
303
- auto disableNormalization = args[1].getBool();
304
- std::shared_ptr<ConvolverNode> convolver;
305
- if (args[0].isUndefined()) {
306
- convolver = context_->createConvolver(nullptr, disableNormalization);
307
- } else {
308
- auto bufferHostObject = args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
309
- convolver = context_->createConvolver(bufferHostObject->audioBuffer_, disableNormalization);
310
- }
309
+ const auto options = args[0].asObject(runtime);
310
+ const auto convolverOptions = audioapi::option_parser::parseConvolverOptions(runtime, options);
311
+ auto convolver = context_->createConvolver(convolverOptions);
311
312
  auto convolverHostObject = std::make_shared<ConvolverNodeHostObject>(convolver);
312
313
  auto jsiObject = jsi::Object::createFromHostObject(runtime, convolverHostObject);
313
- if (!args[0].isUndefined()) {
314
- auto bufferHostObject = args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
314
+ if (convolverOptions.bus != nullptr) {
315
+ auto bufferHostObject = options.getProperty(runtime, "buffer").getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
315
316
  jsiObject.setExternalMemoryPressure(runtime, bufferHostObject->getSizeInBytes());
316
317
  }
317
318
  return jsiObject;
318
319
  }
319
320
 
320
321
  JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createWaveShaper) {
321
- auto waveShaper = context_->createWaveShaper();
322
+ const auto options = args[0].asObject(runtime);
323
+ const auto waveShaperOptions = audioapi::option_parser::parseWaveShaperOptions(runtime, options);
324
+ auto waveShaper = context_->createWaveShaper(waveShaperOptions);
322
325
  auto waveShaperHostObject = std::make_shared<WaveShaperNodeHostObject>(waveShaper);
323
326
  return jsi::Object::createFromHostObject(runtime, waveShaperHostObject);
324
327
  }
@@ -41,7 +41,8 @@ AudioRecorderHostObject::AudioRecorderHostObject(
41
41
  }
42
42
 
43
43
  JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
44
- auto result = audioRecorder_->start();
44
+ auto fileNameOverride = count > 0 ? args[0].getString(runtime).utf8(runtime) : "";
45
+ auto result = audioRecorder_->start(fileNameOverride);
45
46
  auto jsResult = jsi::Object(runtime);
46
47
 
47
48
  jsResult.setProperty(
@@ -10,6 +10,12 @@ namespace audioapi {
10
10
  StreamerNodeHostObject::StreamerNodeHostObject(const std::shared_ptr<StreamerNode> &node)
11
11
  : AudioScheduledSourceNodeHostObject(node) {
12
12
  addFunctions(JSI_EXPORT_FUNCTION(StreamerNodeHostObject, initialize));
13
+ addGetters(JSI_EXPORT_PROPERTY_GETTER(StreamerNodeHostObject, streamPath));
14
+ }
15
+
16
+ JSI_PROPERTY_GETTER_IMPL(StreamerNodeHostObject, streamPath) {
17
+ auto streamerNode = std::static_pointer_cast<StreamerNode>(node_);
18
+ return jsi::String::createFromUtf8(runtime, streamerNode->getStreamPath());
13
19
  }
14
20
 
15
21
  JSI_HOST_FUNCTION_IMPL(StreamerNodeHostObject, initialize) {
@@ -19,6 +19,7 @@ class StreamerNodeHostObject : public AudioScheduledSourceNodeHostObject {
19
19
  return SIZE;
20
20
  }
21
21
 
22
+ JSI_PROPERTY_GETTER_DECL(streamPath);
22
23
  JSI_HOST_FUNCTION_DECL(initialize);
23
24
 
24
25
  private:
@@ -0,0 +1,111 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <string>
5
+ #include <utility>
6
+ #include <vector>
7
+
8
+ #include <audioapi/core/effects/PeriodicWave.h>
9
+ #include <audioapi/core/sources/AudioBuffer.h>
10
+ #include <audioapi/core/types/BiquadFilterType.h>
11
+ #include <audioapi/core/types/ChannelCountMode.h>
12
+ #include <audioapi/core/types/ChannelInterpretation.h>
13
+ #include <audioapi/core/types/OscillatorType.h>
14
+ #include <audioapi/core/types/OverSampleType.h>
15
+ #include <audioapi/utils/AudioArray.h>
16
+
17
+ namespace audioapi {
18
+ struct AudioNodeOptions {
19
+ int channelCount = 2;
20
+ ChannelCountMode channelCountMode;
21
+ ChannelInterpretation channelInterpretation;
22
+ };
23
+
24
+ struct GainOptions : AudioNodeOptions {
25
+ float gain;
26
+ };
27
+
28
+ struct StereoPannerOptions : AudioNodeOptions {
29
+ float pan;
30
+ };
31
+
32
+ struct ConvolverOptions : AudioNodeOptions {
33
+ std::shared_ptr<AudioBuffer> bus;
34
+ bool disableNormalization;
35
+ };
36
+
37
+ struct ConstantSourceOptions {
38
+ float offset;
39
+ };
40
+
41
+ struct AnalyserOptions : AudioNodeOptions {
42
+ int fftSize;
43
+ float minDecibels;
44
+ float maxDecibels;
45
+ float smoothingTimeConstant;
46
+ };
47
+
48
+ struct BiquadFilterOptions : AudioNodeOptions {
49
+ BiquadFilterType type;
50
+ float frequency;
51
+ float detune;
52
+ float Q;
53
+ float gain;
54
+ };
55
+
56
+ struct OscillatorOptions {
57
+ std::shared_ptr<PeriodicWave> periodicWave;
58
+ float frequency;
59
+ float detune;
60
+ OscillatorType type;
61
+ };
62
+
63
+ struct BaseAudioBufferSourceOptions {
64
+ float detune;
65
+ bool pitchCorrection;
66
+ float playbackRate;
67
+ };
68
+
69
+ struct AudioBufferSourceOptions : BaseAudioBufferSourceOptions {
70
+ std::shared_ptr<AudioBuffer> buffer;
71
+ bool loop;
72
+ float loopStart;
73
+ float loopEnd;
74
+ };
75
+
76
+ struct StreamerOptions {
77
+ std::string streamPath;
78
+ };
79
+
80
+ struct AudioBufferOptions {
81
+ int numberOfChannels;
82
+ size_t length;
83
+ float sampleRate;
84
+ };
85
+
86
+ struct DelayOptions : AudioNodeOptions {
87
+ float maxDelayTime;
88
+ float delayTime;
89
+ };
90
+
91
+ struct IIRFilterOptions : AudioNodeOptions {
92
+ std::vector<float> feedforward;
93
+ std::vector<float> feedback;
94
+
95
+ IIRFilterOptions() = default;
96
+
97
+ explicit IIRFilterOptions(const AudioNodeOptions options) : AudioNodeOptions(options) {}
98
+
99
+ IIRFilterOptions(const std::vector<float> &ff, const std::vector<float> &fb)
100
+ : feedforward(ff), feedback(fb) {}
101
+
102
+ IIRFilterOptions(std::vector<float> &&ff, std::vector<float> &&fb)
103
+ : feedforward(std::move(ff)), feedback(std::move(fb)) {}
104
+ };
105
+
106
+ struct WaveShaperOptions : AudioNodeOptions {
107
+ std::shared_ptr<AudioArray> curve;
108
+ OverSampleType oversample;
109
+ };
110
+
111
+ } // namespace audioapi