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.
- package/README.md +60 -1
- package/RNAudioAPI.podspec +46 -0
- package/android/CMakeLists.txt +74 -0
- package/android/build.gradle +194 -0
- package/android/gradle.properties +5 -0
- package/android/libs/fftw3/arm64-v8a/libfftw3.a +0 -0
- package/android/libs/fftw3/armeabi-v7a/libfftw3.a +0 -0
- package/android/libs/fftw3/x86/libfftw3.a +0 -0
- package/android/libs/fftw3/x86_64/libfftw3.a +0 -0
- package/android/libs/include/fftw3/fftw3.h +413 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.cpp +22 -0
- package/android/src/main/cpp/AudioAPIInstaller/AudioAPIInstaller.h +48 -0
- package/android/src/main/cpp/AudioPlayer/AudioPlayer.cpp +66 -0
- package/android/src/main/cpp/AudioPlayer/AudioPlayer.h +33 -0
- package/android/src/main/cpp/OnLoad.cpp +9 -0
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +14 -0
- package/android/src/main/java/com/swmansion/audioapi/module/AudioAPIInstaller.kt +21 -0
- package/android/src/main/java/com/swmansion/audioapi/nativemodules/AudioAPIModule.kt +25 -0
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.cpp +52 -0
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerHostObject.h +45 -0
- package/common/cpp/AudioAPIInstaller/AudioAPIInstallerWrapper.h +38 -0
- package/common/cpp/AudioAPIInstaller/android/AudioAPIInstallerWrapper.cpp +16 -0
- package/common/cpp/AudioAPIInstaller/ios/AudioAPIInstallerWrapper.cpp +12 -0
- package/common/cpp/HostObjects/AudioBufferHostObject.cpp +143 -0
- package/common/cpp/HostObjects/AudioBufferHostObject.h +33 -0
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.cpp +79 -0
- package/common/cpp/HostObjects/AudioBufferSourceNodeHostObject.h +37 -0
- package/common/cpp/HostObjects/AudioContextHostObject.cpp +54 -0
- package/common/cpp/HostObjects/AudioContextHostObject.h +36 -0
- package/common/cpp/HostObjects/AudioDestinationNodeHostObject.cpp +33 -0
- package/common/cpp/HostObjects/AudioDestinationNodeHostObject.h +31 -0
- package/common/cpp/HostObjects/AudioNodeHostObject.cpp +102 -0
- package/common/cpp/HostObjects/AudioNodeHostObject.h +29 -0
- package/common/cpp/HostObjects/AudioParamHostObject.cpp +115 -0
- package/common/cpp/HostObjects/AudioParamHostObject.h +34 -0
- package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.cpp +73 -0
- package/common/cpp/HostObjects/AudioScheduledSourceNodeHostObject.h +31 -0
- package/common/cpp/HostObjects/BaseAudioContextHostObject.cpp +214 -0
- package/common/cpp/HostObjects/BaseAudioContextHostObject.h +39 -0
- package/common/cpp/HostObjects/BiquadFilterNodeHostObject.cpp +125 -0
- package/common/cpp/HostObjects/BiquadFilterNodeHostObject.h +42 -0
- package/common/cpp/HostObjects/Constants.h +22 -0
- package/common/cpp/HostObjects/GainNodeHostObject.cpp +41 -0
- package/common/cpp/HostObjects/GainNodeHostObject.h +32 -0
- package/common/cpp/HostObjects/OscillatorNodeHostObject.cpp +88 -0
- package/common/cpp/HostObjects/OscillatorNodeHostObject.h +41 -0
- package/common/cpp/HostObjects/PeriodicWaveHostObject.cpp +33 -0
- package/common/cpp/HostObjects/PeriodicWaveHostObject.h +33 -0
- package/common/cpp/HostObjects/StereoPannerNodeHostObject.cpp +41 -0
- package/common/cpp/HostObjects/StereoPannerNodeHostObject.h +36 -0
- package/common/cpp/core/AudioArray.cpp +103 -0
- package/common/cpp/core/AudioArray.h +42 -0
- package/common/cpp/core/AudioBuffer.cpp +55 -0
- package/common/cpp/core/AudioBuffer.h +40 -0
- package/common/cpp/core/AudioBufferSourceNode.cpp +135 -0
- package/common/cpp/core/AudioBufferSourceNode.h +30 -0
- package/common/cpp/core/AudioBus.cpp +357 -0
- package/common/cpp/core/AudioBus.h +63 -0
- package/common/cpp/core/AudioContext.cpp +24 -0
- package/common/cpp/core/AudioContext.h +16 -0
- package/common/cpp/core/AudioDestinationNode.cpp +45 -0
- package/common/cpp/core/AudioDestinationNode.h +32 -0
- package/common/cpp/core/AudioNode.cpp +222 -0
- package/common/cpp/core/AudioNode.h +74 -0
- package/common/cpp/core/AudioNodeManager.cpp +72 -0
- package/common/cpp/core/AudioNodeManager.h +35 -0
- package/common/cpp/core/AudioParam.cpp +133 -0
- package/common/cpp/core/AudioParam.h +50 -0
- package/common/cpp/core/AudioScheduledSourceNode.cpp +53 -0
- package/common/cpp/core/AudioScheduledSourceNode.h +34 -0
- package/common/cpp/core/BaseAudioContext.cpp +157 -0
- package/common/cpp/core/BaseAudioContext.h +80 -0
- package/common/cpp/core/BiquadFilterNode.cpp +385 -0
- package/common/cpp/core/BiquadFilterNode.h +124 -0
- package/common/cpp/core/GainNode.cpp +30 -0
- package/common/cpp/core/GainNode.h +25 -0
- package/common/cpp/core/OscillatorNode.cpp +75 -0
- package/common/cpp/core/OscillatorNode.h +72 -0
- package/common/cpp/core/ParamChange.cpp +46 -0
- package/common/cpp/core/ParamChange.h +34 -0
- package/common/cpp/core/PeriodicWave.cpp +362 -0
- package/common/cpp/core/PeriodicWave.h +119 -0
- package/common/cpp/core/StereoPannerNode.cpp +56 -0
- package/common/cpp/core/StereoPannerNode.h +26 -0
- package/common/cpp/types/BiquadFilterType.h +19 -0
- package/common/cpp/types/ChannelCountMode.h +10 -0
- package/common/cpp/types/ChannelInterpretation.h +10 -0
- package/common/cpp/types/ContextState.h +10 -0
- package/common/cpp/types/OscillatorType.h +11 -0
- package/common/cpp/utils/FFTFrame.h +63 -0
- package/common/cpp/utils/Locker.h +47 -0
- package/common/cpp/utils/VectorMath.cpp +678 -0
- package/common/cpp/utils/VectorMath.h +71 -0
- package/common/cpp/utils/android/FFTFrame.cpp +22 -0
- package/common/cpp/utils/ios/FFTFrame.cpp +24 -0
- package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.cpp +45 -0
- package/common/cpp/wrappers/AudioBufferSourceNodeWrapper.h +26 -0
- package/common/cpp/wrappers/AudioBufferWrapper.cpp +46 -0
- package/common/cpp/wrappers/AudioBufferWrapper.h +30 -0
- package/common/cpp/wrappers/AudioContextWrapper.cpp +17 -0
- package/common/cpp/wrappers/AudioContextWrapper.h +19 -0
- package/common/cpp/wrappers/AudioDestinationNodeWrapper.h +16 -0
- package/common/cpp/wrappers/AudioNodeWrapper.cpp +37 -0
- package/common/cpp/wrappers/AudioNodeWrapper.h +25 -0
- package/common/cpp/wrappers/AudioParamWrapper.cpp +42 -0
- package/common/cpp/wrappers/AudioParamWrapper.h +25 -0
- package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.cpp +23 -0
- package/common/cpp/wrappers/AudioScheduledSourceNodeWrapper.h +23 -0
- package/common/cpp/wrappers/BaseAudioContextWrapper.cpp +76 -0
- package/common/cpp/wrappers/BaseAudioContextWrapper.h +49 -0
- package/common/cpp/wrappers/BiquadFilterNodeWrapper.cpp +60 -0
- package/common/cpp/wrappers/BiquadFilterNodeWrapper.h +37 -0
- package/common/cpp/wrappers/GainNodeWrapper.cpp +14 -0
- package/common/cpp/wrappers/GainNodeWrapper.h +20 -0
- package/common/cpp/wrappers/OscillatorNodeWrapper.cpp +44 -0
- package/common/cpp/wrappers/OscillatorNodeWrapper.h +31 -0
- package/common/cpp/wrappers/PeriodicWaveWrapper.h +17 -0
- package/common/cpp/wrappers/StereoPannerNodeWrapper.cpp +16 -0
- package/common/cpp/wrappers/StereoPannerNodeWrapper.h +21 -0
- package/ios/AudioAPIModule.h +24 -0
- package/ios/AudioAPIModule.mm +44 -0
- package/ios/AudioPlayer/AudioPlayer.h +28 -0
- package/ios/AudioPlayer/AudioPlayer.m +119 -0
- package/ios/AudioPlayer/IOSAudioPlayer.h +33 -0
- package/ios/AudioPlayer/IOSAudioPlayer.mm +57 -0
- package/lib/module/core/AudioBuffer.js +37 -0
- package/lib/module/core/AudioBuffer.js.map +1 -0
- package/lib/module/core/AudioBufferSourceNode.js +28 -0
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -0
- package/lib/module/core/AudioContext.js +10 -0
- package/lib/module/core/AudioContext.js.map +1 -0
- package/lib/module/core/AudioDestinationNode.js +7 -0
- package/lib/module/core/AudioDestinationNode.js.map +1 -0
- package/lib/module/core/AudioNode.js +22 -0
- package/lib/module/core/AudioNode.js.map +1 -0
- package/lib/module/core/AudioParam.js +35 -0
- package/lib/module/core/AudioParam.js.map +1 -0
- package/lib/module/core/AudioScheduledSourceNode.js +28 -0
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -0
- package/lib/module/core/BaseAudioContext.js +57 -0
- package/lib/module/core/BaseAudioContext.js.map +1 -0
- package/lib/module/core/BiquadFilterNode.js +25 -0
- package/lib/module/core/BiquadFilterNode.js.map +1 -0
- package/lib/module/core/GainNode.js +9 -0
- package/lib/module/core/GainNode.js.map +1 -0
- package/lib/module/core/OscillatorNode.js +24 -0
- package/lib/module/core/OscillatorNode.js.map +1 -0
- package/lib/module/core/PeriodicWave.js +8 -0
- package/lib/module/core/PeriodicWave.js.map +1 -0
- package/lib/module/core/StereoPannerNode.js +9 -0
- package/lib/module/core/StereoPannerNode.js.map +1 -0
- package/lib/module/core/types.js +2 -0
- package/lib/module/core/types.js.map +1 -0
- package/lib/module/errors/IndexSizeError.js +8 -0
- package/lib/module/errors/IndexSizeError.js.map +1 -0
- package/lib/module/errors/InvalidAccessError.js +8 -0
- package/lib/module/errors/InvalidAccessError.js.map +1 -0
- package/lib/module/errors/InvalidStateError.js +8 -0
- package/lib/module/errors/InvalidStateError.js.map +1 -0
- package/lib/module/errors/RangeError.js +8 -0
- package/lib/module/errors/RangeError.js.map +1 -0
- package/lib/module/errors/index.js +5 -0
- package/lib/module/errors/index.js.map +1 -0
- package/lib/module/index.js +18 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/interfaces.js +2 -0
- package/lib/module/interfaces.js.map +1 -0
- package/lib/module/modules/global.d.js +2 -0
- package/lib/module/modules/global.d.js.map +1 -0
- package/lib/module/utils/install.js +22 -0
- package/lib/module/utils/install.js.map +1 -0
- package/lib/typescript/core/AudioBuffer.d.ts +12 -0
- package/lib/typescript/core/AudioBuffer.d.ts.map +1 -0
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +12 -0
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -0
- package/lib/typescript/core/AudioContext.d.ts +6 -0
- package/lib/typescript/core/AudioContext.d.ts.map +1 -0
- package/lib/typescript/core/AudioDestinationNode.d.ts +7 -0
- package/lib/typescript/core/AudioDestinationNode.d.ts.map +1 -0
- package/lib/typescript/core/AudioNode.d.ts +16 -0
- package/lib/typescript/core/AudioNode.d.ts.map +1 -0
- package/lib/typescript/core/AudioParam.d.ts +14 -0
- package/lib/typescript/core/AudioParam.d.ts.map +1 -0
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +10 -0
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -0
- package/lib/typescript/core/BaseAudioContext.d.ts +26 -0
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -0
- package/lib/typescript/core/BiquadFilterNode.d.ts +16 -0
- package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/GainNode.d.ts +9 -0
- package/lib/typescript/core/GainNode.d.ts.map +1 -0
- package/lib/typescript/core/OscillatorNode.d.ts +15 -0
- package/lib/typescript/core/OscillatorNode.d.ts.map +1 -0
- package/lib/typescript/core/PeriodicWave.d.ts +5 -0
- package/lib/typescript/core/PeriodicWave.d.ts.map +1 -0
- package/lib/typescript/core/StereoPannerNode.d.ts +9 -0
- package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -0
- package/lib/typescript/core/types.d.ts +9 -0
- package/lib/typescript/core/types.d.ts.map +1 -0
- package/lib/typescript/errors/IndexSizeError.d.ts +5 -0
- package/lib/typescript/errors/IndexSizeError.d.ts.map +1 -0
- package/lib/typescript/errors/InvalidAccessError.d.ts +5 -0
- package/lib/typescript/errors/InvalidAccessError.d.ts.map +1 -0
- package/lib/typescript/errors/InvalidStateError.d.ts +5 -0
- package/lib/typescript/errors/InvalidStateError.d.ts.map +1 -0
- package/lib/typescript/errors/RangeError.d.ts +5 -0
- package/lib/typescript/errors/RangeError.d.ts.map +1 -0
- package/lib/typescript/errors/index.d.ts +5 -0
- package/lib/typescript/errors/index.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +14 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/interfaces.d.ts +78 -0
- package/lib/typescript/interfaces.d.ts.map +1 -0
- package/lib/typescript/utils/install.d.ts +7 -0
- package/lib/typescript/utils/install.d.ts.map +1 -0
- package/package.json +104 -5
- package/src/core/AudioBuffer.ts +68 -0
- package/src/core/AudioBufferSourceNode.ts +35 -0
- package/src/core/AudioContext.ts +12 -0
- package/src/core/AudioDestinationNode.ts +9 -0
- package/src/core/AudioNode.ts +38 -0
- package/src/core/AudioParam.ts +55 -0
- package/src/core/AudioScheduledSourceNode.ts +43 -0
- package/src/core/BaseAudioContext.ts +97 -0
- package/src/core/BiquadFilterNode.ts +49 -0
- package/src/core/GainNode.ts +13 -0
- package/src/core/OscillatorNode.ts +37 -0
- package/src/core/PeriodicWave.ts +10 -0
- package/src/core/StereoPannerNode.ts +13 -0
- package/src/core/types.ts +26 -0
- package/src/errors/IndexSizeError.ts +8 -0
- package/src/errors/InvalidAccessError.ts +8 -0
- package/src/errors/InvalidStateError.ts +8 -0
- package/src/errors/RangeError.ts +8 -0
- package/src/errors/index.ts +4 -0
- package/src/index.ts +25 -0
- package/src/interfaces.ts +120 -0
- package/src/modules/global.d.ts +10 -0
- package/src/utils/install.ts +39 -0
- 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
|
|
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
|
+
[](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
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|