react-native-audio-api 0.6.0-rc.4 → 0.6.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/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +35 -2
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +4 -0
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +31 -17
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -3
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +56 -2
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +0 -12
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +35 -12
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +30 -29
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +20 -22
- package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +19 -9
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +30 -11
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +53 -26
- package/android/src/main/java/com/swmansion/audioapi/system/VolumeChangeListener.kt +10 -5
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +39 -0
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +20 -14
- package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +24 -11
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +1 -0
- package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +10 -89
- package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +3 -24
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +2 -3
- package/common/cpp/audioapi/core/AudioContext.cpp +4 -1
- package/common/cpp/audioapi/core/AudioContext.h +1 -1
- package/common/cpp/audioapi/core/AudioNode.cpp +31 -2
- package/common/cpp/audioapi/core/AudioNode.h +7 -1
- package/common/cpp/audioapi/core/AudioParam.cpp +84 -2
- package/common/cpp/audioapi/core/AudioParam.h +14 -1
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +7 -1
- package/common/cpp/audioapi/core/BaseAudioContext.h +7 -1
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +3 -2
- package/common/cpp/audioapi/core/OfflineAudioContext.h +1 -1
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +19 -56
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +3 -2
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +28 -26
- package/common/cpp/audioapi/core/effects/GainNode.cpp +9 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +5 -2
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +56 -0
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +13 -13
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +14 -10
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +1 -1
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +7 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +5 -3
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +15 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +35 -1
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +15 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +108 -0
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +62 -0
- package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +48 -0
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +3 -4
- package/common/cpp/audioapi/utils/AudioArray.h +1 -1
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +94 -0
- package/common/cpp/audioapi/utils/CircularAudioArray.h +26 -0
- package/ios/audioapi/ios/AudioAPIModule.h +13 -0
- package/ios/audioapi/ios/AudioAPIModule.mm +115 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +3 -10
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +15 -52
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +2 -0
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +7 -3
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +7 -0
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +12 -0
- package/ios/audioapi/ios/system/AudioEngine.h +5 -0
- package/ios/audioapi/ios/system/AudioEngine.mm +7 -15
- package/ios/audioapi/ios/system/AudioSessionManager.h +3 -1
- package/ios/audioapi/ios/system/AudioSessionManager.mm +36 -17
- package/ios/audioapi/ios/system/LockScreenManager.h +3 -3
- package/ios/audioapi/ios/system/LockScreenManager.mm +36 -48
- package/ios/audioapi/ios/system/NotificationManager.h +3 -3
- package/ios/audioapi/ios/system/NotificationManager.mm +21 -29
- package/lib/commonjs/api.js +4 -4
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +2 -2
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +8 -2
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +2 -1
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +11 -28
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -1
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/core/BiquadFilterNode.js +4 -4
- package/lib/commonjs/core/BiquadFilterNode.js.map +1 -1
- package/lib/commonjs/core/GainNode.js +1 -1
- package/lib/commonjs/core/GainNode.js.map +1 -1
- package/lib/commonjs/core/OscillatorNode.js +2 -2
- package/lib/commonjs/core/OscillatorNode.js.map +1 -1
- package/lib/commonjs/core/StereoPannerNode.js +1 -1
- package/lib/commonjs/core/StereoPannerNode.js.map +1 -1
- package/lib/commonjs/events/AudioEventEmitter.js +22 -0
- package/lib/commonjs/events/AudioEventEmitter.js.map +1 -0
- package/lib/commonjs/events/AudioEventSubscription.js +20 -0
- package/lib/commonjs/events/AudioEventSubscription.js.map +1 -0
- package/lib/commonjs/events/index.js +21 -0
- package/lib/commonjs/events/index.js.map +1 -0
- package/lib/commonjs/events/types.js +6 -0
- package/lib/commonjs/events/types.js.map +1 -0
- package/lib/commonjs/hooks/useSytemVolume.js +1 -1
- package/lib/commonjs/hooks/useSytemVolume.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js +3 -3
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/specs/index.js +2 -16
- package/lib/commonjs/specs/index.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +26 -26
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/module/api.js +2 -2
- package/lib/module/api.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +2 -2
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/AudioNode.js +7 -2
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +2 -1
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +11 -28
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/AudioScheduledSourceNode.js +4 -1
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/BiquadFilterNode.js +4 -4
- package/lib/module/core/BiquadFilterNode.js.map +1 -1
- package/lib/module/core/GainNode.js +1 -1
- package/lib/module/core/GainNode.js.map +1 -1
- package/lib/module/core/OscillatorNode.js +2 -2
- package/lib/module/core/OscillatorNode.js.map +1 -1
- package/lib/module/core/StereoPannerNode.js +1 -1
- package/lib/module/core/StereoPannerNode.js.map +1 -1
- package/lib/module/events/AudioEventEmitter.js +16 -0
- package/lib/module/events/AudioEventEmitter.js.map +1 -0
- package/lib/module/events/AudioEventSubscription.js +15 -0
- package/lib/module/events/AudioEventSubscription.js.map +1 -0
- package/lib/module/events/index.js +6 -0
- package/lib/module/events/index.js.map +1 -0
- package/lib/module/events/types.js +4 -0
- package/lib/module/events/types.js.map +1 -0
- package/lib/module/hooks/useSytemVolume.js +1 -1
- package/lib/module/hooks/useSytemVolume.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js +3 -2
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/specs/index.js +2 -3
- package/lib/module/specs/index.js.map +1 -1
- package/lib/module/system/AudioManager.js +27 -27
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/typescript/api.d.ts +2 -1
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts +4 -2
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +4 -14
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +3 -1
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
- package/lib/typescript/events/AudioEventEmitter.d.ts +10 -0
- package/lib/typescript/events/AudioEventEmitter.d.ts.map +1 -0
- package/lib/typescript/events/AudioEventSubscription.d.ts +11 -0
- package/lib/typescript/events/AudioEventSubscription.d.ts.map +1 -0
- package/lib/typescript/events/index.d.ts +4 -0
- package/lib/typescript/events/index.d.ts.map +1 -0
- package/lib/typescript/events/types.d.ts +50 -0
- package/lib/typescript/events/types.d.ts.map +1 -0
- package/lib/typescript/hooks/useSytemVolume.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +10 -10
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +15 -3
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/specs/index.d.ts +2 -3
- package/lib/typescript/specs/index.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +8 -4
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/system/types.d.ts +1 -34
- package/lib/typescript/system/types.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +0 -1
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/api.ts +6 -3
- package/src/core/AudioBufferSourceNode.ts +2 -2
- package/src/core/AudioNode.ts +8 -3
- package/src/core/AudioParam.ts +5 -2
- package/src/core/AudioRecorder.ts +22 -62
- package/src/core/AudioScheduledSourceNode.ts +13 -2
- package/src/core/BiquadFilterNode.ts +4 -4
- package/src/core/GainNode.ts +1 -1
- package/src/core/OscillatorNode.ts +2 -2
- package/src/core/StereoPannerNode.ts +1 -1
- package/src/events/AudioEventEmitter.ts +29 -0
- package/src/events/AudioEventSubscription.ts +26 -0
- package/src/events/index.ts +4 -0
- package/src/events/types.ts +64 -0
- package/src/hooks/useSytemVolume.ts +2 -1
- package/src/interfaces.ts +19 -20
- package/src/specs/NativeAudioAPIModule.ts +23 -2
- package/src/specs/index.ts +2 -4
- package/src/system/AudioManager.ts +39 -38
- package/src/system/types.ts +1 -41
- package/src/types.ts +0 -8
- package/android/src/main/java/com/swmansion/audioapi/AudioManagerModule.kt +0 -64
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionEventEmitter.kt +0 -88
- package/android/src/oldarch/NativeAudioManagerModuleSpec.java +0 -99
- package/ios/audioapi/ios/AudioManagerModule.h +0 -18
- package/ios/audioapi/ios/AudioManagerModule.mm +0 -93
- package/lib/commonjs/specs/NativeAudioManagerModule.js +0 -36
- package/lib/commonjs/specs/NativeAudioManagerModule.js.map +0 -1
- package/lib/module/specs/NativeAudioManagerModule.js +0 -33
- package/lib/module/specs/NativeAudioManagerModule.js.map +0 -1
- package/lib/typescript/specs/NativeAudioManagerModule.d.ts +0 -15
- package/lib/typescript/specs/NativeAudioManagerModule.d.ts.map +0 -1
- package/src/specs/NativeAudioManagerModule.ts +0 -45
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioScheduledSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioScheduledSourceNode.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioScheduledSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioScheduledSourceNode.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC7D,SAAS,CAAC,cAAc,EAAE,OAAO,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAEhC;IAEK,KAAK,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAe7B,IAAI,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAiBnC,IAAW,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,EAQ/D;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AudioEventName, AudioEventCallback } from './types';
|
|
2
|
+
import AudioEventSubscription from './AudioEventSubscription';
|
|
3
|
+
import { IAudioEventEmitter } from '../interfaces';
|
|
4
|
+
export default class AudioEventEmitter {
|
|
5
|
+
private readonly audioEventEmitter;
|
|
6
|
+
constructor(audioEventEmitter: IAudioEventEmitter);
|
|
7
|
+
addAudioEventListener<Name extends AudioEventName>(name: Name, callback: AudioEventCallback<Name>): AudioEventSubscription;
|
|
8
|
+
removeAudioEventListener<Name extends AudioEventName>(name: Name, subscriptionId: string): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=AudioEventEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/events/AudioEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;gBAE3C,iBAAiB,EAAE,kBAAkB;IAIjD,qBAAqB,CAAC,IAAI,SAAS,cAAc,EAC/C,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,GACjC,sBAAsB;IAQzB,wBAAwB,CAAC,IAAI,SAAS,cAAc,EAClD,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,MAAM,GACrB,IAAI;CAGR"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AudioEventName } from './types';
|
|
2
|
+
import { AudioEventEmitter } from './';
|
|
3
|
+
export default class AudioEventSubscription {
|
|
4
|
+
private readonly audioEventEmitter;
|
|
5
|
+
private readonly eventName;
|
|
6
|
+
/** @internal */
|
|
7
|
+
readonly subscriptionId: string;
|
|
8
|
+
constructor(subscriptionId: string, eventName: AudioEventName, audioEventEmitter: AudioEventEmitter);
|
|
9
|
+
remove(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=AudioEventSubscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioEventSubscription.d.ts","sourceRoot":"","sources":["../../../src/events/AudioEventSubscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,gBAAgB;IAChB,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAGrC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,cAAc,EACzB,iBAAiB,EAAE,iBAAiB;IAO/B,MAAM,IAAI,IAAI;CAMtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import AudioBuffer from '../core/AudioBuffer';
|
|
2
|
+
interface EventEmptyType {
|
|
3
|
+
}
|
|
4
|
+
export interface EventTypeWithValue {
|
|
5
|
+
value: number;
|
|
6
|
+
}
|
|
7
|
+
interface OnInterruptionEventType {
|
|
8
|
+
type: 'ended' | 'began';
|
|
9
|
+
shouldResume: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface OnRouteChangeEventType {
|
|
12
|
+
reason: string;
|
|
13
|
+
}
|
|
14
|
+
interface SystemEvents {
|
|
15
|
+
remotePlay: EventEmptyType;
|
|
16
|
+
remotePause: EventEmptyType;
|
|
17
|
+
remoteStop: EventEmptyType;
|
|
18
|
+
remoteTogglePlayPause: EventEmptyType;
|
|
19
|
+
remoteChangePlaybackRate: EventTypeWithValue;
|
|
20
|
+
remoteNextTrack: EventEmptyType;
|
|
21
|
+
remotePreviousTrack: EventEmptyType;
|
|
22
|
+
remoteSkipForward: EventEmptyType;
|
|
23
|
+
remoteSkipBackward: EventEmptyType;
|
|
24
|
+
remoteSeekForward: EventTypeWithValue;
|
|
25
|
+
remoteSeekBackward: EventTypeWithValue;
|
|
26
|
+
remoteChangePlaybackPosition: EventTypeWithValue;
|
|
27
|
+
volumeChange: EventTypeWithValue;
|
|
28
|
+
interruption: OnInterruptionEventType;
|
|
29
|
+
routeChange: OnRouteChangeEventType;
|
|
30
|
+
}
|
|
31
|
+
export interface OnAudioReadyEventType {
|
|
32
|
+
buffer: AudioBuffer;
|
|
33
|
+
numFrames: number;
|
|
34
|
+
when: number;
|
|
35
|
+
}
|
|
36
|
+
interface AudioAPIEvents {
|
|
37
|
+
ended: EventTypeWithValue;
|
|
38
|
+
audioReady: OnAudioReadyEventType;
|
|
39
|
+
audioError: EventEmptyType;
|
|
40
|
+
systemStateChanged: EventEmptyType;
|
|
41
|
+
}
|
|
42
|
+
type AudioEvents = SystemEvents & AudioAPIEvents;
|
|
43
|
+
export type SystemEventName = keyof SystemEvents;
|
|
44
|
+
export type SystemEventCallback<Name extends SystemEventName> = (event: SystemEvents[Name]) => void;
|
|
45
|
+
export type AudioAPIEventName = keyof AudioAPIEvents;
|
|
46
|
+
export type AudioAPIEventCallback<Name extends AudioAPIEventName> = (event: AudioAPIEvents[Name]) => void;
|
|
47
|
+
export type AudioEventName = keyof AudioEvents;
|
|
48
|
+
export type AudioEventCallback<Name extends AudioEventName> = (event: AudioEvents[Name]) => void;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAE9C,UAAU,cAAc;CAAG;AAE3B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,qBAAqB,EAAE,cAAc,CAAC;IACtC,wBAAwB,EAAE,kBAAkB,CAAC;IAC7C,eAAe,EAAE,cAAc,CAAC;IAChC,mBAAmB,EAAE,cAAc,CAAC;IACpC,iBAAiB,EAAE,cAAc,CAAC;IAClC,kBAAkB,EAAE,cAAc,CAAC;IACnC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,4BAA4B,EAAE,kBAAkB,CAAC;IACjD,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,uBAAuB,CAAC;IACtC,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,cAAc,CAAC;IAC3B,kBAAkB,EAAE,cAAc,CAAC;CACpC;AAED,KAAK,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;AACjD,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,eAAe,IAAI,CAC9D,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,MAAM,cAAc,CAAC;AACrD,MAAM,MAAM,qBAAqB,CAAC,IAAI,SAAS,iBAAiB,IAAI,CAClE,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KACxB,IAAI,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC;AAC/C,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,cAAc,IAAI,CAC5D,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KACrB,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSytemVolume.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSytemVolume.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"useSytemVolume.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSytemVolume.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,WAgBtC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { WindowType, ContextState, OscillatorType, BiquadFilterType, ChannelCountMode,
|
|
1
|
+
import { WindowType, ContextState, OscillatorType, BiquadFilterType, ChannelCountMode, ChannelInterpretation } from './types';
|
|
2
|
+
import { AudioEventName, AudioEventCallback } from './events/types';
|
|
2
3
|
export interface IBaseAudioContext {
|
|
3
4
|
readonly destination: IAudioDestinationNode;
|
|
4
5
|
readonly state: ContextState;
|
|
@@ -32,8 +33,8 @@ export interface IAudioNode {
|
|
|
32
33
|
readonly channelCount: number;
|
|
33
34
|
readonly channelCountMode: ChannelCountMode;
|
|
34
35
|
readonly channelInterpretation: ChannelInterpretation;
|
|
35
|
-
connect: (
|
|
36
|
-
disconnect: (
|
|
36
|
+
connect: (destination: IAudioNode | IAudioParam) => void;
|
|
37
|
+
disconnect: (destination?: IAudioNode | IAudioParam) => void;
|
|
37
38
|
}
|
|
38
39
|
export interface IGainNode extends IAudioNode {
|
|
39
40
|
readonly gain: IAudioParam;
|
|
@@ -54,7 +55,7 @@ export interface IAudioDestinationNode extends IAudioNode {
|
|
|
54
55
|
export interface IAudioScheduledSourceNode extends IAudioNode {
|
|
55
56
|
start(when?: number): void;
|
|
56
57
|
stop: (when: number) => void;
|
|
57
|
-
onended:
|
|
58
|
+
onended: string;
|
|
58
59
|
}
|
|
59
60
|
export interface IOscillatorNode extends IAudioScheduledSourceNode {
|
|
60
61
|
readonly frequency: IAudioParam;
|
|
@@ -107,14 +108,13 @@ export interface IAnalyserNode extends IAudioNode {
|
|
|
107
108
|
getFloatTimeDomainData: (array: Float32Array) => void;
|
|
108
109
|
getByteTimeDomainData: (array: Uint8Array) => void;
|
|
109
110
|
}
|
|
110
|
-
export type IAudioReadyCallback = (buffer: IAudioBuffer, numFrames: number, when: number) => void;
|
|
111
|
-
export type IErrorCallback = (error: Error) => void;
|
|
112
|
-
export type IStatusChangeCallback = (status: AudioRecorderStatus, previousStatus: AudioRecorderStatus) => void;
|
|
113
111
|
export interface IAudioRecorder {
|
|
114
112
|
start: () => void;
|
|
115
113
|
stop: () => void;
|
|
116
|
-
onAudioReady:
|
|
117
|
-
|
|
118
|
-
|
|
114
|
+
onAudioReady: string;
|
|
115
|
+
}
|
|
116
|
+
export interface IAudioEventEmitter {
|
|
117
|
+
addAudioEventListener<Name extends AudioEventName>(name: Name, callback: AudioEventCallback<Name>): string;
|
|
118
|
+
removeAudioEventListener<Name extends AudioEventName>(name: Name, subscriptionId: string): void;
|
|
119
119
|
}
|
|
120
120
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
import { TurboModule } from 'react-native';
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
import { PermissionStatus } from '../system/types';
|
|
2
3
|
interface Spec extends TurboModule {
|
|
3
4
|
install(): boolean;
|
|
5
|
+
setLockScreenInfo(info: {
|
|
6
|
+
[key: string]: string | boolean | number | undefined;
|
|
7
|
+
}): void;
|
|
8
|
+
resetLockScreenInfo(): void;
|
|
9
|
+
enableRemoteCommand(name: string, enabled: boolean): void;
|
|
10
|
+
setAudioSessionOptions(category: string, mode: string, options: Array<string>): void;
|
|
11
|
+
getDevicePreferredSampleRate(): number;
|
|
12
|
+
observeAudioInterruptions(enabled: boolean): void;
|
|
13
|
+
observeVolumeChanges(enabled: boolean): void;
|
|
14
|
+
requestRecordingPermissions(): Promise<PermissionStatus>;
|
|
15
|
+
checkRecordingPermissions(): Promise<PermissionStatus>;
|
|
4
16
|
}
|
|
5
|
-
declare const
|
|
6
|
-
export
|
|
17
|
+
declare const NativeAudioAPIModule: Spec | null;
|
|
18
|
+
export { NativeAudioAPIModule };
|
|
7
19
|
//# sourceMappingURL=NativeAudioAPIModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeAudioAPIModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeAudioAPIModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NativeAudioAPIModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeAudioAPIModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU,IAAK,SAAQ,WAAW;IAChC,OAAO,IAAI,OAAO,CAAC;IAEnB,iBAAiB,CAAC,IAAI,EAAE;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;KACtD,GAAG,IAAI,CAAC;IACT,mBAAmB,IAAI,IAAI,CAAC;IAC5B,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1D,sBAAsB,CACpB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GACrB,IAAI,CAAC;IACR,4BAA4B,IAAI,MAAM,CAAC;IACvC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACxD;AAED,QAAA,MAAM,oBAAoB,aAAkD,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import NativeAudioAPIModule from './NativeAudioAPIModule';
|
|
2
|
-
|
|
3
|
-
export { NativeAudioAPIModule, AudioManagerModule, eventEmitter };
|
|
1
|
+
import { NativeAudioAPIModule } from './NativeAudioAPIModule';
|
|
2
|
+
export { NativeAudioAPIModule };
|
|
4
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/specs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/specs/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { SessionOptions, LockScreenInfo,
|
|
2
|
-
import {
|
|
1
|
+
import { SessionOptions, LockScreenInfo, PermissionStatus } from './types';
|
|
2
|
+
import { SystemEventName, SystemEventCallback } from '../events/types';
|
|
3
|
+
import { AudioEventSubscription } from '../events';
|
|
3
4
|
declare class AudioManager {
|
|
5
|
+
private readonly audioEventEmitter;
|
|
6
|
+
constructor();
|
|
4
7
|
setLockScreenInfo(info: LockScreenInfo): void;
|
|
5
8
|
resetLockScreenInfo(): void;
|
|
6
9
|
setAudioSessionOptions(options: SessionOptions): void;
|
|
7
10
|
getDevicePreferredSampleRate(): number;
|
|
8
11
|
observeAudioInterruptions(enabled: boolean): void;
|
|
9
12
|
observeVolumeChanges(enabled: boolean): void;
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
enableSystemEvent<Name extends SystemEventName>(name: Name, callback?: SystemEventCallback<Name>, enabled?: boolean): AudioEventSubscription | null;
|
|
14
|
+
requestRecordingPermissions(): Promise<PermissionStatus>;
|
|
15
|
+
checkRecordingPermissions(): Promise<PermissionStatus>;
|
|
12
16
|
}
|
|
13
17
|
declare const _default: AudioManager;
|
|
14
18
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAqB,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAYtE,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;;IAKtD,iBAAiB,CAAC,IAAI,EAAE,cAAc;IAItC,mBAAmB;IAInB,sBAAsB,CAAC,OAAO,EAAE,cAAc;IAQ9C,4BAA4B,IAAI,MAAM;IAItC,yBAAyB,CAAC,OAAO,EAAE,OAAO;IAI1C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAIrC,iBAAiB,CAAC,IAAI,SAAS,eAAe,EAC5C,IAAI,EAAE,IAAI,EACV,QAAQ,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,EACpC,OAAO,UAAO,GACb,sBAAsB,GAAG,IAAI;IAU1B,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIxD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG7D;;AAED,wBAAkC"}
|
|
@@ -21,39 +21,6 @@ export interface LockScreenInfo extends BaseLockScreenInfo {
|
|
|
21
21
|
speed?: number;
|
|
22
22
|
elapsedTime?: number;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
interface RemoteControlEventType {
|
|
27
|
-
value: number;
|
|
28
|
-
}
|
|
29
|
-
interface OnInterruptionEventType {
|
|
30
|
-
type: 'ended' | 'began';
|
|
31
|
-
shouldResume: boolean;
|
|
32
|
-
}
|
|
33
|
-
interface OnRouteChangeEventType {
|
|
34
|
-
reason: string;
|
|
35
|
-
}
|
|
36
|
-
interface RemoteCommands {
|
|
37
|
-
play: RemoteEmptyType;
|
|
38
|
-
pause: RemoteEmptyType;
|
|
39
|
-
stop: RemoteEmptyType;
|
|
40
|
-
togglePlayPause: RemoteEmptyType;
|
|
41
|
-
changePlaybackRate: RemoteEmptyType;
|
|
42
|
-
nextTrack: RemoteEmptyType;
|
|
43
|
-
previousTrack: RemoteEmptyType;
|
|
44
|
-
skipForward: RemoteEmptyType;
|
|
45
|
-
skipBackward: RemoteEmptyType;
|
|
46
|
-
seekForward: RemoteEmptyType;
|
|
47
|
-
seekBackward: RemoteEmptyType;
|
|
48
|
-
changePlaybackPosition: RemoteEmptyType;
|
|
49
|
-
}
|
|
50
|
-
interface RemoteEvents {
|
|
51
|
-
volumeChange: RemoteControlEventType;
|
|
52
|
-
interruption: OnInterruptionEventType;
|
|
53
|
-
routeChange: OnRouteChangeEventType;
|
|
54
|
-
}
|
|
55
|
-
export type RemoteCommandName = keyof RemoteCommands;
|
|
56
|
-
export type RemoteEventName = keyof RemoteEvents;
|
|
57
|
-
export type RemoteEventCallback<Name extends RemoteEventName> = (event: RemoteEvents[Name]) => void;
|
|
24
|
+
export type PermissionStatus = 'Undetermined' | 'Denied' | 'Granted';
|
|
58
25
|
export {};
|
|
59
26
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/system/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,YAAY,GACZ,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,MAAM,OAAO,GACf,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,aAAa,GACb,aAAa,GACb,aAAa,GACb,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,qCAAqC,GACrC,sCAAsC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;AAE1D,UAAU,kBAAkB;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/system/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,YAAY,GACZ,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,MAAM,OAAO,GACf,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,aAAa,GACb,aAAa,GACb,aAAa,GACb,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,qCAAqC,GACrC,sCAAsC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;AAE1D,UAAU,kBAAkB;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC"}
|
|
@@ -22,5 +22,4 @@ export type WindowType = 'blackman' | 'hann';
|
|
|
22
22
|
export interface AudioBufferSourceNodeOptions {
|
|
23
23
|
pitchCorrection: boolean;
|
|
24
24
|
}
|
|
25
|
-
export type AudioRecorderStatus = 'idle' | 'initializing' | 'ready' | 'running' | 'stopping' | 'error';
|
|
26
25
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,OAAO,CAAC;CAC1B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,OAAO,CAAC;CAC1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.6.0
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
|
|
5
5
|
"bin": {
|
|
6
6
|
"setup-rn-audio-api-web": "./scripts/setup-rn-audio-api-web.js"
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"lint": "yarn lint:js && yarn lint:cpp && yarn lint:ios && yarn lint:kotlin",
|
|
44
44
|
"lint:js": "eslint src && yarn prettier --check src",
|
|
45
45
|
"lint:cpp": "./scripts/cpplint.sh",
|
|
46
|
-
"lint:ios": "yarn format:ios
|
|
46
|
+
"lint:ios": "yarn format:ios -Werror",
|
|
47
47
|
"lint:kotlin": "ktlint 'android/src/main/java/**/*.kt'",
|
|
48
48
|
"format": "yarn format:js && yarn format:android:cpp && yarn format:android:kotlin && yarn format:ios && yarn format:common",
|
|
49
49
|
"format:js": "prettier --write --list-different src",
|
|
50
50
|
"format:android:cpp": "find android/src/ -path android/src/main/cpp/audioapi/android/libs -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i",
|
|
51
51
|
"format:android:kotlin": "ktlint -F 'android/src/main/java/**/*.kt'",
|
|
52
|
-
"format:ios": "find ios/
|
|
52
|
+
"format:ios": "find ios/audioapi/ios -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" | xargs clang-format -i",
|
|
53
53
|
"format:common": "find common/cpp/ -path 'common/cpp/audioapi/libs' -prune -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i",
|
|
54
54
|
"build": "bob build",
|
|
55
55
|
"create:package": "./scripts/create-package.sh",
|
package/src/api.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import NativeAudioAPIModule from './specs
|
|
1
|
+
import { NativeAudioAPIModule } from './specs';
|
|
2
2
|
import { AudioRecorderOptions } from './types';
|
|
3
3
|
import type {
|
|
4
4
|
IAudioContext,
|
|
5
5
|
IAudioRecorder,
|
|
6
6
|
IOfflineAudioContext,
|
|
7
|
+
IAudioEventEmitter,
|
|
7
8
|
} from './interfaces';
|
|
8
9
|
|
|
9
10
|
/* eslint-disable no-var */
|
|
@@ -16,14 +17,16 @@ declare global {
|
|
|
16
17
|
) => IOfflineAudioContext;
|
|
17
18
|
|
|
18
19
|
var createAudioRecorder: (options: AudioRecorderOptions) => IAudioRecorder;
|
|
19
|
-
}
|
|
20
20
|
|
|
21
|
+
var AudioEventEmitter: IAudioEventEmitter;
|
|
22
|
+
}
|
|
21
23
|
/* eslint-disable no-var */
|
|
22
24
|
|
|
23
25
|
if (
|
|
24
26
|
global.createAudioContext == null ||
|
|
25
27
|
global.createOfflineAudioContext == null ||
|
|
26
|
-
global.createAudioRecorder == null
|
|
28
|
+
global.createAudioRecorder == null ||
|
|
29
|
+
global.AudioEventEmitter == null
|
|
27
30
|
) {
|
|
28
31
|
if (!NativeAudioAPIModule) {
|
|
29
32
|
throw new Error(
|
|
@@ -12,8 +12,8 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
|
|
|
12
12
|
constructor(context: BaseAudioContext, node: IAudioBufferSourceNode) {
|
|
13
13
|
super(context, node);
|
|
14
14
|
|
|
15
|
-
this.detune = new AudioParam(node.detune);
|
|
16
|
-
this.playbackRate = new AudioParam(node.playbackRate);
|
|
15
|
+
this.detune = new AudioParam(node.detune, context);
|
|
16
|
+
this.playbackRate = new AudioParam(node.playbackRate, context);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
public get buffer(): AudioBuffer | null {
|
package/src/core/AudioNode.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IAudioNode } from '../interfaces';
|
|
2
|
+
import AudioParam from './AudioParam';
|
|
2
3
|
import { ChannelCountMode, ChannelInterpretation } from '../types';
|
|
3
4
|
import BaseAudioContext from './BaseAudioContext';
|
|
4
5
|
import { InvalidAccessError } from '../errors';
|
|
@@ -22,14 +23,18 @@ export default class AudioNode {
|
|
|
22
23
|
this.channelInterpretation = this.node.channelInterpretation;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
public connect(destination: AudioNode): AudioNode {
|
|
26
|
+
public connect(destination: AudioNode | AudioParam): AudioNode | AudioParam {
|
|
26
27
|
if (this.context !== destination.context) {
|
|
27
28
|
throw new InvalidAccessError(
|
|
28
|
-
'
|
|
29
|
+
'Source and destination are from different BaseAudioContexts'
|
|
29
30
|
);
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
if (destination instanceof AudioParam) {
|
|
34
|
+
this.node.connect(destination.audioParam);
|
|
35
|
+
} else {
|
|
36
|
+
this.node.connect(destination.node);
|
|
37
|
+
}
|
|
33
38
|
|
|
34
39
|
return destination;
|
|
35
40
|
}
|
package/src/core/AudioParam.ts
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { IAudioParam } from '../interfaces';
|
|
2
2
|
import { RangeError, InvalidStateError } from '../errors';
|
|
3
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
4
|
|
|
4
5
|
export default class AudioParam {
|
|
5
6
|
readonly defaultValue: number;
|
|
6
7
|
readonly minValue: number;
|
|
7
8
|
readonly maxValue: number;
|
|
8
|
-
|
|
9
|
+
readonly audioParam: IAudioParam;
|
|
10
|
+
readonly context: BaseAudioContext;
|
|
9
11
|
|
|
10
|
-
constructor(audioParam: IAudioParam) {
|
|
12
|
+
constructor(audioParam: IAudioParam, context: BaseAudioContext) {
|
|
11
13
|
this.audioParam = audioParam;
|
|
12
14
|
this.value = audioParam.value;
|
|
13
15
|
this.defaultValue = audioParam.defaultValue;
|
|
14
16
|
this.minValue = audioParam.minValue;
|
|
15
17
|
this.maxValue = audioParam.maxValue;
|
|
18
|
+
this.context = context;
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
public get value(): number {
|
|
@@ -1,56 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
IErrorCallback,
|
|
4
|
-
IAudioReadyCallback,
|
|
5
|
-
IStatusChangeCallback,
|
|
6
|
-
IAudioBuffer,
|
|
7
|
-
} from '../interfaces';
|
|
8
|
-
import { AudioRecorderStatus, AudioRecorderOptions } from '../types';
|
|
1
|
+
import { IAudioRecorder } from '../interfaces';
|
|
2
|
+
import { AudioRecorderOptions } from '../types';
|
|
9
3
|
import AudioBuffer from './AudioBuffer';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
buffer: AudioBuffer,
|
|
13
|
-
numFrames: number,
|
|
14
|
-
when: number
|
|
15
|
-
) => void;
|
|
16
|
-
|
|
17
|
-
export type ErrorCallback = (error: Error) => void;
|
|
18
|
-
|
|
19
|
-
export type StatusChangeCallback = (
|
|
20
|
-
status: AudioRecorderStatus,
|
|
21
|
-
previousStatus: AudioRecorderStatus
|
|
22
|
-
) => void;
|
|
4
|
+
import { OnAudioReadyEventType } from '../events/types';
|
|
5
|
+
import { AudioEventEmitter } from '../events';
|
|
23
6
|
|
|
24
7
|
export default class AudioRecorder {
|
|
25
8
|
protected readonly recorder: IAudioRecorder;
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
private onAudioReadyInternal: IAudioReadyCallback = (
|
|
31
|
-
buffer: IAudioBuffer,
|
|
32
|
-
numFrames: number,
|
|
33
|
-
when: number
|
|
34
|
-
) => {
|
|
35
|
-
if (this.onAudioReadyCallback) {
|
|
36
|
-
this.onAudioReadyCallback(new AudioBuffer(buffer), numFrames, when);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
private onErrorInternal: IErrorCallback = (error: Error) => {
|
|
41
|
-
if (this.onErrorCallback) {
|
|
42
|
-
this.onErrorCallback(error);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
private onStatusChangeInternal: IStatusChangeCallback = (
|
|
47
|
-
status: AudioRecorderStatus,
|
|
48
|
-
previousStatus: AudioRecorderStatus
|
|
49
|
-
) => {
|
|
50
|
-
if (this.onStatusChangeCallback) {
|
|
51
|
-
this.onStatusChangeCallback(status, previousStatus);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
9
|
+
private readonly audioEventEmitter = new AudioEventEmitter(
|
|
10
|
+
global.AudioEventEmitter
|
|
11
|
+
);
|
|
54
12
|
|
|
55
13
|
constructor(options: AudioRecorderOptions) {
|
|
56
14
|
this.recorder = global.createAudioRecorder(options);
|
|
@@ -64,18 +22,20 @@ export default class AudioRecorder {
|
|
|
64
22
|
this.recorder.stop();
|
|
65
23
|
}
|
|
66
24
|
|
|
67
|
-
public onAudioReady(callback:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
25
|
+
public onAudioReady(callback: (event: OnAudioReadyEventType) => void): void {
|
|
26
|
+
const onAudioReadyCallback = (event: OnAudioReadyEventType) => {
|
|
27
|
+
callback({
|
|
28
|
+
buffer: new AudioBuffer(event.buffer),
|
|
29
|
+
numFrames: event.numFrames,
|
|
30
|
+
when: event.when,
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const subscription = this.audioEventEmitter.addAudioEventListener(
|
|
35
|
+
'audioReady',
|
|
36
|
+
onAudioReadyCallback
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
this.recorder.onAudioReady = subscription.subscriptionId;
|
|
80
40
|
}
|
|
81
41
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { IAudioScheduledSourceNode } from '../interfaces';
|
|
2
2
|
import AudioNode from './AudioNode';
|
|
3
3
|
import { InvalidStateError, RangeError } from '../errors';
|
|
4
|
+
import { EventTypeWithValue } from '../events/types';
|
|
5
|
+
import { AudioEventEmitter } from '../events';
|
|
4
6
|
|
|
5
7
|
export default class AudioScheduledSourceNode extends AudioNode {
|
|
6
8
|
protected hasBeenStarted: boolean = false;
|
|
9
|
+
private readonly audioEventEmitter = new AudioEventEmitter(
|
|
10
|
+
global.AudioEventEmitter
|
|
11
|
+
);
|
|
7
12
|
|
|
8
13
|
public start(when: number = 0): void {
|
|
9
14
|
if (when < 0) {
|
|
@@ -37,7 +42,13 @@ export default class AudioScheduledSourceNode extends AudioNode {
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
// eslint-disable-next-line accessor-pairs
|
|
40
|
-
public set onended(callback: (
|
|
41
|
-
|
|
45
|
+
public set onended(callback: (event: EventTypeWithValue) => void) {
|
|
46
|
+
const subscription = this.audioEventEmitter.addAudioEventListener(
|
|
47
|
+
'ended',
|
|
48
|
+
callback
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
(this.node as IAudioScheduledSourceNode).onended =
|
|
52
|
+
subscription.subscriptionId;
|
|
42
53
|
}
|
|
43
54
|
}
|
|
@@ -13,10 +13,10 @@ export default class BiquadFilterNode extends AudioNode {
|
|
|
13
13
|
|
|
14
14
|
constructor(context: BaseAudioContext, biquadFilter: IBiquadFilterNode) {
|
|
15
15
|
super(context, biquadFilter);
|
|
16
|
-
this.frequency = new AudioParam(biquadFilter.frequency);
|
|
17
|
-
this.detune = new AudioParam(biquadFilter.detune);
|
|
18
|
-
this.Q = new AudioParam(biquadFilter.Q);
|
|
19
|
-
this.gain = new AudioParam(biquadFilter.gain);
|
|
16
|
+
this.frequency = new AudioParam(biquadFilter.frequency, context);
|
|
17
|
+
this.detune = new AudioParam(biquadFilter.detune, context);
|
|
18
|
+
this.Q = new AudioParam(biquadFilter.Q, context);
|
|
19
|
+
this.gain = new AudioParam(biquadFilter.gain, context);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
public get type(): BiquadFilterType {
|
package/src/core/GainNode.ts
CHANGED
|
@@ -12,8 +12,8 @@ export default class OscillatorNode extends AudioScheduledSourceNode {
|
|
|
12
12
|
|
|
13
13
|
constructor(context: BaseAudioContext, node: IOscillatorNode) {
|
|
14
14
|
super(context, node);
|
|
15
|
-
this.frequency = new AudioParam(node.frequency);
|
|
16
|
-
this.detune = new AudioParam(node.detune);
|
|
15
|
+
this.frequency = new AudioParam(node.frequency, context);
|
|
16
|
+
this.detune = new AudioParam(node.detune, context);
|
|
17
17
|
this.type = node.type;
|
|
18
18
|
}
|
|
19
19
|
|