react-native-audio-api 0.8.3 → 0.9.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 +40 -39
- package/RNAudioAPI.podspec +17 -12
- package/android/build.gradle +44 -4
- package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
- package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +53 -18
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +362 -6
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +29 -241
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +152 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +37 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
- package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
- package/common/cpp/audioapi/core/AudioContext.cpp +3 -2
- package/common/cpp/audioapi/core/AudioContext.h +2 -1
- package/common/cpp/audioapi/core/AudioNode.cpp +3 -3
- package/common/cpp/audioapi/core/AudioNode.h +2 -2
- package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
- package/common/cpp/audioapi/core/AudioParam.h +1 -1
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +47 -3
- package/common/cpp/audioapi/core/BaseAudioContext.h +13 -4
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -3
- package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +3 -1
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +3 -1
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
- package/common/cpp/audioapi/core/effects/GainNode.cpp +3 -1
- package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +18 -13
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +89 -0
- package/common/cpp/audioapi/core/effects/WorkletNode.h +65 -0
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +91 -0
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +47 -10
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +18 -3
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +98 -14
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -3
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -44
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +7 -9
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +53 -0
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +7 -2
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -1
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +9 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.h +1 -9
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +84 -0
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
- package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +13 -7
- package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +5 -0
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +52 -0
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +9 -0
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +73 -0
- package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
- package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +49 -0
- package/common/cpp/audioapi/jsi/JsiPromise.h +29 -1
- package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
- package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
- package/common/cpp/test/AudioParamTest.cpp +204 -0
- package/common/cpp/test/CMakeLists.txt +12 -3
- package/common/cpp/test/GainTest.cpp +11 -10
- package/common/cpp/test/OscillatorTest.cpp +2 -1
- package/common/cpp/test/StereoPannerTest.cpp +129 -0
- package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
- package/lib/commonjs/api.js +36 -2
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +8 -0
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +10 -1
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +66 -11
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConstantSourceNode.js +17 -0
- package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +11 -2
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/core/OscillatorNode.js +6 -0
- package/lib/commonjs/core/OscillatorNode.js.map +1 -1
- package/lib/commonjs/core/WorkletNode.js +11 -0
- package/lib/commonjs/core/WorkletNode.js.map +1 -0
- package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
- package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
- package/lib/commonjs/core/WorkletSourceNode.js +11 -0
- package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
- package/lib/commonjs/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
- package/lib/commonjs/hooks/useSystemVolume.js.map +1 -0
- package/lib/commonjs/utils/index.js +9 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +4 -0
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
- package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/api.js +6 -2
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +1 -0
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +15 -0
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +10 -1
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioScheduledSourceNode.js +4 -4
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +66 -11
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConstantSourceNode.js +11 -0
- package/lib/module/core/ConstantSourceNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +11 -2
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/core/OscillatorNode.js +6 -0
- package/lib/module/core/OscillatorNode.js.map +1 -1
- package/lib/module/core/WorkletNode.js +5 -0
- package/lib/module/core/WorkletNode.js.map +1 -0
- package/lib/module/core/WorkletProcessingNode.js +5 -0
- package/lib/module/core/WorkletProcessingNode.js.map +1 -0
- package/lib/module/core/WorkletSourceNode.js +5 -0
- package/lib/module/core/WorkletSourceNode.js.map +1 -0
- package/lib/module/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
- package/lib/module/hooks/useSystemVolume.js.map +1 -0
- package/lib/module/utils/index.js +8 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +4 -0
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/web-core/ConstantSourceNode.js +11 -0
- package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +4 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/api.d.ts +8 -4
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +1 -0
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +4 -0
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -0
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +19 -11
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
- package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/OscillatorNode.d.ts +3 -0
- package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
- package/lib/typescript/core/WorkletNode.d.ts +4 -0
- package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
- package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
- package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
- package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
- package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
- package/lib/typescript/events/types.d.ts +2 -0
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/hooks/{useSytemVolume.d.ts → useSystemVolume.d.ts} +1 -1
- package/lib/typescript/hooks/useSystemVolume.d.ts.map +1 -0
- package/lib/typescript/interfaces.d.ts +21 -3
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +2 -1
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +8 -0
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +4 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConstantSourceNode.d.ts +8 -0
- package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +4 -2
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/api.ts +12 -3
- package/src/api.web.ts +1 -0
- package/src/core/AudioBufferBaseSourceNode.ts +9 -9
- package/src/core/AudioBufferQueueSourceNode.ts +1 -9
- package/src/core/AudioBufferSourceNode.ts +28 -0
- package/src/core/AudioContext.ts +12 -1
- package/src/core/AudioScheduledSourceNode.ts +5 -5
- package/src/core/BaseAudioContext.ts +149 -13
- package/src/core/ConstantSourceNode.ts +13 -0
- package/src/core/OfflineAudioContext.ts +18 -2
- package/src/core/OscillatorNode.ts +11 -0
- package/src/core/WorkletNode.ts +3 -0
- package/src/core/WorkletProcessingNode.ts +3 -0
- package/src/core/WorkletSourceNode.ts +3 -0
- package/src/events/types.ts +2 -0
- package/src/interfaces.ts +59 -5
- package/src/types.ts +3 -1
- package/src/utils/index.ts +21 -0
- package/src/web-core/AudioBufferSourceNode.tsx +1 -1
- package/src/web-core/AudioContext.tsx +7 -2
- package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
- package/src/web-core/BaseAudioContext.tsx +2 -0
- package/src/web-core/ConstantSourceNode.tsx +12 -0
- package/src/web-core/OfflineAudioContext.tsx +7 -2
- package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
- package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
- package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
- package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
- package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
- package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
- package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
- package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
- package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
- package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
- package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
- package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
- package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
- package/lib/commonjs/hooks/useSytemVolume.js.map +0 -1
- package/lib/module/hooks/useSytemVolume.js.map +0 -1
- package/lib/typescript/hooks/useSytemVolume.d.ts.map +0 -1
- /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
- /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
- /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
- /package/src/hooks/{useSytemVolume.ts → useSystemVolume.ts} +0 -0
|
@@ -3,12 +3,17 @@ import BaseAudioContext from './BaseAudioContext';
|
|
|
3
3
|
import { OfflineAudioContextOptions } from '../types';
|
|
4
4
|
import { InvalidStateError, NotSupportedError } from '../errors';
|
|
5
5
|
import AudioBuffer from './AudioBuffer';
|
|
6
|
+
import { isWorkletsAvailable, workletsModule } from '../utils';
|
|
6
7
|
|
|
7
8
|
export default class OfflineAudioContext extends BaseAudioContext {
|
|
8
9
|
private isSuspended: boolean;
|
|
9
10
|
private isRendering: boolean;
|
|
10
11
|
private duration: number;
|
|
11
12
|
|
|
13
|
+
// We need to keep here a reference to this runtime to better manage its lifecycle
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
15
|
+
private _audioRuntime: any;
|
|
16
|
+
|
|
12
17
|
constructor(options: OfflineAudioContextOptions);
|
|
13
18
|
constructor(numberOfChannels: number, length: number, sampleRate: number);
|
|
14
19
|
constructor(
|
|
@@ -16,10 +21,20 @@ export default class OfflineAudioContext extends BaseAudioContext {
|
|
|
16
21
|
arg1?: number,
|
|
17
22
|
arg2?: number
|
|
18
23
|
) {
|
|
24
|
+
let audioRuntime = null;
|
|
25
|
+
if (isWorkletsAvailable) {
|
|
26
|
+
audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
|
|
27
|
+
}
|
|
28
|
+
|
|
19
29
|
if (typeof arg0 === 'object') {
|
|
20
30
|
const { numberOfChannels, length, sampleRate } = arg0;
|
|
21
31
|
super(
|
|
22
|
-
global.createOfflineAudioContext(
|
|
32
|
+
global.createOfflineAudioContext(
|
|
33
|
+
numberOfChannels,
|
|
34
|
+
length,
|
|
35
|
+
sampleRate,
|
|
36
|
+
audioRuntime
|
|
37
|
+
)
|
|
23
38
|
);
|
|
24
39
|
|
|
25
40
|
this.duration = length / sampleRate;
|
|
@@ -28,7 +43,7 @@ export default class OfflineAudioContext extends BaseAudioContext {
|
|
|
28
43
|
typeof arg1 === 'number' &&
|
|
29
44
|
typeof arg2 === 'number'
|
|
30
45
|
) {
|
|
31
|
-
super(global.createOfflineAudioContext(arg0, arg1, arg2));
|
|
46
|
+
super(global.createOfflineAudioContext(arg0, arg1, arg2, audioRuntime));
|
|
32
47
|
this.duration = arg1 / arg2;
|
|
33
48
|
} else {
|
|
34
49
|
throw new NotSupportedError('Invalid constructor arguments');
|
|
@@ -36,6 +51,7 @@ export default class OfflineAudioContext extends BaseAudioContext {
|
|
|
36
51
|
|
|
37
52
|
this.isSuspended = false;
|
|
38
53
|
this.isRendering = false;
|
|
54
|
+
this._audioRuntime = audioRuntime;
|
|
39
55
|
}
|
|
40
56
|
|
|
41
57
|
async resume(): Promise<undefined> {
|
|
@@ -5,6 +5,7 @@ import AudioParam from './AudioParam';
|
|
|
5
5
|
import BaseAudioContext from './BaseAudioContext';
|
|
6
6
|
import PeriodicWave from './PeriodicWave';
|
|
7
7
|
import { InvalidStateError } from '../errors';
|
|
8
|
+
import { EventEmptyType } from '../events/types';
|
|
8
9
|
|
|
9
10
|
export default class OscillatorNode extends AudioScheduledSourceNode {
|
|
10
11
|
readonly frequency: AudioParam;
|
|
@@ -34,4 +35,14 @@ export default class OscillatorNode extends AudioScheduledSourceNode {
|
|
|
34
35
|
public setPeriodicWave(wave: PeriodicWave): void {
|
|
35
36
|
(this.node as IOscillatorNode).setPeriodicWave(wave.periodicWave);
|
|
36
37
|
}
|
|
38
|
+
|
|
39
|
+
public override get onEnded(): ((event: EventEmptyType) => void) | undefined {
|
|
40
|
+
return super.onEnded as ((event: EventEmptyType) => void) | undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public override set onEnded(
|
|
44
|
+
callback: ((event: EventEmptyType) => void) | null
|
|
45
|
+
) {
|
|
46
|
+
super.onEnded = callback;
|
|
47
|
+
}
|
|
37
48
|
}
|
package/src/events/types.ts
CHANGED
|
@@ -46,6 +46,7 @@ type SystemEvents = RemoteCommandEvents & {
|
|
|
46
46
|
|
|
47
47
|
export interface OnEndedEventType extends EventEmptyType {
|
|
48
48
|
bufferId: string | undefined;
|
|
49
|
+
isLast: boolean | undefined;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
export interface OnAudioReadyEventType {
|
|
@@ -56,6 +57,7 @@ export interface OnAudioReadyEventType {
|
|
|
56
57
|
|
|
57
58
|
interface AudioAPIEvents {
|
|
58
59
|
ended: OnEndedEventType;
|
|
60
|
+
loopEnded: EventEmptyType;
|
|
59
61
|
audioReady: OnAudioReadyEventType;
|
|
60
62
|
positionChanged: EventTypeWithValue;
|
|
61
63
|
audioError: EventEmptyType; // to change
|
package/src/interfaces.ts
CHANGED
|
@@ -1,12 +1,36 @@
|
|
|
1
|
+
import { AudioEventCallback, AudioEventName } from './events/types';
|
|
1
2
|
import {
|
|
2
|
-
WindowType,
|
|
3
|
-
ContextState,
|
|
4
|
-
OscillatorType,
|
|
5
3
|
BiquadFilterType,
|
|
6
4
|
ChannelCountMode,
|
|
7
5
|
ChannelInterpretation,
|
|
6
|
+
ContextState,
|
|
7
|
+
OscillatorType,
|
|
8
|
+
WindowType,
|
|
8
9
|
} from './types';
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
export type WorkletNodeCallback = (
|
|
12
|
+
audioData: Array<ArrayBuffer>,
|
|
13
|
+
channelCount: number
|
|
14
|
+
) => void;
|
|
15
|
+
|
|
16
|
+
export type WorkletSourceNodeCallback = (
|
|
17
|
+
audioData: Array<ArrayBuffer>,
|
|
18
|
+
framesToProcess: number,
|
|
19
|
+
currentTime: number,
|
|
20
|
+
startOffset: number
|
|
21
|
+
) => void;
|
|
22
|
+
|
|
23
|
+
export type WorkletProcessingNodeCallback = (
|
|
24
|
+
inputData: Array<ArrayBuffer>,
|
|
25
|
+
outputData: Array<ArrayBuffer>,
|
|
26
|
+
framesToProcess: number,
|
|
27
|
+
currentTime: number
|
|
28
|
+
) => void;
|
|
29
|
+
|
|
30
|
+
export type ShareableWorkletCallback =
|
|
31
|
+
| WorkletNodeCallback
|
|
32
|
+
| WorkletSourceNodeCallback
|
|
33
|
+
| WorkletProcessingNodeCallback;
|
|
10
34
|
|
|
11
35
|
export interface IBaseAudioContext {
|
|
12
36
|
readonly destination: IAudioDestinationNode;
|
|
@@ -15,12 +39,29 @@ export interface IBaseAudioContext {
|
|
|
15
39
|
readonly currentTime: number;
|
|
16
40
|
|
|
17
41
|
createRecorderAdapter(): IRecorderAdapterNode;
|
|
42
|
+
createWorkletSourceNode(
|
|
43
|
+
shareableWorklet: ShareableWorkletCallback,
|
|
44
|
+
shouldUseUiRuntime: boolean
|
|
45
|
+
): IWorkletSourceNode;
|
|
46
|
+
createWorkletNode(
|
|
47
|
+
shareableWorklet: ShareableWorkletCallback,
|
|
48
|
+
shouldUseUiRuntime: boolean,
|
|
49
|
+
bufferLength: number,
|
|
50
|
+
inputChannelCount: number
|
|
51
|
+
): IWorkletNode;
|
|
52
|
+
createWorkletProcessingNode(
|
|
53
|
+
shareableWorklet: ShareableWorkletCallback,
|
|
54
|
+
shouldUseUiRuntime: boolean
|
|
55
|
+
): IWorkletProcessingNode;
|
|
18
56
|
createOscillator(): IOscillatorNode;
|
|
57
|
+
createConstantSource(): IConstantSourceNode;
|
|
19
58
|
createGain(): IGainNode;
|
|
20
59
|
createStereoPanner(): IStereoPannerNode;
|
|
21
60
|
createBiquadFilter: () => IBiquadFilterNode;
|
|
22
61
|
createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
|
|
23
|
-
createBufferQueueSource: (
|
|
62
|
+
createBufferQueueSource: (
|
|
63
|
+
pitchCorrection: boolean
|
|
64
|
+
) => IAudioBufferQueueSourceNode;
|
|
24
65
|
createBuffer: (
|
|
25
66
|
channels: number,
|
|
26
67
|
length: number,
|
|
@@ -119,6 +160,10 @@ export interface IStreamerNode extends IAudioNode {
|
|
|
119
160
|
initialize(streamPath: string): boolean;
|
|
120
161
|
}
|
|
121
162
|
|
|
163
|
+
export interface IConstantSourceNode extends IAudioScheduledSourceNode {
|
|
164
|
+
readonly offset: IAudioParam;
|
|
165
|
+
}
|
|
166
|
+
|
|
122
167
|
export interface IAudioBufferSourceNode extends IAudioBufferBaseSourceNode {
|
|
123
168
|
buffer: IAudioBuffer | null;
|
|
124
169
|
loop: boolean;
|
|
@@ -128,6 +173,9 @@ export interface IAudioBufferSourceNode extends IAudioBufferBaseSourceNode {
|
|
|
128
173
|
|
|
129
174
|
start: (when?: number, offset?: number, duration?: number) => void;
|
|
130
175
|
setBuffer: (audioBuffer: IAudioBuffer | null) => void;
|
|
176
|
+
|
|
177
|
+
// passing subscriptionId(uint_64 in cpp, string in js) to the cpp
|
|
178
|
+
onLoopEnded: string;
|
|
131
179
|
}
|
|
132
180
|
|
|
133
181
|
export interface IAudioBufferQueueSourceNode
|
|
@@ -200,6 +248,12 @@ export interface IAnalyserNode extends IAudioNode {
|
|
|
200
248
|
|
|
201
249
|
export interface IRecorderAdapterNode extends IAudioNode {}
|
|
202
250
|
|
|
251
|
+
export interface IWorkletNode extends IAudioNode {}
|
|
252
|
+
|
|
253
|
+
export interface IWorkletSourceNode extends IAudioScheduledSourceNode {}
|
|
254
|
+
|
|
255
|
+
export interface IWorkletProcessingNode extends IAudioNode {}
|
|
256
|
+
|
|
203
257
|
export interface IAudioRecorder {
|
|
204
258
|
start: () => void;
|
|
205
259
|
stop: () => void;
|
package/src/types.ts
CHANGED
|
@@ -14,6 +14,8 @@ export type BiquadFilterType =
|
|
|
14
14
|
|
|
15
15
|
export type ContextState = 'running' | 'closed' | `suspended`;
|
|
16
16
|
|
|
17
|
+
export type AudioWorkletRuntime = 'AudioRuntime' | 'UIRuntime';
|
|
18
|
+
|
|
17
19
|
export type OscillatorType =
|
|
18
20
|
| 'sine'
|
|
19
21
|
| 'square'
|
|
@@ -43,7 +45,7 @@ export interface AudioRecorderOptions {
|
|
|
43
45
|
|
|
44
46
|
export type WindowType = 'blackman' | 'hann';
|
|
45
47
|
|
|
46
|
-
export interface
|
|
48
|
+
export interface AudioBufferBaseSourceNodeOptions {
|
|
47
49
|
pitchCorrection: boolean;
|
|
48
50
|
}
|
|
49
51
|
|
package/src/utils/index.ts
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
import type { ShareableWorkletCallback } from '../interfaces';
|
|
2
|
+
|
|
3
|
+
interface SimplifiedWorkletModule {
|
|
4
|
+
makeShareableCloneRecursive: (
|
|
5
|
+
workletCallback: ShareableWorkletCallback
|
|
6
|
+
) => ShareableWorkletCallback;
|
|
7
|
+
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
createWorkletRuntime: (options?: any) => any;
|
|
10
|
+
}
|
|
11
|
+
|
|
1
12
|
export function clamp(value: number, min: number, max: number): number {
|
|
2
13
|
return Math.min(Math.max(value, min), max);
|
|
3
14
|
}
|
|
15
|
+
|
|
16
|
+
export let isWorkletsAvailable = false;
|
|
17
|
+
export let workletsModule: SimplifiedWorkletModule;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
workletsModule = require('react-native-worklets');
|
|
21
|
+
isWorkletsAvailable = true;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
isWorkletsAvailable = false;
|
|
24
|
+
}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
ContextState,
|
|
3
3
|
PeriodicWaveConstraints,
|
|
4
4
|
AudioContextOptions,
|
|
5
|
-
|
|
5
|
+
AudioBufferBaseSourceNodeOptions,
|
|
6
6
|
} from '../types';
|
|
7
7
|
import { InvalidAccessError, NotSupportedError } from '../errors';
|
|
8
8
|
import BaseAudioContext from './BaseAudioContext';
|
|
@@ -17,6 +17,7 @@ import PeriodicWave from './PeriodicWave';
|
|
|
17
17
|
import StereoPannerNode from './StereoPannerNode';
|
|
18
18
|
|
|
19
19
|
import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
|
|
20
|
+
import ConstantSourceNode from './ConstantSourceNode';
|
|
20
21
|
|
|
21
22
|
export default class AudioContext implements BaseAudioContext {
|
|
22
23
|
readonly context: globalThis.AudioContext;
|
|
@@ -53,6 +54,10 @@ export default class AudioContext implements BaseAudioContext {
|
|
|
53
54
|
return new OscillatorNode(this, this.context.createOscillator());
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
createConstantSource(): ConstantSourceNode {
|
|
58
|
+
return new ConstantSourceNode(this, this.context.createConstantSource());
|
|
59
|
+
}
|
|
60
|
+
|
|
56
61
|
createGain(): GainNode {
|
|
57
62
|
return new GainNode(this, this.context.createGain());
|
|
58
63
|
}
|
|
@@ -66,7 +71,7 @@ export default class AudioContext implements BaseAudioContext {
|
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
async createBufferSource(
|
|
69
|
-
options?:
|
|
74
|
+
options?: AudioBufferBaseSourceNodeOptions
|
|
70
75
|
): Promise<AudioBufferSourceNode> {
|
|
71
76
|
if (!options || !options.pitchCorrection) {
|
|
72
77
|
return new AudioBufferSourceNode(
|
|
@@ -37,7 +37,7 @@ export default class AudioScheduledSourceNode extends AudioNode {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
// eslint-disable-next-line accessor-pairs
|
|
40
|
-
public set
|
|
40
|
+
public set onEnded(callback: (event: EventEmptyType) => void) {
|
|
41
41
|
(this.node as globalThis.AudioScheduledSourceNode).onended = callback;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -8,6 +8,7 @@ import GainNode from './GainNode';
|
|
|
8
8
|
import OscillatorNode from './OscillatorNode';
|
|
9
9
|
import PeriodicWave from './PeriodicWave';
|
|
10
10
|
import StereoPannerNode from './StereoPannerNode';
|
|
11
|
+
import ConstantSourceNode from './ConstantSourceNode';
|
|
11
12
|
|
|
12
13
|
export default interface BaseAudioContext {
|
|
13
14
|
readonly context: globalThis.BaseAudioContext;
|
|
@@ -18,6 +19,7 @@ export default interface BaseAudioContext {
|
|
|
18
19
|
get currentTime(): number;
|
|
19
20
|
get state(): ContextState;
|
|
20
21
|
createOscillator(): OscillatorNode;
|
|
22
|
+
createConstantSource(): ConstantSourceNode;
|
|
21
23
|
createGain(): GainNode;
|
|
22
24
|
createStereoPanner(): StereoPannerNode;
|
|
23
25
|
createBiquadFilter(): BiquadFilterNode;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import AudioParam from './AudioParam';
|
|
2
|
+
import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
3
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
4
|
+
|
|
5
|
+
export default class ConstantSourceNode extends AudioScheduledSourceNode {
|
|
6
|
+
readonly offset: AudioParam;
|
|
7
|
+
|
|
8
|
+
constructor(context: BaseAudioContext, node: globalThis.ConstantSourceNode) {
|
|
9
|
+
super(context, node);
|
|
10
|
+
this.offset = new AudioParam(node.offset, context);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
ContextState,
|
|
3
3
|
PeriodicWaveConstraints,
|
|
4
4
|
OfflineAudioContextOptions,
|
|
5
|
-
|
|
5
|
+
AudioBufferBaseSourceNodeOptions,
|
|
6
6
|
} from '../types';
|
|
7
7
|
import { InvalidAccessError, NotSupportedError } from '../errors';
|
|
8
8
|
import BaseAudioContext from './BaseAudioContext';
|
|
@@ -15,6 +15,7 @@ import GainNode from './GainNode';
|
|
|
15
15
|
import OscillatorNode from './OscillatorNode';
|
|
16
16
|
import PeriodicWave from './PeriodicWave';
|
|
17
17
|
import StereoPannerNode from './StereoPannerNode';
|
|
18
|
+
import ConstantSourceNode from './ConstantSourceNode';
|
|
18
19
|
|
|
19
20
|
import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
|
|
20
21
|
|
|
@@ -59,6 +60,10 @@ export default class OfflineAudioContext implements BaseAudioContext {
|
|
|
59
60
|
return new OscillatorNode(this, this.context.createOscillator());
|
|
60
61
|
}
|
|
61
62
|
|
|
63
|
+
createConstantSource(): ConstantSourceNode {
|
|
64
|
+
return new ConstantSourceNode(this, this.context.createConstantSource());
|
|
65
|
+
}
|
|
66
|
+
|
|
62
67
|
createGain(): GainNode {
|
|
63
68
|
return new GainNode(this, this.context.createGain());
|
|
64
69
|
}
|
|
@@ -72,7 +77,7 @@ export default class OfflineAudioContext implements BaseAudioContext {
|
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
async createBufferSource(
|
|
75
|
-
options?:
|
|
80
|
+
options?: AudioBufferBaseSourceNodeOptions
|
|
76
81
|
): Promise<AudioBufferSourceNode> {
|
|
77
82
|
if (!options || !options.pitchCorrection) {
|
|
78
83
|
return new AudioBufferSourceNode(
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/core/analysis/AnalyserNode.h>
|
|
4
|
-
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
5
|
-
|
|
6
|
-
#include <memory>
|
|
7
|
-
#include <string>
|
|
8
|
-
#include <vector>
|
|
9
|
-
|
|
10
|
-
namespace audioapi {
|
|
11
|
-
using namespace facebook;
|
|
12
|
-
|
|
13
|
-
class AnalyserNodeHostObject : public AudioNodeHostObject {
|
|
14
|
-
public:
|
|
15
|
-
explicit AnalyserNodeHostObject(const std::shared_ptr<AnalyserNode> &node)
|
|
16
|
-
: AudioNodeHostObject(node) {
|
|
17
|
-
addGetters(
|
|
18
|
-
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, fftSize),
|
|
19
|
-
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, frequencyBinCount),
|
|
20
|
-
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, minDecibels),
|
|
21
|
-
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, maxDecibels),
|
|
22
|
-
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, smoothingTimeConstant),
|
|
23
|
-
JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, window));
|
|
24
|
-
|
|
25
|
-
addFunctions(
|
|
26
|
-
JSI_EXPORT_FUNCTION(
|
|
27
|
-
AnalyserNodeHostObject, getFloatFrequencyData),
|
|
28
|
-
JSI_EXPORT_FUNCTION(
|
|
29
|
-
AnalyserNodeHostObject, getByteFrequencyData),
|
|
30
|
-
JSI_EXPORT_FUNCTION(
|
|
31
|
-
AnalyserNodeHostObject, getFloatTimeDomainData),
|
|
32
|
-
JSI_EXPORT_FUNCTION(
|
|
33
|
-
AnalyserNodeHostObject, getByteTimeDomainData));
|
|
34
|
-
|
|
35
|
-
addSetters(
|
|
36
|
-
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, fftSize),
|
|
37
|
-
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, minDecibels),
|
|
38
|
-
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, maxDecibels),
|
|
39
|
-
JSI_EXPORT_PROPERTY_SETTER(
|
|
40
|
-
AnalyserNodeHostObject, smoothingTimeConstant),
|
|
41
|
-
JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, window));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
JSI_PROPERTY_GETTER(fftSize) {
|
|
45
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
46
|
-
return {static_cast<int>(analyserNode->getFftSize())};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
JSI_PROPERTY_GETTER(frequencyBinCount) {
|
|
50
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
51
|
-
return {static_cast<int>(analyserNode->getFrequencyBinCount())};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
JSI_PROPERTY_GETTER(minDecibels) {
|
|
55
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
56
|
-
return {analyserNode->getMinDecibels()};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
JSI_PROPERTY_GETTER(maxDecibels) {
|
|
60
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
61
|
-
return {analyserNode->getMaxDecibels()};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
JSI_PROPERTY_GETTER(smoothingTimeConstant) {
|
|
65
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
66
|
-
return {analyserNode->getSmoothingTimeConstant()};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
JSI_PROPERTY_GETTER(window) {
|
|
70
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
71
|
-
auto windowType = analyserNode->getWindowType();
|
|
72
|
-
return jsi::String::createFromUtf8(runtime, windowType);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
JSI_HOST_FUNCTION(getFloatFrequencyData) {
|
|
76
|
-
auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
|
|
77
|
-
auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
|
|
78
|
-
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
79
|
-
|
|
80
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
81
|
-
analyserNode->getFloatFrequencyData(data, length);
|
|
82
|
-
|
|
83
|
-
return jsi::Value::undefined();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
JSI_HOST_FUNCTION(getByteFrequencyData) {
|
|
87
|
-
auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
|
|
88
|
-
auto data = arrayBuffer.data(runtime);
|
|
89
|
-
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
90
|
-
|
|
91
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
92
|
-
analyserNode->getByteFrequencyData(data, length);
|
|
93
|
-
|
|
94
|
-
return jsi::Value::undefined();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
JSI_HOST_FUNCTION(getFloatTimeDomainData) {
|
|
98
|
-
auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
|
|
99
|
-
auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
|
|
100
|
-
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
101
|
-
|
|
102
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
103
|
-
analyserNode->getFloatTimeDomainData(data, length);
|
|
104
|
-
|
|
105
|
-
return jsi::Value::undefined();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
JSI_HOST_FUNCTION(getByteTimeDomainData) {
|
|
109
|
-
auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
|
|
110
|
-
auto data = arrayBuffer.data(runtime);
|
|
111
|
-
auto length = static_cast<int>(arrayBuffer.size(runtime));
|
|
112
|
-
|
|
113
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
114
|
-
analyserNode->getByteTimeDomainData(data, length);
|
|
115
|
-
|
|
116
|
-
return jsi::Value::undefined();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
JSI_PROPERTY_SETTER(fftSize) {
|
|
120
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
121
|
-
auto fftSize = static_cast<int>(value.getNumber());
|
|
122
|
-
analyserNode->setFftSize(fftSize);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
JSI_PROPERTY_SETTER(minDecibels) {
|
|
126
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
127
|
-
auto minDecibels = static_cast<float>(value.getNumber());
|
|
128
|
-
analyserNode->setMinDecibels(minDecibels);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
JSI_PROPERTY_SETTER(maxDecibels) {
|
|
132
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
133
|
-
auto maxDecibels = static_cast<float>(value.getNumber());
|
|
134
|
-
analyserNode->setMaxDecibels(maxDecibels);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
JSI_PROPERTY_SETTER(smoothingTimeConstant) {
|
|
138
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
139
|
-
auto smoothingTimeConstant = static_cast<float>(value.getNumber());
|
|
140
|
-
analyserNode->setSmoothingTimeConstant(smoothingTimeConstant);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
JSI_PROPERTY_SETTER(window) {
|
|
144
|
-
auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
|
|
145
|
-
analyserNode->setWindowType(value.getString(runtime).utf8(runtime));
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
} // namespace audioapi
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <audioapi/core/sources/AudioBufferBaseSourceNode.h>
|
|
4
|
-
#include <audioapi/HostObjects/AudioParamHostObject.h>
|
|
5
|
-
#include <audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h>
|
|
6
|
-
|
|
7
|
-
#include <memory>
|
|
8
|
-
#include <vector>
|
|
9
|
-
|
|
10
|
-
namespace audioapi {
|
|
11
|
-
using namespace facebook;
|
|
12
|
-
|
|
13
|
-
class AudioBufferBaseSourceNodeHostObject
|
|
14
|
-
: public AudioScheduledSourceNodeHostObject {
|
|
15
|
-
public:
|
|
16
|
-
explicit AudioBufferBaseSourceNodeHostObject(
|
|
17
|
-
const std::shared_ptr<AudioBufferBaseSourceNode> &node)
|
|
18
|
-
: AudioScheduledSourceNodeHostObject(node) {
|
|
19
|
-
addGetters(
|
|
20
|
-
JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, detune),
|
|
21
|
-
JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, playbackRate),
|
|
22
|
-
JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
|
|
23
|
-
|
|
24
|
-
addSetters(
|
|
25
|
-
JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChanged),
|
|
26
|
-
JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
~AudioBufferBaseSourceNodeHostObject() {
|
|
30
|
-
auto sourceNode =
|
|
31
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
32
|
-
|
|
33
|
-
// When JSI object is garbage collected (together with the eventual callback),
|
|
34
|
-
// underlying source node might still be active and try to call the non-existing callback.
|
|
35
|
-
sourceNode->clearOnPositionChangedCallback();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
JSI_PROPERTY_GETTER(detune) {
|
|
39
|
-
auto sourceNode =
|
|
40
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
41
|
-
auto detune = sourceNode->getDetuneParam();
|
|
42
|
-
auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
|
|
43
|
-
return jsi::Object::createFromHostObject(runtime, detuneHostObject);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
JSI_PROPERTY_GETTER(playbackRate) {
|
|
47
|
-
auto sourceNode =
|
|
48
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
49
|
-
auto playbackRate = sourceNode->getPlaybackRateParam();
|
|
50
|
-
auto playbackRateHostObject =
|
|
51
|
-
std::make_shared<AudioParamHostObject>(playbackRate);
|
|
52
|
-
return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
JSI_PROPERTY_SETTER(onPositionChanged) {
|
|
56
|
-
auto sourceNode =
|
|
57
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
58
|
-
|
|
59
|
-
sourceNode->setOnPositionChangedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
JSI_PROPERTY_GETTER(onPositionChangedInterval) {
|
|
63
|
-
auto sourceNode =
|
|
64
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
65
|
-
return jsi::Value(sourceNode->getOnPositionChangedInterval());
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
JSI_PROPERTY_SETTER(onPositionChangedInterval) {
|
|
69
|
-
auto sourceNode =
|
|
70
|
-
std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
|
|
71
|
-
|
|
72
|
-
sourceNode->setOnPositionChangedInterval(static_cast<int>(value.getNumber()));
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
} // namespace audioapi
|