react-native-audio-api 0.11.0-alpha.0 → 0.11.0-alpha.10

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 (623) hide show
  1. package/README.md +13 -11
  2. package/RNAudioAPI.podspec +25 -18
  3. package/android/build.gradle +41 -5
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
  6. package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +353 -74
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +32 -19
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +15 -15
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
  14. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
  15. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
  16. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
  17. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +366 -304
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
  21. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
  22. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +154 -95
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +10 -16
  24. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
  25. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
  26. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
  27. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
  28. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
  29. package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
  30. package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
  31. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
  32. package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
  33. package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
  34. package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
  35. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
  36. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
  37. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
  38. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
  39. package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
  40. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  41. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  42. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  43. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  44. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  45. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  46. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  47. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  48. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  49. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  50. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  51. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  52. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  53. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  54. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  55. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  56. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
  57. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
  58. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
  59. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  60. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  61. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  62. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
  63. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
  64. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
  65. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  66. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  67. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  68. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  69. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  70. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
  71. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  72. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
  73. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  74. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
  75. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
  76. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  77. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
  78. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
  79. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  80. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  81. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  82. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  83. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  84. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +109 -44
  85. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -2
  86. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
  87. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
  88. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
  89. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  90. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
  91. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
  92. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
  93. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  94. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
  95. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  96. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  97. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  98. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  99. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  100. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  101. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  102. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  103. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  104. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
  105. package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
  106. package/common/cpp/audioapi/core/AudioContext.h +6 -3
  107. package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
  108. package/common/cpp/audioapi/core/AudioNode.h +19 -8
  109. package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
  110. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  111. package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
  112. package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
  113. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  114. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  115. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  116. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  117. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  118. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  119. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
  120. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
  121. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
  122. package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
  123. package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
  124. package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
  125. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  126. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  127. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
  128. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
  129. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  130. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  131. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  132. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  133. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  134. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  135. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  136. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  137. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +39 -108
  138. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +47 -46
  139. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  140. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  141. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
  142. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
  143. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
  144. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
  145. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
  146. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  147. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
  148. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
  149. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  150. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  151. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  152. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  153. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
  154. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
  155. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
  156. package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
  157. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  158. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  159. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  160. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  161. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
  162. package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
  163. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  164. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  165. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
  166. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  167. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  168. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  169. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
  170. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
  171. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  172. package/common/cpp/audioapi/core/utils/Constants.h +7 -3
  173. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  174. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  175. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
  176. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
  177. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  178. package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
  179. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  180. package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
  181. package/common/cpp/audioapi/dsp/Convolver.h +47 -0
  182. package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
  183. package/common/cpp/audioapi/dsp/FFT.h +19 -3
  184. package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
  185. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  186. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  187. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  188. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  189. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
  190. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  191. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  192. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  193. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  194. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  195. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  196. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  197. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  198. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  199. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  200. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  201. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  202. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  203. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  204. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  205. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  206. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  207. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  208. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  209. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  210. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  211. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  212. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  213. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  214. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  215. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  216. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  217. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  218. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  219. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  220. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  221. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  222. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  223. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  224. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  225. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  226. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  227. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  228. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  229. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  230. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  231. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
  232. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  233. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
  234. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  235. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
  236. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  237. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
  238. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  239. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  240. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  241. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  242. package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
  243. package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
  244. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  245. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  246. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
  247. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  248. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
  249. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  250. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  251. package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
  252. package/common/cpp/audioapi/utils/AudioBus.h +17 -14
  253. package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
  254. package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
  255. package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
  256. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  257. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  258. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  259. package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
  260. package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
  261. package/common/cpp/audioapi/utils/Result.hpp +323 -0
  262. package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
  263. package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
  264. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
  265. package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
  266. package/common/cpp/test/CMakeLists.txt +15 -15
  267. package/common/cpp/test/src/AudioParamTest.cpp +4 -3
  268. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
  269. package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
  270. package/common/cpp/test/src/DelayTest.cpp +108 -0
  271. package/common/cpp/test/src/GainTest.cpp +4 -5
  272. package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
  273. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  274. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  275. package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
  276. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
  277. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
  278. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
  279. package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
  280. package/ios/audioapi/ios/AudioAPIModule.h +4 -3
  281. package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
  282. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
  283. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
  284. package/ios/audioapi/ios/core/IOSAudioRecorder.h +28 -11
  285. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +280 -45
  286. package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
  287. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
  288. package/ios/audioapi/ios/core/NativeAudioRecorder.m +74 -6
  289. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -4
  290. package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
  291. package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
  292. package/ios/audioapi/ios/core/utils/IOSFileWriter.h +53 -0
  293. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
  294. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
  295. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
  296. package/ios/audioapi/ios/system/AudioEngine.h +21 -16
  297. package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
  298. package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
  299. package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
  300. package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
  301. package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
  302. package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
  303. package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
  304. package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
  305. package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
  306. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
  307. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
  308. package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
  309. package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
  310. package/lib/commonjs/AudioAPIModule/index.js +14 -0
  311. package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
  312. package/lib/commonjs/api.js +89 -12
  313. package/lib/commonjs/api.js.map +1 -1
  314. package/lib/commonjs/api.web.js +35 -14
  315. package/lib/commonjs/api.web.js.map +1 -1
  316. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
  317. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  318. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
  319. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  320. package/lib/commonjs/core/AudioContext.js +5 -8
  321. package/lib/commonjs/core/AudioContext.js.map +1 -1
  322. package/lib/commonjs/core/AudioNode.js +1 -1
  323. package/lib/commonjs/core/AudioNode.js.map +1 -1
  324. package/lib/commonjs/core/AudioParam.js +18 -11
  325. package/lib/commonjs/core/AudioParam.js.map +1 -1
  326. package/lib/commonjs/core/AudioRecorder.js +56 -55
  327. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  328. package/lib/commonjs/core/BaseAudioContext.js +61 -30
  329. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  330. package/lib/commonjs/core/ConvolverNode.js +37 -0
  331. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  332. package/lib/commonjs/core/DelayNode.js +17 -0
  333. package/lib/commonjs/core/DelayNode.js.map +1 -0
  334. package/lib/commonjs/core/IIRFilterNode.js +19 -0
  335. package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
  336. package/lib/commonjs/core/OfflineAudioContext.js +3 -6
  337. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  338. package/lib/commonjs/plugin/withAudioAPI.js +46 -0
  339. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  340. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  341. package/lib/commonjs/system/AudioManager.js +9 -15
  342. package/lib/commonjs/system/AudioManager.js.map +1 -1
  343. package/lib/commonjs/system/index.js +13 -0
  344. package/lib/commonjs/system/index.js.map +1 -1
  345. package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
  346. package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
  347. package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
  348. package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
  349. package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
  350. package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
  351. package/lib/commonjs/system/notification/index.js +45 -0
  352. package/lib/commonjs/system/notification/index.js.map +1 -0
  353. package/lib/commonjs/system/notification/types.js +6 -0
  354. package/lib/commonjs/system/notification/types.js.map +1 -0
  355. package/lib/commonjs/types.js +28 -35
  356. package/lib/commonjs/types.js.map +1 -1
  357. package/lib/commonjs/utils/filePresets.js +43 -0
  358. package/lib/commonjs/utils/filePresets.js.map +1 -0
  359. package/lib/commonjs/utils/index.js +12 -27
  360. package/lib/commonjs/utils/index.js.map +1 -1
  361. package/lib/commonjs/web-core/AudioContext.js +21 -1
  362. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  363. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  364. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  365. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  366. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  367. package/lib/commonjs/web-core/DelayNode.js +17 -0
  368. package/lib/commonjs/web-core/DelayNode.js.map +1 -0
  369. package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
  370. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
  371. package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
  372. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  373. package/lib/commonjs/web-system/index.js +17 -0
  374. package/lib/commonjs/web-system/index.js.map +1 -0
  375. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
  376. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  377. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
  378. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
  379. package/lib/commonjs/web-system/notification/index.js +21 -0
  380. package/lib/commonjs/web-system/notification/index.js.map +1 -0
  381. package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
  382. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
  383. package/lib/module/AudioAPIModule/globals.d.js +4 -0
  384. package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
  385. package/lib/module/AudioAPIModule/index.js +4 -0
  386. package/lib/module/AudioAPIModule/index.js.map +1 -0
  387. package/lib/module/api.js +7 -12
  388. package/lib/module/api.js.map +1 -1
  389. package/lib/module/api.web.js +4 -1
  390. package/lib/module/api.web.js.map +1 -1
  391. package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
  392. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  393. package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
  394. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  395. package/lib/module/core/AudioContext.js +5 -8
  396. package/lib/module/core/AudioContext.js.map +1 -1
  397. package/lib/module/core/AudioNode.js +1 -1
  398. package/lib/module/core/AudioNode.js.map +1 -1
  399. package/lib/module/core/AudioParam.js +18 -11
  400. package/lib/module/core/AudioParam.js.map +1 -1
  401. package/lib/module/core/AudioRecorder.js +57 -56
  402. package/lib/module/core/AudioRecorder.js.map +1 -1
  403. package/lib/module/core/BaseAudioContext.js +63 -32
  404. package/lib/module/core/BaseAudioContext.js.map +1 -1
  405. package/lib/module/core/ConvolverNode.js +31 -0
  406. package/lib/module/core/ConvolverNode.js.map +1 -0
  407. package/lib/module/core/DelayNode.js +11 -0
  408. package/lib/module/core/DelayNode.js.map +1 -0
  409. package/lib/module/core/IIRFilterNode.js +13 -0
  410. package/lib/module/core/IIRFilterNode.js.map +1 -0
  411. package/lib/module/core/OfflineAudioContext.js +3 -6
  412. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  413. package/lib/module/plugin/withAudioAPI.js +47 -1
  414. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  415. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  416. package/lib/module/system/AudioManager.js +9 -15
  417. package/lib/module/system/AudioManager.js.map +1 -1
  418. package/lib/module/system/index.js +1 -0
  419. package/lib/module/system/index.js.map +1 -1
  420. package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
  421. package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
  422. package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
  423. package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
  424. package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
  425. package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
  426. package/lib/module/system/notification/index.js +7 -0
  427. package/lib/module/system/notification/index.js.map +1 -0
  428. package/lib/module/system/notification/types.js +4 -0
  429. package/lib/module/system/notification/types.js.map +1 -0
  430. package/lib/module/types.js +27 -34
  431. package/lib/module/types.js.map +1 -1
  432. package/lib/module/utils/filePresets.js +39 -0
  433. package/lib/module/utils/filePresets.js.map +1 -0
  434. package/lib/module/utils/index.js +10 -10
  435. package/lib/module/utils/index.js.map +1 -1
  436. package/lib/module/web-core/AudioContext.js +21 -1
  437. package/lib/module/web-core/AudioContext.js.map +1 -1
  438. package/lib/module/web-core/ConvolverNode.js +34 -0
  439. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  440. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  441. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  442. package/lib/module/web-core/DelayNode.js +11 -0
  443. package/lib/module/web-core/DelayNode.js.map +1 -0
  444. package/lib/module/web-core/IIRFilterNode.js +13 -0
  445. package/lib/module/web-core/IIRFilterNode.js.map +1 -0
  446. package/lib/module/web-core/OfflineAudioContext.js +20 -0
  447. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  448. package/lib/module/web-system/index.js +4 -0
  449. package/lib/module/web-system/index.js.map +1 -0
  450. package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
  451. package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  452. package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
  453. package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
  454. package/lib/module/web-system/notification/index.js +5 -0
  455. package/lib/module/web-system/notification/index.js.map +1 -0
  456. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
  457. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
  458. package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
  459. package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
  460. package/lib/typescript/api.d.ts +5 -9
  461. package/lib/typescript/api.d.ts.map +1 -1
  462. package/lib/typescript/api.web.d.ts +4 -1
  463. package/lib/typescript/api.web.d.ts.map +1 -1
  464. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
  465. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  466. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  467. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  468. package/lib/typescript/core/AudioContext.d.ts +1 -1
  469. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  470. package/lib/typescript/core/AudioNode.d.ts +2 -1
  471. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  472. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  473. package/lib/typescript/core/AudioRecorder.d.ts +16 -6
  474. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  475. package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
  476. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  477. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  478. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  479. package/lib/typescript/core/DelayNode.d.ts +9 -0
  480. package/lib/typescript/core/DelayNode.d.ts.map +1 -0
  481. package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
  482. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
  483. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
  484. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  485. package/lib/typescript/events/types.d.ts +6 -2
  486. package/lib/typescript/events/types.d.ts.map +1 -1
  487. package/lib/typescript/interfaces.d.ts +36 -34
  488. package/lib/typescript/interfaces.d.ts.map +1 -1
  489. package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
  490. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  491. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
  492. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  493. package/lib/typescript/system/AudioManager.d.ts +5 -5
  494. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  495. package/lib/typescript/system/index.d.ts +1 -0
  496. package/lib/typescript/system/index.d.ts.map +1 -1
  497. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
  498. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  499. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
  500. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
  501. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
  502. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
  503. package/lib/typescript/system/notification/index.d.ts +5 -0
  504. package/lib/typescript/system/notification/index.d.ts.map +1 -0
  505. package/lib/typescript/system/notification/types.d.ts +65 -0
  506. package/lib/typescript/system/notification/types.d.ts.map +1 -0
  507. package/lib/typescript/system/types.d.ts +0 -16
  508. package/lib/typescript/system/types.d.ts.map +1 -1
  509. package/lib/typescript/types.d.ts +58 -45
  510. package/lib/typescript/types.d.ts.map +1 -1
  511. package/lib/typescript/utils/filePresets.d.ts +9 -0
  512. package/lib/typescript/utils/filePresets.d.ts.map +1 -0
  513. package/lib/typescript/utils/index.d.ts +1 -8
  514. package/lib/typescript/utils/index.d.ts.map +1 -1
  515. package/lib/typescript/web-core/AudioContext.d.ts +9 -2
  516. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  517. package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
  518. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  519. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  520. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  521. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  522. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  523. package/lib/typescript/web-core/DelayNode.d.ts +8 -0
  524. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
  525. package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
  526. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
  527. package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
  528. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  529. package/lib/typescript/web-system/index.d.ts +2 -0
  530. package/lib/typescript/web-system/index.d.ts.map +1 -0
  531. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
  532. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  533. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
  534. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
  535. package/lib/typescript/web-system/notification/index.d.ts +3 -0
  536. package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
  537. package/package.json +11 -5
  538. package/scripts/download-prebuilt-binaries.sh +61 -0
  539. package/scripts/rnaa_utils.rb +8 -0
  540. package/scripts/validate-worklets-version.js +27 -0
  541. package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
  542. package/src/AudioAPIModule/globals.d.ts +33 -0
  543. package/src/AudioAPIModule/index.ts +1 -0
  544. package/src/api.ts +21 -52
  545. package/src/api.web.ts +8 -2
  546. package/src/core/AudioBufferBaseSourceNode.ts +8 -0
  547. package/src/core/AudioBufferQueueSourceNode.ts +8 -2
  548. package/src/core/AudioContext.ts +5 -8
  549. package/src/core/AudioNode.ts +4 -3
  550. package/src/core/AudioParam.ts +18 -11
  551. package/src/core/AudioRecorder.ts +86 -84
  552. package/src/core/BaseAudioContext.ts +120 -54
  553. package/src/core/ConvolverNode.ts +35 -0
  554. package/src/core/DelayNode.ts +13 -0
  555. package/src/core/IIRFilterNode.ts +25 -0
  556. package/src/core/OfflineAudioContext.ts +4 -7
  557. package/src/events/types.ts +7 -3
  558. package/src/interfaces.ts +55 -34
  559. package/src/plugin/withAudioAPI.ts +61 -0
  560. package/src/specs/NativeAudioAPIModule.ts +26 -9
  561. package/src/system/AudioManager.ts +13 -32
  562. package/src/system/index.ts +1 -0
  563. package/src/system/notification/PlaybackNotificationManager.ts +197 -0
  564. package/src/system/notification/RecordingNotificationManager.ts +247 -0
  565. package/src/system/notification/SimpleNotificationManager.ts +175 -0
  566. package/src/system/notification/index.ts +4 -0
  567. package/src/system/notification/types.ts +111 -0
  568. package/src/system/types.ts +0 -18
  569. package/src/types.ts +61 -46
  570. package/src/utils/filePresets.ts +47 -0
  571. package/src/utils/index.ts +13 -19
  572. package/src/web-core/AudioContext.tsx +40 -1
  573. package/src/web-core/BaseAudioContext.tsx +11 -1
  574. package/src/web-core/ConvolverNode.tsx +43 -0
  575. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  576. package/src/web-core/DelayNode.tsx +12 -0
  577. package/src/web-core/IIRFilterNode.tsx +25 -0
  578. package/src/web-core/OfflineAudioContext.tsx +39 -0
  579. package/src/web-system/index.ts +1 -0
  580. package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
  581. package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
  582. package/src/web-system/notification/index.ts +2 -0
  583. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  584. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  585. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  586. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  587. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  588. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  589. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
  590. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
  591. package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
  592. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
  593. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  594. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  595. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  596. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -35
  597. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  598. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  599. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  600. package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
  601. package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
  602. package/lib/commonjs/utils/bitEnums.js +0 -33
  603. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  604. package/lib/module/utils/bitEnums.js +0 -27
  605. package/lib/module/utils/bitEnums.js.map +0 -1
  606. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  607. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  608. package/metro-config/index.d.ts +0 -5
  609. package/metro-config/index.js +0 -41
  610. package/metro-config/tsconfig.json +0 -3
  611. package/src/utils/bitEnums.ts +0 -51
  612. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
  613. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
  614. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
  615. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
  616. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
  617. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
  618. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
  619. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
  620. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
  621. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
  622. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
  623. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
@@ -1,135 +0,0 @@
1
- #import <AVFoundation/AVFoundation.h>
2
- #import <Foundation/Foundation.h>
3
-
4
- #include <audioapi/ios/core/IOSAudioFileOptions.h>
5
-
6
- namespace audioapi {
7
-
8
- IOSAudioFileOptions::IOSAudioFileOptions(float sampleRate, size_t channelCount, size_t bitRate, size_t flags)
9
- {
10
- sampleRate_ = sampleRate;
11
- channelCount_ = channelCount;
12
- bitRate_ = bitRate;
13
-
14
- format_ = static_cast<uint8_t>(((flags >> 0) & 0xF));
15
- quality_ = static_cast<uint8_t>(((flags >> 4) & 0xF));
16
- flacCompressionLevel_ = static_cast<uint8_t>(((flags >> 8) & 0xF));
17
- directory_ = static_cast<uint8_t>(((flags >> 12) & 0xF));
18
- bitDepth_ = static_cast<uint8_t>(((flags >> 16) & 0xF));
19
- }
20
-
21
- AudioFormatID IOSAudioFileOptions::getFormat() const
22
- {
23
- switch (format_) {
24
- case 1:
25
- return kAudioFormatLinearPCM; // WAV <-> Linear PCM container
26
- case 2:
27
- return kAudioFormatLinearPCM; // CAF <-> Linear PCM container
28
- case 3:
29
- return kAudioFormatMPEG4AAC; // M4A <-> AAC
30
- case 4:
31
- return kAudioFormatFLAC; // FLAC <-> FLAC
32
- default:
33
- return kAudioFormatLinearPCM; // Default to Linear PCM
34
- }
35
- }
36
-
37
- NSInteger IOSAudioFileOptions::getQuality() const
38
- {
39
- switch (quality_) {
40
- case 1:
41
- return AVAudioQualityMin;
42
- case 2:
43
- return AVAudioQualityLow;
44
- case 3:
45
- return AVAudioQualityMedium;
46
- case 4:
47
- return AVAudioQualityHigh;
48
- case 5:
49
- return AVAudioQualityMax;
50
- default:
51
- return AVAudioQualityMedium; // Default to Medium
52
- }
53
- }
54
-
55
- NSInteger IOSAudioFileOptions::getFlacCompressionLevel() const
56
- {
57
- // Shift the quality from 1-9 to 0-8 for real values
58
- // Default to 5 if out of range
59
- return (flacCompressionLevel_ >= 1 && flacCompressionLevel_ <= 9) ? flacCompressionLevel_ - 1 : 5;
60
- }
61
-
62
- NSSearchPathDirectory IOSAudioFileOptions::getDirectory() const
63
- {
64
- switch (directory_) {
65
- case 1:
66
- return NSDocumentDirectory;
67
- case 2:
68
- return NSCachesDirectory;
69
- default:
70
- return NSCachesDirectory; // Default to Caches
71
- }
72
- }
73
-
74
- NSString *IOSAudioFileOptions::getFileExtension() const
75
- {
76
- switch (format_) {
77
- case 1:
78
- return @"wav"; // WAV <-> Linear PCM container
79
- case 2:
80
- return @"caf"; // CAF <-> Linear PCM container
81
- case 3:
82
- return @"m4a"; // M4A <-> AAC
83
- case 4:
84
- return @"flac"; // FLAC <-> FLAC
85
- default:
86
- return @"wav"; // Default to WAV
87
- }
88
- }
89
-
90
- NSInteger IOSAudioFileOptions::getBitDepth() const
91
- {
92
- switch (bitDepth_) {
93
- case 1:
94
- return 16;
95
- case 2:
96
- return 24;
97
- case 3:
98
- return 32;
99
- default:
100
- return 24; // Default to 24-bit
101
- }
102
- }
103
-
104
- NSDictionary *IOSAudioFileOptions::getFileSettings()
105
- {
106
- AudioFormatID format = getFormat();
107
- NSMutableDictionary *settings = [NSMutableDictionary dictionary];
108
-
109
- settings[AVFormatIDKey] = @(format);
110
- settings[AVSampleRateKey] = @(sampleRate_);
111
- settings[AVNumberOfChannelsKey] = @(channelCount_);
112
-
113
- settings[AVEncoderAudioQualityKey] = @(getQuality());
114
-
115
- if (format == kAudioFormatMPEG4AAC) {
116
- settings[AVEncoderBitRateKey] = @(bitRate_);
117
- }
118
-
119
- if (format == kAudioFormatLinearPCM) {
120
- NSInteger bitDepth = getBitDepth();
121
-
122
- settings[AVLinearPCMBitDepthKey] = @(bitDepth);
123
- settings[AVLinearPCMIsFloatKey] = @(bitDepth == 32);
124
- settings[AVLinearPCMIsBigEndianKey] = @(NO);
125
- settings[AVLinearPCMIsNonInterleaved] = @(NO);
126
- }
127
-
128
- if (format == kAudioFormatFLAC) {
129
- settings[@"FLACCompressionLevel"] = @(getFlacCompressionLevel());
130
- }
131
-
132
- return settings;
133
- }
134
-
135
- } // namespace audioapi
@@ -1,38 +0,0 @@
1
- #pragma once
2
-
3
- #include <memory>
4
- #include <string>
5
-
6
- #ifndef __OBJC__ // when compiled as C++
7
- typedef struct objc_object AVAudioFile;
8
- typedef struct objc_object NSURL;
9
- typedef struct objc_object AudioBufferList;
10
- #endif // __OBJC__
11
-
12
- namespace audioapi {
13
-
14
- class IOSAudioFileOptions;
15
-
16
- class IOSAudioFileWriter {
17
- public:
18
- IOSAudioFileWriter(float sampleRate, size_t channelCount, size_t bitRate, size_t iosFlags);
19
- ~IOSAudioFileWriter();
20
-
21
- void openFile(AVAudioFormat *bufferFormat);
22
- std::string closeFile();
23
-
24
- bool writeAudioData(const AudioBufferList *audioBufferList, int numFrames);
25
-
26
- private:
27
- NSString *getISODateStringForDirectory();
28
- NSString *getTimestampForFilename();
29
- NSURL *getFileURL();
30
-
31
- std::shared_ptr<IOSAudioFileOptions> fileOptions_;
32
- AVAudioFile *audioFile_;
33
- AVAudioFormat *bufferFormat_;
34
- AVAudioConverter *converter_;
35
- NSURL *fileURL_;
36
- };
37
-
38
- } // namespace audioapi
@@ -1,187 +0,0 @@
1
- #import <AVFoundation/AVFoundation.h>
2
- #import <Foundation/Foundation.h>
3
-
4
- #include <audioapi/ios/core/IOSAudioFileOptions.h>
5
- #include <audioapi/ios/core/IOSAudioFileWriter.h>
6
-
7
- namespace audioapi {
8
- IOSAudioFileWriter::IOSAudioFileWriter(float sampleRate, size_t channelCount, size_t bitRate, size_t iosFlags)
9
- {
10
- fileOptions_ = std::make_shared<IOSAudioFileOptions>(sampleRate, channelCount, bitRate, iosFlags);
11
- }
12
-
13
- IOSAudioFileWriter::~IOSAudioFileWriter()
14
- {
15
- fileURL_ = nil;
16
- audioFile_ = nil;
17
- converter_ = nil;
18
- bufferFormat_ = nil;
19
- }
20
-
21
- void IOSAudioFileWriter::openFile(AVAudioFormat *bufferFormat)
22
- {
23
- @autoreleasepool {
24
- if (audioFile_ != nil) {
25
- NSLog(@"⚠️ createFileForWriting: currentAudioFile_ already exists");
26
- return;
27
- }
28
-
29
- bufferFormat_ = bufferFormat;
30
-
31
- NSError *error = nil;
32
- NSDictionary *settings = fileOptions_->getFileSettings();
33
- fileURL_ = getFileURL();
34
-
35
- NSLog(@"ℹ️ Creating audio file at URL: %@", [fileURL_ absoluteString]);
36
-
37
- audioFile_ = [[AVAudioFile alloc] initForWriting:fileURL_
38
- settings:settings
39
- commonFormat:AVAudioPCMFormatFloat32
40
- interleaved:bufferFormat.interleaved
41
- error:&error];
42
- converter_ = [[AVAudioConverter alloc] initFromFormat:bufferFormat toFormat:[audioFile_ processingFormat]];
43
- converter_.sampleRateConverterAlgorithm = AVSampleRateConverterAlgorithm_Normal;
44
- converter_.sampleRateConverterQuality = AVAudioQualityMax;
45
- converter_.primeMethod = AVAudioConverterPrimeMethod_None;
46
-
47
- NSLog(@"buferFormat: %@ fileFormat: %@", bufferFormat, [audioFile_ processingFormat]);
48
-
49
- if (error != nil || audioFile_ == nil) {
50
- NSLog(@"Error creating audio file for writing: %@", [error debugDescription]);
51
- audioFile_ = nil;
52
- }
53
- }
54
- }
55
-
56
- std::string IOSAudioFileWriter::closeFile()
57
- {
58
- @autoreleasepool {
59
- std::string filePath = [[fileURL_ path] UTF8String];
60
-
61
- if (audioFile_ == nil) {
62
- return "";
63
- }
64
-
65
- // AVAudioFile automatically finalizes the file when deallocated
66
- audioFile_ = nil;
67
- fileURL_ = nil;
68
- return filePath;
69
- }
70
- }
71
-
72
- bool IOSAudioFileWriter::writeAudioData(const AudioBufferList *audioBufferList, int numFrames)
73
- {
74
- if (audioFile_ == nil) {
75
- NSLog(@"⚠️ writeAudioData: audioFile is nil, cannot write data");
76
- return false;
77
- }
78
-
79
- // TODO: not sure if this is necessary
80
- @autoreleasepool {
81
- NSError *error = nil;
82
- AVAudioFormat *filePCMFormat = [audioFile_ processingFormat];
83
-
84
- if (audioBufferList->mNumberBuffers != filePCMFormat.channelCount ||
85
- bufferFormat_.sampleRate != filePCMFormat.sampleRate ||
86
- bufferFormat_.interleaved != filePCMFormat.interleaved) {
87
- int outputFrameCount = ceil(numFrames * filePCMFormat.sampleRate / bufferFormat_.sampleRate);
88
-
89
- AVAudioPCMBuffer *inputBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:bufferFormat_
90
- frameCapacity:(AVAudioFrameCount)numFrames];
91
-
92
- for (int i = 0; i < bufferFormat_.channelCount; i++) {
93
- memcpy(
94
- inputBuffer.mutableAudioBufferList->mBuffers[i].mData,
95
- audioBufferList->mBuffers[i].mData,
96
- audioBufferList->mBuffers[i].mDataByteSize);
97
- }
98
-
99
- inputBuffer.frameLength = numFrames;
100
- AVAudioPCMBuffer *outputBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:filePCMFormat
101
- frameCapacity:outputFrameCount];
102
- outputBuffer.frameLength = outputFrameCount;
103
-
104
- AVAudioConverterInputBlock inputBlock =
105
- ^AVAudioBuffer *_Nullable(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus *outStatus)
106
- {
107
- // this line is probably an delusion, but for my sanity lets keep it
108
- inNumberOfPackets = numFrames;
109
- *outStatus = AVAudioConverterInputStatus_HaveData;
110
- return inputBuffer;
111
- };
112
-
113
- [converter_ convertToBuffer:outputBuffer error:&error withInputFromBlock:inputBlock];
114
-
115
- if (error != nil) {
116
- NSLog(@"Error during audio conversion: %@", [error debugDescription]);
117
- return false;
118
- }
119
-
120
- [audioFile_ writeFromBuffer:outputBuffer error:&error];
121
-
122
- if (error != nil) {
123
- NSLog(@"Error writing audio data to file: %@", [error debugDescription]);
124
- return false;
125
- }
126
- } else {
127
- AVAudioPCMBuffer *processingBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:filePCMFormat
128
- bufferListNoCopy:audioBufferList
129
- deallocator:NULL];
130
-
131
- [audioFile_ writeFromBuffer:processingBuffer error:&error];
132
-
133
- if (error != nil) {
134
- NSLog(@"Error writing audio data to file: %@", [error debugDescription]);
135
- return false;
136
- }
137
- }
138
-
139
- return true;
140
- }
141
- }
142
-
143
- NSString *IOSAudioFileWriter::getISODateStringForDirectory()
144
- {
145
- NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
146
- fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
147
- fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; // or local if you prefer
148
- fmt.dateFormat = @"yyyy-MM-dd";
149
- return [fmt stringFromDate:[NSDate date]];
150
- }
151
-
152
- NSString *IOSAudioFileWriter::getTimestampForFilename()
153
- {
154
- NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
155
- fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
156
- fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; // or local if you prefer
157
- fmt.dateFormat = @"yyyyMMdd_HHmmss_SSS";
158
- return [fmt stringFromDate:[NSDate date]];
159
- }
160
-
161
- NSURL *IOSAudioFileWriter::getFileURL()
162
- {
163
- NSError *error = nil;
164
-
165
- NSSearchPathDirectory searchDirectory = fileOptions_->getDirectory();
166
- NSString *directory = [NSString stringWithFormat:@"AudioAPI/%@", getISODateStringForDirectory()];
167
-
168
- NSURL *baseURL = [[[NSFileManager defaultManager] URLsForDirectory:searchDirectory
169
- inDomains:NSUserDomainMask] firstObject];
170
- NSURL *dirURL = [baseURL URLByAppendingPathComponent:directory isDirectory:YES];
171
-
172
- [[NSFileManager defaultManager] createDirectoryAtURL:dirURL
173
- withIntermediateDirectories:YES
174
- attributes:nil
175
- error:&error];
176
-
177
- if (error != nil) {
178
- NSLog(@"Error creating directory for audio recordings: %@", [error debugDescription]);
179
- dirURL = baseURL;
180
- }
181
-
182
- NSString *fileName =
183
- [NSString stringWithFormat:@"audio_%@.%@", getTimestampForFilename(), fileOptions_->getFileExtension()];
184
- return [dirURL URLByAppendingPathComponent:fileName];
185
- }
186
-
187
- } // namespace audioapi
@@ -1,24 +0,0 @@
1
- #pragma once
2
-
3
- #import <AVFoundation/AVFoundation.h>
4
- #import <Foundation/Foundation.h>
5
- #import <MediaPlayer/MediaPlayer.h>
6
-
7
- @class AudioAPIModule;
8
-
9
- @interface LockScreenManager : NSObject
10
-
11
- @property (nonatomic, weak) AudioAPIModule *audioAPIModule;
12
-
13
- @property (nonatomic, weak) MPNowPlayingInfoCenter *playingInfoCenter;
14
- @property (nonatomic, copy) NSString *artworkUrl;
15
- @property (nonatomic, assign) bool isReceivingRemoteCommands;
16
-
17
- - (instancetype)initWithAudioAPIModule:(AudioAPIModule *)audioAPIModule;
18
- - (void)cleanup;
19
-
20
- - (void)setLockScreenInfo:(NSDictionary *)info;
21
- - (void)resetLockScreenInfo;
22
- - (void)enableRemoteCommand:(NSString *)name enabled:(BOOL)enabled;
23
-
24
- @end
@@ -1,310 +0,0 @@
1
- #import <MediaPlayer/MediaPlayer.h>
2
- #import <audioapi/ios/AudioAPIModule.h>
3
- #import <audioapi/ios/system/LockScreenManager.h>
4
-
5
- #define LOCK_SCREEN_INFO \
6
- @{ \
7
- @"album" : MPMediaItemPropertyAlbumTitle, \
8
- @"artist" : MPMediaItemPropertyArtist, \
9
- @"duration" : MPMediaItemPropertyPlaybackDuration, \
10
- @"title" : MPMediaItemPropertyTitle, \
11
- @"speed" : MPNowPlayingInfoPropertyPlaybackRate, \
12
- @"elapsedTime" : MPNowPlayingInfoPropertyElapsedPlaybackTime, \
13
- }
14
-
15
- @implementation LockScreenManager
16
-
17
- - (instancetype)initWithAudioAPIModule:(AudioAPIModule *)audioAPIModule
18
- {
19
- if (self = [super init]) {
20
- self.audioAPIModule = audioAPIModule;
21
- self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
22
- self.isReceivingRemoteCommands = false;
23
- }
24
-
25
- return self;
26
- }
27
-
28
- - (void)toggleRemoteCommands:(bool)enable
29
- {
30
- if (enable && !self.isReceivingRemoteCommands) {
31
- self.isReceivingRemoteCommands = true;
32
- dispatch_async(dispatch_get_main_queue(), ^{
33
- [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
34
- });
35
- return;
36
- } else if (!enable && self.isReceivingRemoteCommands) {
37
- self.isReceivingRemoteCommands = false;
38
- dispatch_async(dispatch_get_main_queue(), ^{
39
- [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
40
- });
41
- return;
42
- }
43
- }
44
-
45
- - (void)cleanup
46
- {
47
- NSLog(@"[LockScreenManager] cleanup");
48
- [self toggleRemoteCommands:false];
49
- [self resetLockScreenInfo];
50
- }
51
-
52
- - (void)setLockScreenInfo:(NSDictionary *)info
53
- {
54
- self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
55
- [self toggleRemoteCommands:true];
56
-
57
- // now playing info(lock screen info)
58
- NSMutableDictionary *lockScreenInfoDict;
59
-
60
- if (self.playingInfoCenter.nowPlayingInfo == nil) {
61
- lockScreenInfoDict = [NSMutableDictionary dictionary];
62
- } else {
63
- lockScreenInfoDict = [[NSMutableDictionary alloc] initWithDictionary:self.playingInfoCenter.nowPlayingInfo];
64
- }
65
-
66
- for (NSString *key in LOCK_SCREEN_INFO) {
67
- if ([info objectForKey:key] != nil) {
68
- [lockScreenInfoDict setValue:[info objectForKey:key] forKey:[LOCK_SCREEN_INFO objectForKey:key]];
69
- }
70
- }
71
-
72
- self.playingInfoCenter.nowPlayingInfo = lockScreenInfoDict;
73
-
74
- // playback state
75
- NSString *state = [info objectForKey:@"state"];
76
-
77
- if (state != nil) {
78
- if ([state isEqualToString:@"state_playing"]) {
79
- self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePlaying;
80
- } else if ([state isEqualToString:@"state_paused"]) {
81
- self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePaused;
82
- }
83
- }
84
-
85
- self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePaused;
86
-
87
- // artwork
88
- NSString *artworkUrl = [self getArtworkUrl:[info objectForKey:@"artwork"]];
89
- [self updateArtworkIfNeeded:artworkUrl];
90
- }
91
-
92
- - (void)resetLockScreenInfo
93
- {
94
- [self toggleRemoteCommands:false];
95
- self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
96
- self.playingInfoCenter.nowPlayingInfo = nil;
97
- self.artworkUrl = nil;
98
- }
99
-
100
- - (NSString *)getArtworkUrl:(NSString *)artwork
101
- {
102
- NSString *artworkUrl = nil;
103
-
104
- if (artwork) {
105
- if ([artwork isKindOfClass:[NSString class]]) {
106
- artworkUrl = artwork;
107
- } else if ([[artwork valueForKey:@"uri"] isKindOfClass:[NSString class]]) {
108
- artworkUrl = [artwork valueForKey:@"uri"];
109
- }
110
- }
111
-
112
- return artworkUrl;
113
- }
114
-
115
- - (void)updateArtworkIfNeeded:(id)artworkUrl
116
- {
117
- if (artworkUrl == nil) {
118
- return;
119
- }
120
-
121
- MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
122
- if ([artworkUrl isEqualToString:self.artworkUrl] &&
123
- [center.nowPlayingInfo objectForKey:MPMediaItemPropertyArtwork] != nil) {
124
- return;
125
- }
126
-
127
- self.artworkUrl = artworkUrl;
128
-
129
- // Custom handling of artwork in another thread, will be loaded async
130
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
131
- UIImage *image = nil;
132
-
133
- // check whether artwork path is present
134
- if ([artworkUrl isEqual:@""]) {
135
- return;
136
- }
137
-
138
- // artwork is url download from the interwebs
139
- if ([artworkUrl hasPrefix:@"http://"] || [artworkUrl hasPrefix:@"https://"]) {
140
- NSURL *imageURL = [NSURL URLWithString:artworkUrl];
141
- NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
142
- image = [UIImage imageWithData:imageData];
143
- } else {
144
- NSString *localArtworkUrl = [artworkUrl stringByReplacingOccurrencesOfString:@"file://" withString:@""];
145
- BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:localArtworkUrl];
146
- if (fileExists) {
147
- image = [UIImage imageNamed:localArtworkUrl];
148
- }
149
- }
150
-
151
- // Check if image was available otherwise don't do anything
152
- if (image == nil) {
153
- return;
154
- }
155
-
156
- // check whether image is loaded
157
- CGImageRef cgref = [image CGImage];
158
- CIImage *cim = [image CIImage];
159
-
160
- if (cim == nil && cgref == NULL) {
161
- return;
162
- }
163
-
164
- dispatch_async(dispatch_get_main_queue(), ^{
165
- // Check if URL wasn't changed in the meantime
166
- if (![artworkUrl isEqual:self.artworkUrl]) {
167
- return;
168
- }
169
-
170
- MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
171
- MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithBoundsSize:image.size
172
- requestHandler:^UIImage *_Nonnull(CGSize size) {
173
- return image;
174
- }];
175
- NSMutableDictionary *mediaDict = (center.nowPlayingInfo != nil)
176
- ? [[NSMutableDictionary alloc] initWithDictionary:center.nowPlayingInfo]
177
- : [NSMutableDictionary dictionary];
178
- [mediaDict setValue:artwork forKey:MPMediaItemPropertyArtwork];
179
- center.nowPlayingInfo = mediaDict;
180
- });
181
- });
182
- }
183
-
184
- - (void)enableRemoteCommand:(NSString *)name enabled:(BOOL)enabled
185
- {
186
- MPRemoteCommandCenter *remoteCenter = [MPRemoteCommandCenter sharedCommandCenter];
187
-
188
- if ([name isEqual:@"remotePlay"]) {
189
- [self enableCommand:remoteCenter.playCommand withSelector:@selector(onPlay:) enabled:enabled];
190
- } else if ([name isEqual:@"remotePause"]) {
191
- [self enableCommand:remoteCenter.pauseCommand withSelector:@selector(onPause:) enabled:enabled];
192
- } else if ([name isEqual:@"remoteStop"]) {
193
- [self enableCommand:remoteCenter.stopCommand withSelector:@selector(onStop:) enabled:enabled];
194
- } else if ([name isEqual:@"remoteTogglePlayPause"]) {
195
- [self enableCommand:remoteCenter.togglePlayPauseCommand withSelector:@selector(onTogglePlayPause:) enabled:enabled];
196
- } else if ([name isEqual:@"remoteChangePlaybackRate"]) {
197
- [self enableCommand:remoteCenter.changePlaybackRateCommand
198
- withSelector:@selector(onChangePlaybackRate:)
199
- enabled:enabled];
200
- } else if ([name isEqual:@"remoteNextTrack"]) {
201
- [self enableCommand:remoteCenter.nextTrackCommand withSelector:@selector(onNextTrack:) enabled:enabled];
202
- } else if ([name isEqual:@"remotePreviousTrack"]) {
203
- [self enableCommand:remoteCenter.previousTrackCommand withSelector:@selector(onPreviousTrack:) enabled:enabled];
204
- } else if ([name isEqual:@"remoteSkipForward"]) {
205
- remoteCenter.skipForwardCommand.preferredIntervals = @[ @15 ];
206
- [self enableCommand:remoteCenter.skipForwardCommand withSelector:@selector(onSkipForward:) enabled:enabled];
207
- } else if ([name isEqual:@"remoteSkipBackward"]) {
208
- remoteCenter.skipBackwardCommand.preferredIntervals = @[ @15 ];
209
- [self enableCommand:remoteCenter.skipBackwardCommand withSelector:@selector(onSkipBackward:) enabled:enabled];
210
- } else if ([name isEqual:@"remoteSeekForward"]) {
211
- [self enableCommand:remoteCenter.seekForwardCommand withSelector:@selector(onSeekForward:) enabled:enabled];
212
- } else if ([name isEqual:@"remoteSeekBackward"]) {
213
- [self enableCommand:remoteCenter.seekBackwardCommand withSelector:@selector(onSeekBackward:) enabled:enabled];
214
- } else if ([name isEqual:@"remoteChangePlaybackPosition"]) {
215
- [self enableCommand:remoteCenter.changePlaybackPositionCommand
216
- withSelector:@selector(onChangePlaybackPosition:)
217
- enabled:enabled];
218
- }
219
- }
220
-
221
- - (void)enableCommand:(MPRemoteCommand *)command withSelector:(SEL)selector enabled:(BOOL)enabled
222
- {
223
- [command removeTarget:self action:selector];
224
- if (enabled) {
225
- [command addTarget:self action:selector];
226
- }
227
- command.enabled = enabled;
228
- }
229
-
230
- - (MPRemoteCommandHandlerStatus)onPlay:(MPRemoteCommandEvent *)event
231
- {
232
- [self.audioAPIModule invokeHandlerWithEventName:@"remotePlay" eventBody:nil];
233
- return MPRemoteCommandHandlerStatusSuccess;
234
- }
235
-
236
- - (MPRemoteCommandHandlerStatus)onPause:(MPRemoteCommandEvent *)event
237
- {
238
- [self.audioAPIModule invokeHandlerWithEventName:@"remotePause" eventBody:nil];
239
- return MPRemoteCommandHandlerStatusSuccess;
240
- }
241
-
242
- - (MPRemoteCommandHandlerStatus)onStop:(MPRemoteCommandEvent *)event
243
- {
244
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteStop" eventBody:nil];
245
- return MPRemoteCommandHandlerStatusSuccess;
246
- }
247
-
248
- - (MPRemoteCommandHandlerStatus)onTogglePlayPause:(MPRemoteCommandEvent *)event
249
- {
250
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteTogglePlayPause" eventBody:nil];
251
- return MPRemoteCommandHandlerStatusSuccess;
252
- }
253
-
254
- - (MPRemoteCommandHandlerStatus)onChangePlaybackRate:(MPChangePlaybackRateCommandEvent *)event
255
- {
256
- NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.playbackRate]};
257
-
258
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteChangePlaybackRate" eventBody:body];
259
- return MPRemoteCommandHandlerStatusSuccess;
260
- }
261
-
262
- - (MPRemoteCommandHandlerStatus)onNextTrack:(MPRemoteCommandEvent *)event
263
- {
264
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteNextTrack" eventBody:nil];
265
- return MPRemoteCommandHandlerStatusSuccess;
266
- }
267
-
268
- - (MPRemoteCommandHandlerStatus)onPreviousTrack:(MPRemoteCommandEvent *)event
269
- {
270
- [self.audioAPIModule invokeHandlerWithEventName:@"remotePreviousTrack" eventBody:nil];
271
- return MPRemoteCommandHandlerStatusSuccess;
272
- }
273
-
274
- - (MPRemoteCommandHandlerStatus)onSeekForward:(MPRemoteCommandEvent *)event
275
- {
276
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteSeekForward" eventBody:nil];
277
- return MPRemoteCommandHandlerStatusSuccess;
278
- }
279
-
280
- - (MPRemoteCommandHandlerStatus)onSeekBackward:(MPRemoteCommandEvent *)event
281
- {
282
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteSeekBackward" eventBody:nil];
283
- return MPRemoteCommandHandlerStatusSuccess;
284
- }
285
-
286
- - (MPRemoteCommandHandlerStatus)onSkipForward:(MPSkipIntervalCommandEvent *)event
287
- {
288
- NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.interval]};
289
-
290
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteSkipForward" eventBody:body];
291
- return MPRemoteCommandHandlerStatusSuccess;
292
- }
293
-
294
- - (MPRemoteCommandHandlerStatus)onSkipBackward:(MPSkipIntervalCommandEvent *)event
295
- {
296
- NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.interval]};
297
-
298
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteSkipBackward" eventBody:body];
299
- return MPRemoteCommandHandlerStatusSuccess;
300
- }
301
-
302
- - (MPRemoteCommandHandlerStatus)onChangePlaybackPosition:(MPChangePlaybackPositionCommandEvent *)event
303
- {
304
- NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.positionTime]};
305
-
306
- [self.audioAPIModule invokeHandlerWithEventName:@"remoteChangePlaybackPosition" eventBody:body];
307
- return MPRemoteCommandHandlerStatusSuccess;
308
- }
309
-
310
- @end