react-native-audio-api 0.0.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +60 -1
  2. package/RNAudioAPI.podspec +46 -0
  3. package/android/CMakeLists.txt +74 -0
  4. package/android/build.gradle +194 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/libs/fftw3/arm64-v8a/libfftw3.a +0 -0
  7. package/android/libs/fftw3/armeabi-v7a/libfftw3.a +0 -0
  8. package/android/libs/fftw3/x86/libfftw3.a +0 -0
  9. package/android/libs/fftw3/x86_64/libfftw3.a +0 -0
  10. package/android/libs/include/fftw3/fftw3.h +413 -0
  11. package/android/src/main/AndroidManifest.xml +3 -0
  12. package/android/src/main/AndroidManifestNew.xml +2 -0
  13. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +22 -0
  14. package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +48 -0
  15. package/android/src/main/cpp/AudioPlayer/AudioPlayer.cpp +66 -0
  16. package/android/src/main/cpp/AudioPlayer/AudioPlayer.h +33 -0
  17. package/android/src/main/cpp/OnLoad.cpp +9 -0
  18. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +14 -0
  19. package/android/src/main/java/com/swmansion/audioapi/module/AudioAPIInstaller.kt +21 -0
  20. package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +25 -0
  21. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +52 -0
  22. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +45 -0
  23. package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +38 -0
  24. package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +16 -0
  25. package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +12 -0
  26. package/common/cpp/HostObjects/AudioBufferHostObject.cpp +143 -0
  27. package/common/cpp/HostObjects/AudioBufferHostObject.h +33 -0
  28. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +79 -0
  29. package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +37 -0
  30. package/common/cpp/HostObjects/AudioContextHostObject.cpp +54 -0
  31. package/common/cpp/HostObjects/AudioContextHostObject.h +36 -0
  32. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +33 -0
  33. package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +31 -0
  34. package/common/cpp/HostObjects/AudioNodeHostObject.cpp +102 -0
  35. package/common/cpp/HostObjects/AudioNodeHostObject.h +29 -0
  36. package/common/cpp/HostObjects/AudioParamHostObject.cpp +115 -0
  37. package/common/cpp/HostObjects/AudioParamHostObject.h +34 -0
  38. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +73 -0
  39. package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +31 -0
  40. package/common/cpp/HostObjects/BaseAudioContextHostObject.cpp +214 -0
  41. package/common/cpp/HostObjects/BaseAudioContextHostObject.h +39 -0
  42. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +125 -0
  43. package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +42 -0
  44. package/common/cpp/HostObjects/Constants.h +22 -0
  45. package/common/cpp/HostObjects/GainNodeHostObject.cpp +41 -0
  46. package/common/cpp/HostObjects/GainNodeHostObject.h +32 -0
  47. package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +88 -0
  48. package/common/cpp/HostObjects/OscillatorNodeHostObject.h +41 -0
  49. package/common/cpp/HostObjects/PeriodicWaveHostObject.cpp +33 -0
  50. package/common/cpp/HostObjects/PeriodicWaveHostObject.h +33 -0
  51. package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +41 -0
  52. package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +36 -0
  53. package/common/cpp/core/AudioArray.cpp +103 -0
  54. package/common/cpp/core/AudioArray.h +42 -0
  55. package/common/cpp/core/AudioBuffer.cpp +55 -0
  56. package/common/cpp/core/AudioBuffer.h +40 -0
  57. package/common/cpp/core/AudioBufferSourceNode.cpp +135 -0
  58. package/common/cpp/core/AudioBufferSourceNode.h +30 -0
  59. package/common/cpp/core/AudioBus.cpp +357 -0
  60. package/common/cpp/core/AudioBus.h +63 -0
  61. package/common/cpp/core/AudioContext.cpp +24 -0
  62. package/common/cpp/core/AudioContext.h +16 -0
  63. package/common/cpp/core/AudioDestinationNode.cpp +45 -0
  64. package/common/cpp/core/AudioDestinationNode.h +32 -0
  65. package/common/cpp/core/AudioNode.cpp +222 -0
  66. package/common/cpp/core/AudioNode.h +74 -0
  67. package/common/cpp/core/AudioNodeManager.cpp +72 -0
  68. package/common/cpp/core/AudioNodeManager.h +35 -0
  69. package/common/cpp/core/AudioParam.cpp +133 -0
  70. package/common/cpp/core/AudioParam.h +50 -0
  71. package/common/cpp/core/AudioScheduledSourceNode.cpp +53 -0
  72. package/common/cpp/core/AudioScheduledSourceNode.h +34 -0
  73. package/common/cpp/core/BaseAudioContext.cpp +157 -0
  74. package/common/cpp/core/BaseAudioContext.h +80 -0
  75. package/common/cpp/core/BiquadFilterNode.cpp +385 -0
  76. package/common/cpp/core/BiquadFilterNode.h +124 -0
  77. package/common/cpp/core/GainNode.cpp +30 -0
  78. package/common/cpp/core/GainNode.h +25 -0
  79. package/common/cpp/core/OscillatorNode.cpp +75 -0
  80. package/common/cpp/core/OscillatorNode.h +72 -0
  81. package/common/cpp/core/ParamChange.cpp +46 -0
  82. package/common/cpp/core/ParamChange.h +34 -0
  83. package/common/cpp/core/PeriodicWave.cpp +362 -0
  84. package/common/cpp/core/PeriodicWave.h +119 -0
  85. package/common/cpp/core/StereoPannerNode.cpp +56 -0
  86. package/common/cpp/core/StereoPannerNode.h +26 -0
  87. package/common/cpp/types/BiquadFilterType.h +19 -0
  88. package/common/cpp/types/ChannelCountMode.h +10 -0
  89. package/common/cpp/types/ChannelInterpretation.h +10 -0
  90. package/common/cpp/types/ContextState.h +10 -0
  91. package/common/cpp/types/OscillatorType.h +11 -0
  92. package/common/cpp/utils/FFTFrame.h +63 -0
  93. package/common/cpp/utils/Locker.h +47 -0
  94. package/common/cpp/utils/VectorMath.cpp +678 -0
  95. package/common/cpp/utils/VectorMath.h +71 -0
  96. package/common/cpp/utils/android/FFTFrame.cpp +22 -0
  97. package/common/cpp/utils/ios/FFTFrame.cpp +24 -0
  98. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +45 -0
  99. package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +26 -0
  100. package/common/cpp/wrappers/AudioBufferWrapper.cpp +46 -0
  101. package/common/cpp/wrappers/AudioBufferWrapper.h +30 -0
  102. package/common/cpp/wrappers/AudioContextWrapper.cpp +17 -0
  103. package/common/cpp/wrappers/AudioContextWrapper.h +19 -0
  104. package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +16 -0
  105. package/common/cpp/wrappers/AudioNodeWrapper.cpp +37 -0
  106. package/common/cpp/wrappers/AudioNodeWrapper.h +25 -0
  107. package/common/cpp/wrappers/AudioParamWrapper.cpp +42 -0
  108. package/common/cpp/wrappers/AudioParamWrapper.h +25 -0
  109. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +23 -0
  110. package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +23 -0
  111. package/common/cpp/wrappers/BaseAudioContextWrapper.cpp +76 -0
  112. package/common/cpp/wrappers/BaseAudioContextWrapper.h +49 -0
  113. package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +60 -0
  114. package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +37 -0
  115. package/common/cpp/wrappers/GainNodeWrapper.cpp +14 -0
  116. package/common/cpp/wrappers/GainNodeWrapper.h +20 -0
  117. package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +44 -0
  118. package/common/cpp/wrappers/OscillatorNodeWrapper.h +31 -0
  119. package/common/cpp/wrappers/PeriodicWaveWrapper.h +17 -0
  120. package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +16 -0
  121. package/common/cpp/wrappers/StereoPannerNodeWrapper.h +21 -0
  122. package/ios/AudioAPIModule.h +24 -0
  123. package/ios/AudioAPIModule.mm +44 -0
  124. package/ios/AudioPlayer/AudioPlayer.h +28 -0
  125. package/ios/AudioPlayer/AudioPlayer.m +119 -0
  126. package/ios/AudioPlayer/IOSAudioPlayer.h +33 -0
  127. package/ios/AudioPlayer/IOSAudioPlayer.mm +57 -0
  128. package/lib/module/core/AudioBuffer.js +37 -0
  129. package/lib/module/core/AudioBuffer.js.map +1 -0
  130. package/lib/module/core/AudioBufferSourceNode.js +28 -0
  131. package/lib/module/core/AudioBufferSourceNode.js.map +1 -0
  132. package/lib/module/core/AudioContext.js +10 -0
  133. package/lib/module/core/AudioContext.js.map +1 -0
  134. package/lib/module/core/AudioDestinationNode.js +7 -0
  135. package/lib/module/core/AudioDestinationNode.js.map +1 -0
  136. package/lib/module/core/AudioNode.js +22 -0
  137. package/lib/module/core/AudioNode.js.map +1 -0
  138. package/lib/module/core/AudioParam.js +35 -0
  139. package/lib/module/core/AudioParam.js.map +1 -0
  140. package/lib/module/core/AudioScheduledSourceNode.js +28 -0
  141. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -0
  142. package/lib/module/core/BaseAudioContext.js +57 -0
  143. package/lib/module/core/BaseAudioContext.js.map +1 -0
  144. package/lib/module/core/BiquadFilterNode.js +25 -0
  145. package/lib/module/core/BiquadFilterNode.js.map +1 -0
  146. package/lib/module/core/GainNode.js +9 -0
  147. package/lib/module/core/GainNode.js.map +1 -0
  148. package/lib/module/core/OscillatorNode.js +24 -0
  149. package/lib/module/core/OscillatorNode.js.map +1 -0
  150. package/lib/module/core/PeriodicWave.js +8 -0
  151. package/lib/module/core/PeriodicWave.js.map +1 -0
  152. package/lib/module/core/StereoPannerNode.js +9 -0
  153. package/lib/module/core/StereoPannerNode.js.map +1 -0
  154. package/lib/module/core/types.js +2 -0
  155. package/lib/module/core/types.js.map +1 -0
  156. package/lib/module/errors/IndexSizeError.js +8 -0
  157. package/lib/module/errors/IndexSizeError.js.map +1 -0
  158. package/lib/module/errors/InvalidAccessError.js +8 -0
  159. package/lib/module/errors/InvalidAccessError.js.map +1 -0
  160. package/lib/module/errors/InvalidStateError.js +8 -0
  161. package/lib/module/errors/InvalidStateError.js.map +1 -0
  162. package/lib/module/errors/RangeError.js +8 -0
  163. package/lib/module/errors/RangeError.js.map +1 -0
  164. package/lib/module/errors/index.js +5 -0
  165. package/lib/module/errors/index.js.map +1 -0
  166. package/lib/module/index.js +18 -0
  167. package/lib/module/index.js.map +1 -0
  168. package/lib/module/interfaces.js +2 -0
  169. package/lib/module/interfaces.js.map +1 -0
  170. package/lib/module/modules/global.d.js +2 -0
  171. package/lib/module/modules/global.d.js.map +1 -0
  172. package/lib/module/utils/install.js +22 -0
  173. package/lib/module/utils/install.js.map +1 -0
  174. package/lib/typescript/core/AudioBuffer.d.ts +12 -0
  175. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -0
  176. package/lib/typescript/core/AudioBufferSourceNode.d.ts +12 -0
  177. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -0
  178. package/lib/typescript/core/AudioContext.d.ts +6 -0
  179. package/lib/typescript/core/AudioContext.d.ts.map +1 -0
  180. package/lib/typescript/core/AudioDestinationNode.d.ts +7 -0
  181. package/lib/typescript/core/AudioDestinationNode.d.ts.map +1 -0
  182. package/lib/typescript/core/AudioNode.d.ts +16 -0
  183. package/lib/typescript/core/AudioNode.d.ts.map +1 -0
  184. package/lib/typescript/core/AudioParam.d.ts +14 -0
  185. package/lib/typescript/core/AudioParam.d.ts.map +1 -0
  186. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +10 -0
  187. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -0
  188. package/lib/typescript/core/BaseAudioContext.d.ts +26 -0
  189. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -0
  190. package/lib/typescript/core/BiquadFilterNode.d.ts +16 -0
  191. package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -0
  192. package/lib/typescript/core/GainNode.d.ts +9 -0
  193. package/lib/typescript/core/GainNode.d.ts.map +1 -0
  194. package/lib/typescript/core/OscillatorNode.d.ts +15 -0
  195. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -0
  196. package/lib/typescript/core/PeriodicWave.d.ts +5 -0
  197. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -0
  198. package/lib/typescript/core/StereoPannerNode.d.ts +9 -0
  199. package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -0
  200. package/lib/typescript/core/types.d.ts +9 -0
  201. package/lib/typescript/core/types.d.ts.map +1 -0
  202. package/lib/typescript/errors/IndexSizeError.d.ts +5 -0
  203. package/lib/typescript/errors/IndexSizeError.d.ts.map +1 -0
  204. package/lib/typescript/errors/InvalidAccessError.d.ts +5 -0
  205. package/lib/typescript/errors/InvalidAccessError.d.ts.map +1 -0
  206. package/lib/typescript/errors/InvalidStateError.d.ts +5 -0
  207. package/lib/typescript/errors/InvalidStateError.d.ts.map +1 -0
  208. package/lib/typescript/errors/RangeError.d.ts +5 -0
  209. package/lib/typescript/errors/RangeError.d.ts.map +1 -0
  210. package/lib/typescript/errors/index.d.ts +5 -0
  211. package/lib/typescript/errors/index.d.ts.map +1 -0
  212. package/lib/typescript/index.d.ts +14 -0
  213. package/lib/typescript/index.d.ts.map +1 -0
  214. package/lib/typescript/interfaces.d.ts +78 -0
  215. package/lib/typescript/interfaces.d.ts.map +1 -0
  216. package/lib/typescript/utils/install.d.ts +7 -0
  217. package/lib/typescript/utils/install.d.ts.map +1 -0
  218. package/package.json +104 -5
  219. package/src/core/AudioBuffer.ts +68 -0
  220. package/src/core/AudioBufferSourceNode.ts +35 -0
  221. package/src/core/AudioContext.ts +12 -0
  222. package/src/core/AudioDestinationNode.ts +9 -0
  223. package/src/core/AudioNode.ts +38 -0
  224. package/src/core/AudioParam.ts +55 -0
  225. package/src/core/AudioScheduledSourceNode.ts +43 -0
  226. package/src/core/BaseAudioContext.ts +97 -0
  227. package/src/core/BiquadFilterNode.ts +49 -0
  228. package/src/core/GainNode.ts +13 -0
  229. package/src/core/OscillatorNode.ts +37 -0
  230. package/src/core/PeriodicWave.ts +10 -0
  231. package/src/core/StereoPannerNode.ts +13 -0
  232. package/src/core/types.ts +26 -0
  233. package/src/errors/IndexSizeError.ts +8 -0
  234. package/src/errors/InvalidAccessError.ts +8 -0
  235. package/src/errors/InvalidStateError.ts +8 -0
  236. package/src/errors/RangeError.ts +8 -0
  237. package/src/errors/index.ts +4 -0
  238. package/src/index.ts +25 -0
  239. package/src/interfaces.ts +120 -0
  240. package/src/modules/global.d.ts +10 -0
  241. package/src/utils/install.ts +39 -0
  242. package/index.ts +0 -1
package/README.md CHANGED
@@ -1,3 +1,62 @@
1
+ <img src="./docs/assets/react-native-audio-api-gh-cover.png?v0.0.1" alt="React Native Audio API" width="100%">
2
+
1
3
  ### React Native Audio API
2
4
 
3
- react-native-audio-api context provides system for controlling audio in react-native environment compatible with Web Audio API specification.
5
+ `react-native-audio-api` provides system for controlling audio in React Native environment compatible with Web Audio API specification,
6
+ allowing developers to generate and modify audio in exact same way it is possible in browsers.
7
+
8
+ ## Installation
9
+
10
+ 1. Install `react-native-audio-api` library
11
+
12
+ ```bash
13
+ # using npm
14
+ npm install react-native-audio-api
15
+
16
+ # or using yarn
17
+ yarn add react-native-audio-api
18
+ ```
19
+
20
+ ## Documentation
21
+
22
+ `react-native-audio-api` tries to strictly follow the Web Audi API specification, which can be found at [https://www.w3.org/TR/webaudio/](https://www.w3.org/TR/webaudio/).
23
+ <br />
24
+ [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API) is useful resource to get familiar with audio processing basics.
25
+
26
+ ## Coverage
27
+
28
+ Our current coverage of Web Audio API specification can be found here: [Web Audio API coverage](./docs/web-audio-coverage.md).
29
+
30
+ ## Examples
31
+
32
+ <div align="center">
33
+
34
+ <a href="https://www.youtube.com/watch?v=npALr9IIDkI" target="_blank" rel="noopener noreferrer">
35
+ <img src="./docs/assets/rnaa-example-01-thumbnail.png" width="640" />
36
+ </a>
37
+
38
+ </div>
39
+
40
+ The source code for the example application is under the [`/apps/common-app`](./apps/common-app/) directory. If you want to play with the API but don't feel like trying it on a real app, you can run the example project. Check [Example README](./apps/fabric-example/README.md) for installation instructions.
41
+
42
+ ## Your feedback
43
+
44
+ We are open to new ideas and general feedback. If you want to share your opinion about `react-native-audio-api` or have some thoughts about how it could be further developed, don't hesitate to create an issue or contact the maintainers directly.
45
+
46
+ ## License
47
+
48
+ react-native-audio-api library is licensed under [The MIT License](./LICENSE). Some of the source code uses implementation directly copied from Webkit and copyrights are held by respective organizations, check [COPYING](./COPYING) file for further details
49
+
50
+ ## Credits
51
+
52
+ This project has been built and is maintained thanks to the support from [Software Mansion](https://swmansion.com)
53
+
54
+ [![swm](https://logo.swmansion.com/logo?color=white&variant=desktop&width=150&tag=react-native-reanimated-github 'Software Mansion')](https://swmansion.com)
55
+
56
+ ## Community Discord
57
+
58
+ <a href="https://discord.swmansion.com" target="_blank" rel="noopener noreferrer">Join the Software Mansion Community Discord</a> to chat about React Native Audio API or other Software Mansion libraries.
59
+
60
+ ## react-native-audio-api is created by Software Mansion
61
+
62
+ Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – [Hire us](https://swmansion.com/contact/projects?utm_source=audioapi&utm_medium=readme).
@@ -0,0 +1,46 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
5
+
6
+ Pod::Spec.new do |s|
7
+ s.name = "RNAudioAPI"
8
+ s.version = package["version"]
9
+ s.summary = package["description"]
10
+ s.homepage = package["homepage"]
11
+ s.license = package["license"]
12
+ s.authors = package["author"]
13
+
14
+ s.platforms = { :ios => min_ios_version_supported }
15
+ s.source = { :git => "https://github.com/software-mansion-labs/react-native-audio-api.git", :tag => "#{s.version}" }
16
+
17
+ s.source_files = "ios/**/*.{h,m,mm}", "common/cpp/**/*.{hpp,cpp,c,h}"
18
+
19
+ s.ios.frameworks = 'Accelerate'
20
+ s.xcconfig = {
21
+ 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) HAVE_ACCELERATE=1'
22
+ }
23
+
24
+ # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
25
+ # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
26
+ if respond_to?(:install_modules_dependencies, true)
27
+ install_modules_dependencies(s)
28
+ else
29
+ s.dependency "React-Core"
30
+
31
+ # Don't install the dependencies when we run `pod install` in the old architecture.
32
+ if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
33
+ s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
34
+ s.pod_target_xcconfig = {
35
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
36
+ "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
37
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
38
+ }
39
+ s.dependency "React-Codegen"
40
+ s.dependency "RCT-Folly"
41
+ s.dependency "RCTRequired"
42
+ s.dependency "RCTTypeSafety"
43
+ s.dependency "ReactCommon/turbomodule/core"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,74 @@
1
+ cmake_minimum_required(VERSION 3.12.0)
2
+ project(react-native-audio-api)
3
+
4
+ set(CMAKE_VERBOSE_MAKEFILE ON)
5
+ set(CMAKE_CXX_STANDARD 20)
6
+
7
+ # Detect the processor and SIMD support
8
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
9
+ set(HAVE_ARM_NEON_INTRINSICS TRUE)
10
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
11
+ set(HAVE_X86_SSE2 TRUE)
12
+ endif()
13
+
14
+ include("${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake")
15
+ add_compile_options(${folly_FLAGS})
16
+
17
+ file(GLOB_RECURSE SOURCE_FILES
18
+ "src/main/cpp/*.cpp"
19
+ "src/main/cpp/*.h"
20
+ "../common/cpp/*.cpp"
21
+ "../common/cpp/*.h"
22
+ "../common/cpp/core/*.cpp"
23
+ "../common/cpp/core/*.h"
24
+ "../common/cpp/wrappers/*.cpp"
25
+ "../common/cpp/wrappers/*.h"
26
+ "../common/cpp/HostObjects/*.cpp"
27
+ "../common/cpp/HostObjects/*.h"
28
+ "../common/cpp/utils/*.cpp"
29
+ "../common/cpp/utils/*.h"
30
+ "../common/cpp/types/*.h"
31
+ )
32
+
33
+ add_library(react-native-audio-api SHARED ${SOURCE_FILES})
34
+
35
+ file(GLOB DIRS CONFIGURE_DEPENDS "src/main/cpp/**" "../common/cpp/**")
36
+
37
+ target_include_directories(
38
+ react-native-audio-api
39
+ PRIVATE
40
+ ${DIRS}
41
+ "${REACT_NATIVE_DIR}/ReactCommon/jsi"
42
+ "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/jni"
43
+ "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/third-party/folly"
44
+ "${CMAKE_CURRENT_SOURCE_DIR}/libs/include/fftw3"
45
+ )
46
+
47
+ set(fftw3 ${CMAKE_CURRENT_SOURCE_DIR}/libs/fftw3/${ANDROID_ABI}/libfftw3.a)
48
+
49
+ find_package(ReactAndroid REQUIRED CONFIG)
50
+ find_package(fbjni REQUIRED CONFIG)
51
+ find_package(oboe REQUIRED CONFIG)
52
+
53
+ set(LINK_LIBRARIES
54
+ ReactAndroid::jsi
55
+ fbjni::fbjni
56
+ android
57
+ log
58
+ oboe::oboe
59
+ ${fftw3}
60
+ )
61
+
62
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
63
+ set(RN_VERSION_LINK_LIBRARIES
64
+ ReactAndroid::reactnative
65
+ )
66
+ else()
67
+ set(RN_VERSION_LINK_LIBRARIES
68
+ ReactAndroid::folly_runtime
69
+ ReactAndroid::glog
70
+ ReactAndroid::reactnativejni
71
+ )
72
+ endif()
73
+
74
+ target_link_libraries(react-native-audio-api ${LINK_LIBRARIES} ${RN_VERSION_LINK_LIBRARIES})
@@ -0,0 +1,194 @@
1
+ import com.android.Version
2
+ import org.apache.tools.ant.taskdefs.condition.Os
3
+
4
+ buildscript {
5
+ repositories {
6
+ google()
7
+ mavenCentral()
8
+ }
9
+
10
+ dependencies {
11
+ classpath "com.android.tools.build:gradle:7.2.2"
12
+ }
13
+ }
14
+
15
+ def reactNativeArchitectures() {
16
+ def value = rootProject.getProperties().get("reactNativeArchitectures")
17
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
18
+ }
19
+
20
+ def isNewArchitectureEnabled() {
21
+ return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
22
+ }
23
+
24
+ apply plugin: "com.android.library"
25
+ apply plugin: 'org.jetbrains.kotlin.android'
26
+
27
+ if (isNewArchitectureEnabled()) {
28
+ apply plugin: "com.facebook.react"
29
+ }
30
+
31
+ def getExtOrDefault(name) {
32
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["AudioAPI_" + name]
33
+ }
34
+
35
+ def getExtOrIntegerDefault(name) {
36
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["AudioAPI_" + name]).toInteger()
37
+ }
38
+
39
+ def resolveBuildType() {
40
+ Gradle gradle = getGradle()
41
+ String tskReqStr = gradle.getStartParameter().getTaskRequests()['args'].toString()
42
+ return tskReqStr.contains('Release') ? 'release' : 'debug'
43
+ }
44
+
45
+ def safeAppExtGet(prop, fallback) {
46
+ def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') }
47
+ appProject?.ext?.has(prop) ? appProject.ext.get(prop) : fallback
48
+ }
49
+
50
+ def resolveReactNativeDirectory() {
51
+ def reactNativeLocation = safeAppExtGet("REACT_NATIVE_NODE_MODULES_DIR", null)
52
+
53
+ if (reactNativeLocation !== null) {
54
+ return file(reactNativeLocation)
55
+ }
56
+
57
+ // Fallback to node resolver for custom directory structures like monorepos.
58
+ def reactNativePackage = file(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim())
59
+ if(reactNativePackage.exists()) {
60
+ return reactNativePackage.parentFile
61
+ }
62
+
63
+ throw new GradleException(
64
+ "[AudioAPI] Unable to resolve react-native location in node_modules. You should project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native."
65
+ )
66
+ }
67
+
68
+ def toPlatformFileString(String path) {
69
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
70
+ path = path.replace(File.separatorChar, '/' as char)
71
+ }
72
+ return path
73
+ }
74
+
75
+ def reactNativeRootDir = resolveReactNativeDirectory()
76
+
77
+ static def supportsNamespace() {
78
+ def parsed = Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
79
+ def major = parsed[0].toInteger()
80
+ def minor = parsed[1].toInteger()
81
+
82
+ // Namespace support was added in 7.3.0
83
+ return (major == 7 && minor >= 3) || major >= 8
84
+ }
85
+
86
+ android {
87
+ if (supportsNamespace()) {
88
+ namespace "com.swmansion.audioapi"
89
+
90
+ sourceSets {
91
+ main {
92
+ manifest.srcFile "src/main/AndroidManifestNew.xml"
93
+ }
94
+ }
95
+ }
96
+
97
+ ndkVersion getExtOrDefault("ndkVersion")
98
+ compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
99
+
100
+ defaultConfig {
101
+ minSdkVersion getExtOrIntegerDefault("minSdkVersion")
102
+ targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
103
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
104
+
105
+ externalNativeBuild {
106
+ cmake {
107
+ cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
108
+ abiFilters (*reactNativeArchitectures())
109
+ arguments "-DANDROID_STL=c++_shared",
110
+ "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}"
111
+ }
112
+ }
113
+ }
114
+
115
+ packagingOptions {
116
+ excludes = ["**/libc++_shared.so", "**/libfbjni.so", "**/libjsi.so", "**/libreactnativejni.so", "**/libfolly_json.so", "**/libreanimated.so", "**/libjscexecutor.so", "**/libhermes.so"]
117
+ }
118
+
119
+ externalNativeBuild {
120
+ cmake {
121
+ path "CMakeLists.txt"
122
+ }
123
+ }
124
+
125
+ buildFeatures {
126
+ buildConfig true
127
+ prefab true
128
+ }
129
+
130
+ buildTypes {
131
+ release {
132
+ minifyEnabled false
133
+ }
134
+ }
135
+
136
+ lintOptions {
137
+ disable "GradleCompatible"
138
+ }
139
+
140
+ compileOptions {
141
+ sourceCompatibility JavaVersion.VERSION_1_8
142
+ targetCompatibility JavaVersion.VERSION_1_8
143
+
144
+ packagingOptions {
145
+ doNotStrip resolveBuildType() == 'debug' ? "**/**/*.so" : ''
146
+
147
+ excludes = [
148
+ "**/libjsi.so",
149
+ "**/libfolly_runtime.so",
150
+ "**/libreactnativejni.so",
151
+ ]
152
+ }
153
+ }
154
+
155
+ sourceSets {
156
+ main {
157
+ if (isNewArchitectureEnabled()) {
158
+ java.srcDirs += [
159
+ // This is needed to build Kotlin project with NewArch enabled
160
+ "${project.buildDir}/generated/source/codegen/java"
161
+ ]
162
+ }
163
+ }
164
+ }
165
+ kotlinOptions {
166
+ jvmTarget = '17'
167
+ }
168
+ }
169
+
170
+ repositories {
171
+ mavenCentral()
172
+ google()
173
+ }
174
+
175
+
176
+ dependencies {
177
+ // For < 0.71, this will be from the local maven repo
178
+ // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
179
+ //noinspection GradleDynamicVersion
180
+ implementation "com.facebook.react:react-native:+"
181
+ implementation 'androidx.core:core-ktx:1.13.1'
182
+ implementation 'com.facebook.fbjni:fbjni:0.6.0'
183
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
184
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2"
185
+ implementation 'com.google.oboe:oboe:1.9.0'
186
+ }
187
+
188
+ if (isNewArchitectureEnabled()) {
189
+ react {
190
+ jsRootDir = file("../src/")
191
+ libraryName = "react-native-audio-api"
192
+ codegenJavaPackageName = "com.swmansion.audioapi"
193
+ }
194
+ }
@@ -0,0 +1,5 @@
1
+ AudioAPI_kotlinVersion=1.7.0
2
+ AudioAPI_minSdkVersion=21
3
+ AudioAPI_targetSdkVersion=31
4
+ AudioAPI_compileSdkVersion=31
5
+ AudioAPI_ndkversion=21.4.7075529