react-native-audio-api 0.6.3 → 0.6.4-nightly-a960beb-20250703

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +11 -3
  2. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +1 -1
  3. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -5
  4. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +1 -2
  5. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +8 -1
  6. package/common/cpp/audioapi/core/AudioContext.cpp +2 -1
  7. package/common/cpp/audioapi/core/AudioContext.h +1 -1
  8. package/common/cpp/audioapi/core/AudioParam.cpp +17 -5
  9. package/common/cpp/audioapi/core/AudioParam.h +3 -0
  10. package/common/cpp/audioapi/core/BaseAudioContext.cpp +7 -1
  11. package/common/cpp/audioapi/core/BaseAudioContext.h +5 -2
  12. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +2 -1
  13. package/common/cpp/audioapi/core/OfflineAudioContext.h +1 -1
  14. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  15. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +4 -2
  16. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +1 -0
  17. package/common/cpp/audioapi/core/sources/AudioBuffer.h +1 -0
  18. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +15 -1
  19. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +7 -4
  20. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +13 -2
  21. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -0
  22. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +1 -0
  23. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +1 -2
  24. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  25. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +80 -29
  26. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +9 -5
  27. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +25 -0
  28. package/common/cpp/audioapi/utils/AudioArray.h +1 -0
  29. package/common/cpp/audioapi/utils/CircularAudioArray.h +1 -0
  30. package/common/cpp/test/CMakeLists.txt +79 -0
  31. package/common/cpp/test/MockAudioEventHandlerRegistry.h +22 -0
  32. package/common/cpp/test/OscillatorTest.cpp +22 -0
  33. package/common/cpp/test/RunTests.sh +26 -0
  34. package/ios/audioapi/ios/AudioAPIModule.mm +11 -12
  35. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +10 -6
  36. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  37. package/lib/commonjs/core/AudioScheduledSourceNode.js +6 -2
  38. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  39. package/lib/module/core/AudioBufferBaseSourceNode.js +10 -6
  40. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  41. package/lib/module/core/AudioScheduledSourceNode.js +6 -2
  42. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  43. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +6 -3
  44. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  45. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +2 -0
  46. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/src/core/AudioBufferBaseSourceNode.ts +20 -7
  49. package/src/core/AudioScheduledSourceNode.ts +9 -1
@@ -5,8 +5,10 @@ export default class AudioScheduledSourceNode extends AudioNode {
5
5
  protected hasBeenStarted: boolean;
6
6
  protected readonly audioEventEmitter: AudioEventEmitter;
7
7
  private onendedSubscription?;
8
+ private onEndedCallback?;
8
9
  start(when?: number): void;
9
10
  stop(when?: number): void;
11
+ get onended(): ((event: EventEmptyType) => void) | undefined;
10
12
  set onended(callback: ((event: EventEmptyType) => void) | null);
11
13
  }
12
14
  //# sourceMappingURL=AudioScheduledSourceNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioScheduledSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioScheduledSourceNode.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,WAAW,CAAC;AAEtE,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC7D,SAAS,CAAC,cAAc,EAAE,OAAO,CAAS;IAC1C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,oBAElC;IAEF,OAAO,CAAC,mBAAmB,CAAC,CAAyB;IAE9C,KAAK,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAe7B,IAAI,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAiBnC,IAAW,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,IAAI,EAapE;CACF"}
1
+ {"version":3,"file":"AudioScheduledSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioScheduledSourceNode.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,WAAW,CAAC;AAEtE,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC7D,SAAS,CAAC,cAAc,EAAE,OAAO,CAAS;IAC1C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,oBAElC;IAEF,OAAO,CAAC,mBAAmB,CAAC,CAAyB;IACrD,OAAO,CAAC,eAAe,CAAC,CAAkC;IAEnD,KAAK,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAe7B,IAAI,CAAC,IAAI,GAAE,MAAU,GAAG,IAAI;IAgBnC,IAAW,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAElE;IAED,IAAW,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,IAAI,EAiBpE;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.6.3",
3
+ "version": "0.6.4-nightly-a960beb-20250703",
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"
@@ -1,14 +1,15 @@
1
- import { IAudioBufferBaseSourceNode } from '../interfaces';
2
- import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
- import BaseAudioContext from './BaseAudioContext';
4
1
  import AudioParam from './AudioParam';
5
- import { EventTypeWithValue } from '../events/types';
2
+ import BaseAudioContext from './BaseAudioContext';
6
3
  import { AudioEventSubscription } from '../events';
4
+ import { EventTypeWithValue } from '../events/types';
5
+ import { IAudioBufferBaseSourceNode } from '../interfaces';
6
+ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
7
7
 
8
8
  export default class AudioBufferBaseSourceNode extends AudioScheduledSourceNode {
9
9
  readonly playbackRate: AudioParam;
10
10
  readonly detune: AudioParam;
11
11
  private positionChangedSubscription?: AudioEventSubscription;
12
+ private positionChangedCallback?: (event: EventTypeWithValue) => void;
12
13
 
13
14
  constructor(context: BaseAudioContext, node: IAudioBufferBaseSourceNode) {
14
15
  super(context, node);
@@ -17,16 +18,25 @@ export default class AudioBufferBaseSourceNode extends AudioScheduledSourceNode
17
18
  this.playbackRate = new AudioParam(node.playbackRate, context);
18
19
  }
19
20
 
20
- // eslint-disable-next-line accessor-pairs
21
+ public get onPositionChanged():
22
+ | ((event: EventTypeWithValue) => void)
23
+ | undefined {
24
+ return this.positionChangedCallback;
25
+ }
26
+
21
27
  public set onPositionChanged(
22
28
  callback: ((event: EventTypeWithValue) => void) | null
23
29
  ) {
24
30
  if (!callback) {
31
+ (this.node as IAudioBufferBaseSourceNode).onPositionChanged = '0';
25
32
  this.positionChangedSubscription?.remove();
26
33
  this.positionChangedSubscription = undefined;
27
- (this.node as IAudioBufferBaseSourceNode).onPositionChanged = '0';
34
+ this.positionChangedCallback = undefined;
35
+
28
36
  return;
29
37
  }
38
+
39
+ this.positionChangedCallback = callback;
30
40
  this.positionChangedSubscription =
31
41
  this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
32
42
 
@@ -34,7 +44,10 @@ export default class AudioBufferBaseSourceNode extends AudioScheduledSourceNode
34
44
  this.positionChangedSubscription.subscriptionId;
35
45
  }
36
46
 
37
- // eslint-disable-next-line accessor-pairs
47
+ public get onPositionChangedInterval(): number {
48
+ return (this.node as IAudioBufferBaseSourceNode).onPositionChangedInterval;
49
+ }
50
+
38
51
  public set onPositionChangedInterval(value: number) {
39
52
  (this.node as IAudioBufferBaseSourceNode).onPositionChangedInterval = value;
40
53
  }
@@ -11,6 +11,7 @@ export default class AudioScheduledSourceNode extends AudioNode {
11
11
  );
12
12
 
13
13
  private onendedSubscription?: AudioEventSubscription;
14
+ private onEndedCallback?: (event: EventEmptyType) => void;
14
15
 
15
16
  public start(when: number = 0): void {
16
17
  if (when < 0) {
@@ -43,13 +44,20 @@ export default class AudioScheduledSourceNode extends AudioNode {
43
44
  (this.node as IAudioScheduledSourceNode).stop(when);
44
45
  }
45
46
 
46
- // eslint-disable-next-line accessor-pairs
47
+ public get onended(): ((event: EventEmptyType) => void) | undefined {
48
+ return this.onEndedCallback;
49
+ }
50
+
47
51
  public set onended(callback: ((event: EventEmptyType) => void) | null) {
48
52
  if (!callback) {
53
+ (this.node as IAudioScheduledSourceNode).onended = '0';
49
54
  this.onendedSubscription?.remove();
50
55
  this.onendedSubscription = undefined;
56
+ this.onEndedCallback = undefined;
51
57
  return;
52
58
  }
59
+
60
+ this.onEndedCallback = callback;
53
61
  this.onendedSubscription = this.audioEventEmitter.addAudioEventListener(
54
62
  'ended',
55
63
  callback