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