react-native-audio-api 0.12.0-nightly-6a44b58-20260126 → 0.12.0-nightly-1a3c43b-20260128

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 (142) hide show
  1. package/RNAudioAPI.podspec +8 -0
  2. package/android/src/main/cpp/audioapi/CMakeLists.txt +0 -13
  3. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +3 -2
  4. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +1 -1
  5. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +12 -1
  6. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +5 -1
  7. package/android/src/main/java/com/swmansion/audioapi/system/AudioEvent.kt +28 -0
  8. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +4 -4
  9. package/android/src/main/java/com/swmansion/audioapi/system/VolumeChangeListener.kt +1 -1
  10. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +27 -18
  11. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +13 -8
  12. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +3 -2
  13. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +2 -2
  14. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +9 -12
  15. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +4 -2
  16. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +5 -1
  17. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +38 -38
  18. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -2
  19. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +8 -4
  20. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +7 -1
  21. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +6 -4
  22. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +6 -2
  23. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +8 -5
  24. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +5 -3
  25. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +5 -3
  26. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +5 -2
  27. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +4 -3
  28. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +5 -2
  29. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +6 -2
  30. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +5 -2
  31. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +6 -2
  32. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +5 -2
  33. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +5 -2
  34. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +5 -2
  35. package/common/cpp/audioapi/HostObjects/effects/WaveShaperNodeHostObject.cpp +9 -4
  36. package/common/cpp/audioapi/HostObjects/effects/WaveShaperNodeHostObject.h +5 -2
  37. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +3 -2
  38. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +2 -1
  39. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +9 -6
  40. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +4 -2
  41. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +5 -2
  42. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +5 -2
  43. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +5 -2
  44. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +5 -2
  45. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +7 -3
  46. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +5 -2
  47. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  48. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -2
  49. package/common/cpp/audioapi/HostObjects/utils/JsEnumParser.cpp +63 -0
  50. package/common/cpp/audioapi/HostObjects/utils/JsEnumParser.h +5 -0
  51. package/common/cpp/audioapi/core/AudioContext.cpp +2 -4
  52. package/common/cpp/audioapi/core/AudioNode.cpp +4 -4
  53. package/common/cpp/audioapi/core/AudioNode.h +6 -6
  54. package/common/cpp/audioapi/core/BaseAudioContext.cpp +7 -22
  55. package/common/cpp/audioapi/core/BaseAudioContext.h +20 -22
  56. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +3 -6
  57. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +5 -2
  58. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +4 -2
  59. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -1
  60. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
  61. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +6 -6
  62. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +2 -2
  63. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +1 -1
  64. package/common/cpp/audioapi/core/effects/ConvolverNode.h +2 -2
  65. package/common/cpp/audioapi/core/effects/DelayNode.cpp +1 -1
  66. package/common/cpp/audioapi/core/effects/DelayNode.h +2 -2
  67. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -1
  68. package/common/cpp/audioapi/core/effects/GainNode.h +2 -2
  69. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +5 -3
  70. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +2 -2
  71. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +5 -2
  72. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +2 -2
  73. package/common/cpp/audioapi/core/effects/WaveShaperNode.cpp +4 -2
  74. package/common/cpp/audioapi/core/effects/WaveShaperNode.h +2 -2
  75. package/common/cpp/audioapi/core/sources/AudioBuffer.h +1 -1
  76. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +10 -4
  77. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +2 -2
  78. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +13 -13
  79. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -2
  80. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +6 -5
  81. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +2 -2
  82. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +2 -2
  83. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +10 -2
  84. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +2 -2
  85. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +11 -6
  86. package/common/cpp/audioapi/core/sources/OscillatorNode.h +2 -2
  87. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +17 -4
  88. package/common/cpp/audioapi/core/sources/StreamerNode.h +4 -2
  89. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +2 -3
  90. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +3 -4
  91. package/common/cpp/audioapi/events/AudioEvent.h +30 -0
  92. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +9 -20
  93. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +7 -34
  94. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +5 -4
  95. package/common/cpp/audioapi/jsi/JsiUtils.cpp +21 -0
  96. package/common/cpp/audioapi/jsi/JsiUtils.h +17 -0
  97. package/{android/src/main/cpp/audioapi/android/core → common/cpp/audioapi}/utils/MiniaudioImplementation.cpp +1 -2
  98. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +5 -10
  99. package/ios/audioapi/ios/AudioAPIModule.h +3 -1
  100. package/ios/audioapi/ios/AudioAPIModule.mm +7 -6
  101. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +1 -3
  102. package/ios/audioapi/ios/system/AudioSessionManager.h +3 -1
  103. package/ios/audioapi/ios/system/AudioSessionManager.mm +8 -1
  104. package/ios/audioapi/ios/system/SystemNotificationManager.mm +17 -8
  105. package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +36 -33
  106. package/lib/commonjs/core/AudioDecoder.js +2 -2
  107. package/lib/commonjs/core/AudioDecoder.js.map +1 -1
  108. package/lib/commonjs/core/AudioRecorder.js +1 -1
  109. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  110. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  111. package/lib/commonjs/specs/NativeAudioAPIModule.web.js.map +1 -1
  112. package/lib/commonjs/system/AudioManager.js +1 -1
  113. package/lib/commonjs/system/AudioManager.js.map +1 -1
  114. package/lib/module/core/AudioDecoder.js +2 -2
  115. package/lib/module/core/AudioDecoder.js.map +1 -1
  116. package/lib/module/core/AudioRecorder.js +1 -1
  117. package/lib/module/core/AudioRecorder.js.map +1 -1
  118. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  119. package/lib/module/specs/NativeAudioAPIModule.web.js.map +1 -1
  120. package/lib/module/system/AudioManager.js +1 -1
  121. package/lib/module/system/AudioManager.js.map +1 -1
  122. package/lib/typescript/core/AudioDecoder.d.ts.map +1 -1
  123. package/lib/typescript/events/types.d.ts +1 -17
  124. package/lib/typescript/events/types.d.ts.map +1 -1
  125. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -1
  126. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  127. package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts +1 -1
  128. package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts.map +1 -1
  129. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  130. package/lib/typescript/system/notification/types.d.ts +4 -3
  131. package/lib/typescript/system/notification/types.d.ts.map +1 -1
  132. package/lib/typescript/system/types.d.ts +8 -0
  133. package/lib/typescript/system/types.d.ts.map +1 -1
  134. package/package.json +1 -1
  135. package/src/core/AudioDecoder.ts +2 -2
  136. package/src/core/AudioRecorder.ts +1 -1
  137. package/src/events/types.ts +1 -18
  138. package/src/specs/NativeAudioAPIModule.ts +3 -2
  139. package/src/specs/NativeAudioAPIModule.web.ts +2 -1
  140. package/src/system/AudioManager.ts +2 -1
  141. package/src/system/notification/types.ts +6 -4
  142. package/src/system/types.ts +8 -0
@@ -1,18 +1,20 @@
1
1
  #include <audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h>
2
2
 
3
3
  #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/HostObjects/utils/NodeOptions.h>
5
+ #include <audioapi/core/BaseAudioContext.h>
4
6
  #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
5
7
  #include <memory>
6
8
 
7
9
  namespace audioapi {
8
10
 
9
11
  AudioBufferQueueSourceNodeHostObject::AudioBufferQueueSourceNodeHostObject(
10
- const std::shared_ptr<AudioBufferQueueSourceNode> &node)
11
- : AudioBufferBaseSourceNodeHostObject(node) {
12
+ const std::shared_ptr<BaseAudioContext> &context,
13
+ const BaseAudioBufferSourceOptions &options)
14
+ : AudioBufferBaseSourceNodeHostObject(context->createBufferQueueSource(options)) {
12
15
  functions_->erase("start");
13
16
 
14
- addSetters(
15
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onBufferEnded));
17
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioBufferQueueSourceNodeHostObject, onBufferEnded));
16
18
 
17
19
  addFunctions(
18
20
  JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, start),
@@ -32,9 +34,10 @@ AudioBufferQueueSourceNodeHostObject::~AudioBufferQueueSourceNodeHostObject() {
32
34
  }
33
35
 
34
36
  JSI_PROPERTY_SETTER_IMPL(AudioBufferQueueSourceNodeHostObject, onBufferEnded) {
35
- auto audioBufferQueueSourceNode = std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
37
+ auto audioBufferQueueSourceNode = std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
36
38
 
37
- audioBufferQueueSourceNode->setOnBufferEndedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
39
+ audioBufferQueueSourceNode->setOnBufferEndedCallbackId(
40
+ std::stoull(value.getString(runtime).utf8(runtime)));
38
41
  }
39
42
 
40
43
  JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, start) {
@@ -8,12 +8,14 @@
8
8
  namespace audioapi {
9
9
  using namespace facebook;
10
10
 
11
- class AudioBufferQueueSourceNode;
11
+ struct BaseAudioBufferSourceOptions;
12
+ class BaseAudioContext;
12
13
 
13
14
  class AudioBufferQueueSourceNodeHostObject : public AudioBufferBaseSourceNodeHostObject {
14
15
  public:
15
16
  explicit AudioBufferQueueSourceNodeHostObject(
16
- const std::shared_ptr<AudioBufferQueueSourceNode> &node);
17
+ const std::shared_ptr<BaseAudioContext> &context,
18
+ const BaseAudioBufferSourceOptions &options);
17
19
 
18
20
  ~AudioBufferQueueSourceNodeHostObject() override;
19
21
 
@@ -1,14 +1,17 @@
1
1
  #include <audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h>
2
2
 
3
3
  #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/HostObjects/utils/NodeOptions.h>
5
+ #include <audioapi/core/BaseAudioContext.h>
4
6
  #include <audioapi/core/sources/AudioBufferSourceNode.h>
5
7
  #include <memory>
6
8
 
7
9
  namespace audioapi {
8
10
 
9
11
  AudioBufferSourceNodeHostObject::AudioBufferSourceNodeHostObject(
10
- const std::shared_ptr<AudioBufferSourceNode> &node)
11
- : AudioBufferBaseSourceNodeHostObject(node) {
12
+ const std::shared_ptr<BaseAudioContext> &context,
13
+ const AudioBufferSourceOptions &options)
14
+ : AudioBufferBaseSourceNodeHostObject(context->createBufferSource(options)) {
12
15
  addGetters(
13
16
  JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
14
17
  JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
@@ -8,11 +8,14 @@
8
8
  namespace audioapi {
9
9
  using namespace facebook;
10
10
 
11
- class AudioBufferSourceNode;
11
+ struct AudioBufferSourceOptions;
12
+ class BaseAudioContext;
12
13
 
13
14
  class AudioBufferSourceNodeHostObject : public AudioBufferBaseSourceNodeHostObject {
14
15
  public:
15
- explicit AudioBufferSourceNodeHostObject(const std::shared_ptr<AudioBufferSourceNode> &node);
16
+ explicit AudioBufferSourceNodeHostObject(
17
+ const std::shared_ptr<BaseAudioContext> &context,
18
+ const AudioBufferSourceOptions &options);
16
19
 
17
20
  ~AudioBufferSourceNodeHostObject() override;
18
21
 
@@ -1,13 +1,16 @@
1
1
  #include <audioapi/HostObjects/AudioParamHostObject.h>
2
2
  #include <audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h>
3
+ #include <audioapi/HostObjects/utils/NodeOptions.h>
4
+ #include <audioapi/core/BaseAudioContext.h>
3
5
  #include <audioapi/core/sources/ConstantSourceNode.h>
4
6
  #include <memory>
5
7
 
6
8
  namespace audioapi {
7
9
 
8
10
  ConstantSourceNodeHostObject::ConstantSourceNodeHostObject(
9
- const std::shared_ptr<ConstantSourceNode> &node)
10
- : AudioScheduledSourceNodeHostObject(node) {
11
+ const std::shared_ptr<BaseAudioContext> &context,
12
+ const ConstantSourceOptions &options)
13
+ : AudioScheduledSourceNodeHostObject(context->createConstantSource(options)) {
11
14
  addGetters(JSI_EXPORT_PROPERTY_GETTER(ConstantSourceNodeHostObject, offset));
12
15
  }
13
16
 
@@ -9,11 +9,14 @@
9
9
  namespace audioapi {
10
10
  using namespace facebook;
11
11
 
12
- class ConstantSourceNode;
12
+ struct ConstantSourceOptions;
13
+ class BaseAudioContext;
13
14
 
14
15
  class ConstantSourceNodeHostObject : public AudioScheduledSourceNodeHostObject {
15
16
  public:
16
- explicit ConstantSourceNodeHostObject(const std::shared_ptr<ConstantSourceNode> &node);
17
+ explicit ConstantSourceNodeHostObject(
18
+ const std::shared_ptr<BaseAudioContext> &context,
19
+ const ConstantSourceOptions &options);
17
20
 
18
21
  JSI_PROPERTY_GETTER_DECL(offset);
19
22
  };
@@ -2,14 +2,18 @@
2
2
 
3
3
  #include <audioapi/HostObjects/AudioParamHostObject.h>
4
4
  #include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
5
- #include <audioapi/core/sources/OscillatorNode.h>
6
5
  #include <audioapi/HostObjects/utils/JsEnumParser.h>
6
+ #include <audioapi/HostObjects/utils/NodeOptions.h>
7
+ #include <audioapi/core/BaseAudioContext.h>
8
+ #include <audioapi/core/sources/OscillatorNode.h>
7
9
  #include <memory>
8
10
 
9
11
  namespace audioapi {
10
12
 
11
- OscillatorNodeHostObject::OscillatorNodeHostObject(const std::shared_ptr<OscillatorNode> &node)
12
- : AudioScheduledSourceNodeHostObject(node) {
13
+ OscillatorNodeHostObject::OscillatorNodeHostObject(
14
+ const std::shared_ptr<BaseAudioContext> &context,
15
+ const OscillatorOptions &options)
16
+ : AudioScheduledSourceNodeHostObject(context->createOscillator(options)) {
13
17
  addGetters(
14
18
  JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, frequency),
15
19
  JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, detune),
@@ -10,11 +10,14 @@
10
10
  namespace audioapi {
11
11
  using namespace facebook;
12
12
 
13
- class OscillatorNode;
13
+ struct OscillatorOptions;
14
+ class BaseAudioContext;
14
15
 
15
16
  class OscillatorNodeHostObject : public AudioScheduledSourceNodeHostObject {
16
17
  public:
17
- explicit OscillatorNodeHostObject(const std::shared_ptr<OscillatorNode> &node);
18
+ explicit OscillatorNodeHostObject(
19
+ const std::shared_ptr<BaseAudioContext> &context,
20
+ const OscillatorOptions &options);
18
21
 
19
22
  JSI_PROPERTY_GETTER_DECL(frequency);
20
23
  JSI_PROPERTY_GETTER_DECL(detune);
@@ -2,13 +2,17 @@
2
2
 
3
3
  #include <audioapi/HostObjects/AudioParamHostObject.h>
4
4
  #include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
5
+ #include <audioapi/HostObjects/utils/NodeOptions.h>
6
+ #include <audioapi/core/BaseAudioContext.h>
5
7
  #include <audioapi/core/sources/StreamerNode.h>
6
8
  #include <memory>
7
9
 
8
10
  namespace audioapi {
9
11
 
10
- StreamerNodeHostObject::StreamerNodeHostObject(const std::shared_ptr<StreamerNode> &node)
11
- : AudioScheduledSourceNodeHostObject(node) {
12
+ StreamerNodeHostObject::StreamerNodeHostObject(
13
+ const std::shared_ptr<BaseAudioContext> &context,
14
+ const StreamerOptions &options)
15
+ : AudioScheduledSourceNodeHostObject(context->createStreamer(options)) {
12
16
  addFunctions(JSI_EXPORT_FUNCTION(StreamerNodeHostObject, initialize));
13
17
  addGetters(JSI_EXPORT_PROPERTY_GETTER(StreamerNodeHostObject, streamPath));
14
18
  }
@@ -9,11 +9,14 @@
9
9
  namespace audioapi {
10
10
  using namespace facebook;
11
11
 
12
- class StreamerNode;
12
+ struct StreamerOptions;
13
+ class BaseAudioContext;
13
14
 
14
15
  class StreamerNodeHostObject : public AudioScheduledSourceNodeHostObject {
15
16
  public:
16
- explicit StreamerNodeHostObject(const std::shared_ptr<StreamerNode> &node);
17
+ explicit StreamerNodeHostObject(
18
+ const std::shared_ptr<BaseAudioContext> &context,
19
+ const StreamerOptions &options);
17
20
 
18
21
  [[nodiscard]] static inline size_t getSizeInBytes() {
19
22
  return SIZE;
@@ -124,4 +124,67 @@ namespace audioapi::js_enum_parser {
124
124
  }
125
125
  }
126
126
 
127
+ AudioEvent audioEventFromString(const std::string &event) {
128
+ if (event == "playbackNotificationPlay")
129
+ return AudioEvent::PLAYBACK_NOTIFICATION_PLAY;
130
+ if (event == "playbackNotificationPause")
131
+ return AudioEvent::PLAYBACK_NOTIFICATION_PAUSE;
132
+ if (event == "playbackNotificationStop")
133
+ return AudioEvent::PLAYBACK_NOTIFICATION_STOP;
134
+ if (event == "playbackNotificationNextTrack")
135
+ return AudioEvent::PLAYBACK_NOTIFICATION_NEXT_TRACK;
136
+ if (event == "playbackNotificationPreviousTrack")
137
+ return AudioEvent::PLAYBACK_NOTIFICATION_PREVIOUS_TRACK;
138
+ if (event == "playbackNotificationSkipForward")
139
+ return AudioEvent::PLAYBACK_NOTIFICATION_SKIP_FORWARD;
140
+ if (event == "playbackNotificationSkipBackward")
141
+ return AudioEvent::PLAYBACK_NOTIFICATION_SKIP_BACKWARD;
142
+ if (event == "playbackNotificationSeekForward")
143
+ return AudioEvent::PLAYBACK_NOTIFICATION_SEEK_FORWARD;
144
+ if (event == "playbackNotificationSeekBackward")
145
+ return AudioEvent::PLAYBACK_NOTIFICATION_SEEK_BACKWARD;
146
+ if (event == "playbackNotificationSeekTo")
147
+ return AudioEvent::PLAYBACK_NOTIFICATION_SEEK_TO;
148
+ if (event == "playbackNotificationDismissed")
149
+ return AudioEvent::PLAYBACK_NOTIFICATION_DISMISSED;
150
+ if (event == "recordingNotificationResume")
151
+ return AudioEvent::RECORDING_NOTIFICATION_RESUME;
152
+ if (event == "recordingNotificationPause")
153
+ return AudioEvent::RECORDING_NOTIFICATION_PAUSE;
154
+ if (event == "routeChange")
155
+ return AudioEvent::ROUTE_CHANGE;
156
+ if (event == "interruption")
157
+ return AudioEvent::INTERRUPTION;
158
+ if (event == "volumeChange")
159
+ return AudioEvent::VOLUME_CHANGE;
160
+ if (event == "duck")
161
+ return AudioEvent::DUCK;
162
+ if (event == "ended")
163
+ return AudioEvent::ENDED;
164
+ if (event == "loopEnded")
165
+ return AudioEvent::LOOP_ENDED;
166
+ if (event == "audioReady")
167
+ return AudioEvent::AUDIO_READY;
168
+ if (event == "positionChanged")
169
+ return AudioEvent::POSITION_CHANGED;
170
+ if (event == "bufferEnded")
171
+ return AudioEvent::BUFFER_ENDED;
172
+ if (event == "recorderError")
173
+ return AudioEvent::RECORDER_ERROR;
174
+
175
+ throw std::invalid_argument("Unknown audio event: " + event);
176
+ }
177
+
178
+ std::string contextStateToString(ContextState state) {
179
+ switch (state) {
180
+ case ContextState::SUSPENDED:
181
+ return "suspended";
182
+ case ContextState::RUNNING:
183
+ return "running";
184
+ case ContextState::CLOSED:
185
+ return "closed";
186
+ default:
187
+ throw std::invalid_argument("Unknown context state");
188
+ }
189
+ }
127
190
  } // namespace audioapi::js_enum_parser
@@ -1,8 +1,11 @@
1
1
  #pragma once
2
+
2
3
  #include <audioapi/core/analysis/AnalyserNode.h>
3
4
  #include <audioapi/core/types/BiquadFilterType.h>
5
+ #include <audioapi/core/types/ContextState.h>
4
6
  #include <audioapi/core/types/OscillatorType.h>
5
7
  #include <audioapi/core/types/OverSampleType.h>
8
+ #include <audioapi/events/AudioEvent.h>
6
9
  #include <string>
7
10
 
8
11
  namespace audioapi::js_enum_parser {
@@ -14,4 +17,6 @@ std::string oscillatorTypeToString(OscillatorType type);
14
17
  OscillatorType oscillatorTypeFromString(const std::string &type);
15
18
  std::string filterTypeToString(BiquadFilterType type);
16
19
  BiquadFilterType filterTypeFromString(const std::string &type);
20
+ AudioEvent audioEventFromString(const std::string &event);
21
+ std::string contextStateToString(ContextState state);
17
22
  } // namespace audioapi::js_enum_parser
@@ -15,10 +15,8 @@ AudioContext::AudioContext(
15
15
  float sampleRate,
16
16
  const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
17
17
  const RuntimeRegistry &runtimeRegistry)
18
- : BaseAudioContext(audioEventHandlerRegistry, runtimeRegistry), isInitialized_(false) {
19
- sampleRate_ = sampleRate;
20
- state_ = ContextState::SUSPENDED;
21
- }
18
+ : BaseAudioContext(sampleRate, audioEventHandlerRegistry, runtimeRegistry),
19
+ isInitialized_(false) {}
22
20
 
23
21
  AudioContext::~AudioContext() {
24
22
  if (!isClosed()) {
@@ -11,14 +11,14 @@
11
11
 
12
12
  namespace audioapi {
13
13
 
14
- AudioNode::AudioNode(std::shared_ptr<BaseAudioContext> context) : context_(context) {
14
+ AudioNode::AudioNode(const std::shared_ptr<BaseAudioContext>& context) : context_(context) {
15
15
  audioBus_ =
16
16
  std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, context->getSampleRate());
17
17
  }
18
18
 
19
- AudioNode::AudioNode(std::shared_ptr<BaseAudioContext> context, const AudioNodeOptions &options)
20
- : context_(context),
21
- channelCount_(options.channelCount),
19
+ AudioNode::AudioNode(const std::shared_ptr<BaseAudioContext>& context, const AudioNodeOptions &options)
20
+ : channelCount_(options.channelCount),
21
+ context_(context),
22
22
  channelCountMode_(options.channelCountMode),
23
23
  channelInterpretation_(options.channelInterpretation) {
24
24
  audioBus_ =
@@ -16,12 +16,14 @@ namespace audioapi {
16
16
  class AudioBus;
17
17
  class BaseAudioContext;
18
18
  class AudioParam;
19
- class AudioNodeOptions;
19
+ struct AudioNodeOptions;
20
20
 
21
21
  class AudioNode : public std::enable_shared_from_this<AudioNode> {
22
22
  public:
23
- explicit AudioNode(std::shared_ptr<BaseAudioContext> context);
24
- explicit AudioNode(std::shared_ptr<BaseAudioContext> context, const AudioNodeOptions &options);
23
+ explicit AudioNode(const std::shared_ptr<BaseAudioContext> &context);
24
+ explicit AudioNode(
25
+ const std::shared_ptr<BaseAudioContext> &context,
26
+ const AudioNodeOptions &options);
25
27
  virtual ~AudioNode();
26
28
 
27
29
  int getNumberOfInputs() const;
@@ -57,9 +59,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
57
59
  int numberOfInputs_ = 1;
58
60
  int numberOfOutputs_ = 1;
59
61
  ChannelCountMode channelCountMode_ = ChannelCountMode::MAX;
60
- ChannelInterpretation channelInterpretation_ =
61
-
62
- ChannelInterpretation::SPEAKERS;
62
+ ChannelInterpretation channelInterpretation_ = ChannelInterpretation::SPEAKERS;
63
63
 
64
64
  std::unordered_set<AudioNode *> inputNodes_ = {};
65
65
  std::unordered_set<std::shared_ptr<AudioNode>> outputNodes_ = {};
@@ -36,9 +36,11 @@
36
36
  namespace audioapi {
37
37
 
38
38
  BaseAudioContext::BaseAudioContext(
39
+ float sampleRate,
39
40
  const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
40
41
  const RuntimeRegistry &runtimeRegistry)
41
- : nodeManager_(std::make_shared<AudioNodeManager>()),
42
+ : sampleRate_(sampleRate),
43
+ nodeManager_(std::make_shared<AudioNodeManager>()),
42
44
  audioEventHandlerRegistry_(audioEventHandlerRegistry),
43
45
  runtimeRegistry_(runtimeRegistry) {}
44
46
 
@@ -46,16 +48,12 @@ void BaseAudioContext::initialize() {
46
48
  destination_ = std::make_shared<AudioDestinationNode>(shared_from_this());
47
49
  }
48
50
 
49
- std::string BaseAudioContext::getState() {
50
- if (isDriverRunning()) {
51
- return BaseAudioContext::toString(state_);
51
+ ContextState BaseAudioContext::getState() {
52
+ if (isDriverRunning() || state_ == ContextState::CLOSED) {
53
+ return state_;
52
54
  }
53
55
 
54
- if (state_ == ContextState::CLOSED) {
55
- return BaseAudioContext::toString(ContextState::CLOSED);
56
- }
57
-
58
- return BaseAudioContext::toString(ContextState::SUSPENDED);
56
+ return ContextState::SUSPENDED;
59
57
  }
60
58
 
61
59
  float BaseAudioContext::getSampleRate() const {
@@ -235,19 +233,6 @@ float BaseAudioContext::getNyquistFrequency() const {
235
233
  return sampleRate_ / 2.0f;
236
234
  }
237
235
 
238
- std::string BaseAudioContext::toString(ContextState state) {
239
- switch (state) {
240
- case ContextState::SUSPENDED:
241
- return "suspended";
242
- case ContextState::RUNNING:
243
- return "running";
244
- case ContextState::CLOSED:
245
- return "closed";
246
- default:
247
- throw std::invalid_argument("Unknown context state");
248
- }
249
- }
250
-
251
236
  std::shared_ptr<PeriodicWave> BaseAudioContext::getBasicWaveForm(OscillatorType type) {
252
237
  switch (type) {
253
238
  case OscillatorType::SINE:
@@ -38,31 +38,30 @@ class WorkletSourceNode;
38
38
  class WorkletNode;
39
39
  class WorkletProcessingNode;
40
40
  class StreamerNode;
41
- class GainOptions;
42
- class StereoPannerOptions;
43
- class ConvolverOptions;
44
- class ConstantSourceOptions;
45
- class AnalyserOptions;
46
- class BiquadFilterOptions;
47
- class OscillatorOptions;
48
- class BaseAudioBufferSourceOptions;
49
- class AudioBufferSourceOptions;
50
- class StreamerOptions;
51
- class AudioBufferOptions;
52
- class DelayOptions;
53
- class IIRFilterOptions;
54
- class WaveShaperOptions;
41
+ struct GainOptions;
42
+ struct StereoPannerOptions;
43
+ struct ConvolverOptions;
44
+ struct ConstantSourceOptions;
45
+ struct AnalyserOptions;
46
+ struct BiquadFilterOptions;
47
+ struct OscillatorOptions;
48
+ struct BaseAudioBufferSourceOptions;
49
+ struct AudioBufferSourceOptions;
50
+ struct StreamerOptions;
51
+ struct AudioBufferOptions;
52
+ struct DelayOptions;
53
+ struct IIRFilterOptions;
54
+ struct WaveShaperOptions;
55
55
 
56
56
  class BaseAudioContext : public std::enable_shared_from_this<BaseAudioContext> {
57
57
  public:
58
58
  explicit BaseAudioContext(
59
+ float sampleRate,
59
60
  const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
60
61
  const RuntimeRegistry &runtimeRegistry);
61
62
  virtual ~BaseAudioContext() = default;
62
63
 
63
- virtual void initialize();
64
-
65
- std::string getState();
64
+ ContextState getState();
66
65
  [[nodiscard]] float getSampleRate() const;
67
66
  [[nodiscard]] double getCurrentTime() const;
68
67
  [[nodiscard]] std::size_t getCurrentSampleFrame() const;
@@ -112,13 +111,12 @@ class BaseAudioContext : public std::enable_shared_from_this<BaseAudioContext> {
112
111
  [[nodiscard]] bool isSuspended() const;
113
112
  [[nodiscard]] bool isClosed() const;
114
113
 
115
- protected:
116
- static std::string toString(ContextState state);
114
+ virtual void initialize();
117
115
 
116
+ protected:
118
117
  std::shared_ptr<AudioDestinationNode> destination_;
119
- // init in AudioContext or OfflineContext constructor
120
- float sampleRate_{};
121
- ContextState state_ = ContextState::RUNNING;
118
+ float sampleRate_;
119
+ ContextState state_ = ContextState::SUSPENDED;
122
120
  std::shared_ptr<AudioNodeManager> nodeManager_;
123
121
 
124
122
  private:
@@ -24,14 +24,11 @@ OfflineAudioContext::OfflineAudioContext(
24
24
  float sampleRate,
25
25
  const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
26
26
  const RuntimeRegistry &runtimeRegistry)
27
- : BaseAudioContext(audioEventHandlerRegistry, runtimeRegistry),
27
+ : BaseAudioContext(sampleRate, audioEventHandlerRegistry, runtimeRegistry),
28
28
  length_(length),
29
29
  numberOfChannels_(numberOfChannels),
30
- currentSampleFrame_(0) {
31
- sampleRate_ = sampleRate;
32
- resultBus_ =
33
- std::make_shared<AudioBus>(static_cast<int>(length_), numberOfChannels_, sampleRate_);
34
- }
30
+ currentSampleFrame_(0),
31
+ resultBus_(std::make_shared<AudioBus>(length, numberOfChannels, sampleRate)) {}
35
32
 
36
33
  OfflineAudioContext::~OfflineAudioContext() {
37
34
  nodeManager_->cleanup();
@@ -7,6 +7,7 @@
7
7
  #include <audioapi/utils/AudioArray.h>
8
8
  #include <audioapi/utils/AudioBus.h>
9
9
  #include <audioapi/utils/CircularAudioArray.h>
10
+
10
11
  #include <algorithm>
11
12
  #include <memory>
12
13
  #include <string>
@@ -14,7 +15,9 @@
14
15
 
15
16
  namespace audioapi {
16
17
 
17
- AnalyserNode::AnalyserNode(std::shared_ptr<BaseAudioContext> context, const AnalyserOptions &options)
18
+ AnalyserNode::AnalyserNode(
19
+ const std::shared_ptr<BaseAudioContext> &context,
20
+ const AnalyserOptions &options)
18
21
  : AudioNode(context, options),
19
22
  fftSize_(options.fftSize),
20
23
  minDecibels_(options.minDecibels),
@@ -194,7 +197,7 @@ void AnalyserNode::setWindowData(AnalyserNode::WindowType type, int size) {
194
197
  }
195
198
 
196
199
  windowType_ = type;
197
- if (windowData_ == nullptr|| windowData_->getSize() != size) {
200
+ if (windowData_ == nullptr || windowData_->getSize() != size) {
198
201
  windowData_ = std::make_shared<AudioArray>(size);
199
202
  }
200
203
 
@@ -15,12 +15,14 @@ namespace audioapi {
15
15
  class AudioBus;
16
16
  class AudioArray;
17
17
  class CircularAudioArray;
18
- class AnalyserOptions;
18
+ struct AnalyserOptions;
19
19
 
20
20
  class AnalyserNode : public AudioNode {
21
21
  public:
22
22
  enum class WindowType { BLACKMAN, HANN };
23
- explicit AnalyserNode(std::shared_ptr<BaseAudioContext> context, const AnalyserOptions &options);
23
+ explicit AnalyserNode(
24
+ const std::shared_ptr<BaseAudioContext> &context,
25
+ const AnalyserOptions &options);
24
26
 
25
27
  int getFftSize() const;
26
28
  int getFrequencyBinCount() const;
@@ -7,7 +7,7 @@
7
7
 
8
8
  namespace audioapi {
9
9
 
10
- AudioDestinationNode::AudioDestinationNode(std::shared_ptr<BaseAudioContext> context)
10
+ AudioDestinationNode::AudioDestinationNode(const std::shared_ptr<BaseAudioContext> &context)
11
11
  : AudioNode(context), currentSampleFrame_(0) {
12
12
  numberOfOutputs_ = 0;
13
13
  numberOfInputs_ = 1;
@@ -14,7 +14,7 @@ class BaseAudioContext;
14
14
 
15
15
  class AudioDestinationNode : public AudioNode {
16
16
  public:
17
- explicit AudioDestinationNode(std::shared_ptr<BaseAudioContext> context);
17
+ explicit AudioDestinationNode(const std::shared_ptr<BaseAudioContext> &context);
18
18
 
19
19
  std::size_t getCurrentSampleFrame() const;
20
20
  double getCurrentTime() const;
@@ -39,7 +39,7 @@
39
39
 
40
40
  namespace audioapi {
41
41
 
42
- BiquadFilterNode::BiquadFilterNode(std::shared_ptr<BaseAudioContext> context, const BiquadFilterOptions &options) : AudioNode(context, options) {
42
+ BiquadFilterNode::BiquadFilterNode(const std::shared_ptr<BaseAudioContext>& context, const BiquadFilterOptions &options) : AudioNode(context, options) {
43
43
  frequencyParam_ =
44
44
  std::make_shared<AudioParam>(options.frequency, 0.0f, context->getNyquistFrequency(), context);
45
45
  detuneParam_ = std::make_shared<AudioParam>(
@@ -112,11 +112,11 @@ void BiquadFilterNode::getFrequencyResponse(
112
112
  #endif
113
113
 
114
114
  // Use double precision for later calculations
115
- double b0 = static_cast<double>(b0_);
116
- double b1 = static_cast<double>(b1_);
117
- double b2 = static_cast<double>(b2_);
118
- double a1 = static_cast<double>(a1_);
119
- double a2 = static_cast<double>(a2_);
115
+ auto b0 = static_cast<double>(b0_);
116
+ auto b1 = static_cast<double>(b1_);
117
+ auto b2 = static_cast<double>(b2_);
118
+ auto a1 = static_cast<double>(a1_);
119
+ auto a2 = static_cast<double>(a2_);
120
120
 
121
121
  std::shared_ptr<BaseAudioContext> context = context_.lock();
122
122
  if (!context)
@@ -46,7 +46,7 @@
46
46
  namespace audioapi {
47
47
 
48
48
  class AudioBus;
49
- class BiquadFilterOptions;
49
+ struct BiquadFilterOptions;
50
50
 
51
51
  class BiquadFilterNode : public AudioNode {
52
52
  #if RN_AUDIO_API_TEST
@@ -56,7 +56,7 @@ class BiquadFilterNode : public AudioNode {
56
56
 
57
57
  public:
58
58
  explicit BiquadFilterNode(
59
- std::shared_ptr<BaseAudioContext> context,
59
+ const std::shared_ptr<BaseAudioContext> &context,
60
60
  const BiquadFilterOptions &options);
61
61
 
62
62
  [[nodiscard]] BiquadFilterType getType();
@@ -12,7 +12,7 @@
12
12
  #include <vector>
13
13
 
14
14
  namespace audioapi {
15
- ConvolverNode::ConvolverNode(std::shared_ptr<BaseAudioContext> context, const ConvolverOptions &options)
15
+ ConvolverNode::ConvolverNode(const std::shared_ptr<BaseAudioContext>& context, const ConvolverOptions &options)
16
16
  : AudioNode(context, options),
17
17
  gainCalibrationSampleRate_(context->getSampleRate()),
18
18
  remainingSegments_(0),
@@ -17,12 +17,12 @@ namespace audioapi {
17
17
 
18
18
  class AudioBus;
19
19
  class AudioBuffer;
20
- class ConvolverOptions;
20
+ struct ConvolverOptions;
21
21
 
22
22
  class ConvolverNode : public AudioNode {
23
23
  public:
24
24
  explicit ConvolverNode(
25
- std::shared_ptr<BaseAudioContext> context,
25
+ const std::shared_ptr<BaseAudioContext> &context,
26
26
  const ConvolverOptions &options);
27
27
 
28
28
  [[nodiscard]] bool getNormalize_() const;
@@ -8,7 +8,7 @@
8
8
 
9
9
  namespace audioapi {
10
10
 
11
- DelayNode::DelayNode(std::shared_ptr<BaseAudioContext> context, const DelayOptions &options)
11
+ DelayNode::DelayNode(const std::shared_ptr<BaseAudioContext>& context, const DelayOptions &options)
12
12
  : AudioNode(context, options),
13
13
  delayTimeParam_(std::make_shared<AudioParam>(options.delayTime, 0, options.maxDelayTime, context)),
14
14
  delayBuffer_(