react-native-audio-api 0.7.0-nightly-4fc09d1-20250727 → 0.7.0-nightly-a21e1f4-20250728

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 (47) hide show
  1. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +3 -1
  2. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +17 -1
  3. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +8 -0
  4. package/common/cpp/audioapi/HostObjects/RecorderAdapterNodeHostObject.h +26 -0
  5. package/common/cpp/audioapi/core/BaseAudioContext.cpp +7 -0
  6. package/common/cpp/audioapi/core/BaseAudioContext.h +3 -0
  7. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +28 -2
  8. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +24 -0
  9. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +48 -0
  10. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +43 -0
  11. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +1 -1
  12. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +61 -0
  13. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +42 -0
  14. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +2 -1
  15. package/ios/audioapi/ios/core/NativeAudioRecorder.m +7 -0
  16. package/lib/commonjs/api.js +7 -0
  17. package/lib/commonjs/api.js.map +1 -1
  18. package/lib/commonjs/core/AudioRecorder.js +10 -0
  19. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  20. package/lib/commonjs/core/BaseAudioContext.js +4 -0
  21. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  22. package/lib/commonjs/core/RecorderAdapterNode.js +19 -0
  23. package/lib/commonjs/core/RecorderAdapterNode.js.map +1 -0
  24. package/lib/module/api.js +1 -0
  25. package/lib/module/api.js.map +1 -1
  26. package/lib/module/core/AudioRecorder.js +10 -0
  27. package/lib/module/core/AudioRecorder.js.map +1 -1
  28. package/lib/module/core/BaseAudioContext.js +4 -0
  29. package/lib/module/core/BaseAudioContext.js.map +1 -1
  30. package/lib/module/core/RecorderAdapterNode.js +13 -0
  31. package/lib/module/core/RecorderAdapterNode.js.map +1 -0
  32. package/lib/typescript/api.d.ts +1 -0
  33. package/lib/typescript/api.d.ts.map +1 -1
  34. package/lib/typescript/core/AudioRecorder.d.ts +3 -0
  35. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  36. package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
  37. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  38. package/lib/typescript/core/RecorderAdapterNode.d.ts +9 -0
  39. package/lib/typescript/core/RecorderAdapterNode.d.ts.map +1 -0
  40. package/lib/typescript/interfaces.d.ts +5 -0
  41. package/lib/typescript/interfaces.d.ts.map +1 -1
  42. package/package.json +1 -1
  43. package/src/api.ts +1 -0
  44. package/src/core/AudioRecorder.ts +16 -0
  45. package/src/core/BaseAudioContext.ts +5 -0
  46. package/src/core/RecorderAdapterNode.ts +12 -0
  47. package/src/interfaces.ts +5 -0
@@ -1,9 +1,11 @@
1
1
  #include <audioapi/android/core/AndroidAudioRecorder.h>
2
2
  #include <audioapi/core/Constants.h>
3
+ #include <audioapi/core/sources/RecorderAdapterNode.h>
3
4
  #include <audioapi/events/AudioEventHandlerRegistry.h>
4
5
  #include <audioapi/utils/AudioArray.h>
5
6
  #include <audioapi/utils/AudioBus.h>
6
7
  #include <audioapi/utils/CircularAudioArray.h>
8
+ #include <audioapi/utils/CircularOverflowableAudioArray.h>
7
9
 
8
10
  namespace audioapi {
9
11
 
@@ -65,7 +67,7 @@ DataCallbackResult AndroidAudioRecorder::onAudioReady(
65
67
  int32_t numFrames) {
66
68
  if (isRunning_.load()) {
67
69
  auto *inputChannel = static_cast<float *>(audioData);
68
- circularBuffer_->push_back(inputChannel, numFrames);
70
+ writeToBuffers(inputChannel, numFrames);
69
71
  }
70
72
 
71
73
  while (circularBuffer_->getNumberOfAvailableFrames() >= bufferLength_) {
@@ -5,6 +5,7 @@
5
5
  #include <audioapi/core/sources/AudioBuffer.h>
6
6
  #include <audioapi/HostObjects/AudioBufferHostObject.h>
7
7
  #include <audioapi/core/inputs/AudioRecorder.h>
8
+ #include <audioapi/HostObjects/RecorderAdapterNodeHostObject.h>
8
9
 
9
10
  #ifdef ANDROID
10
11
  #include <audioapi/android/core/AndroidAudioRecorder.h>
@@ -45,7 +46,22 @@ class AudioRecorderHostObject : public JsiHostObject {
45
46
 
46
47
  addFunctions(
47
48
  JSI_EXPORT_FUNCTION(AudioRecorderHostObject, start),
48
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop));
49
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop),
50
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, connect),
51
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect)
52
+ );
53
+ }
54
+
55
+ JSI_HOST_FUNCTION(connect) {
56
+ auto adapterNodeHostObject = args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(runtime);
57
+ audioRecorder_->connect(
58
+ std::static_pointer_cast<RecorderAdapterNode>(adapterNodeHostObject->node_));
59
+ return jsi::Value::undefined();
60
+ }
61
+
62
+ JSI_HOST_FUNCTION(disconnect) {
63
+ audioRecorder_->disconnect();
64
+ return jsi::Value::undefined();
49
65
  }
50
66
 
51
67
  JSI_HOST_FUNCTION(start) {
@@ -14,6 +14,7 @@
14
14
  #include <audioapi/HostObjects/PeriodicWaveHostObject.h>
15
15
  #include <audioapi/HostObjects/StereoPannerNodeHostObject.h>
16
16
  #include <audioapi/HostObjects/AnalyserNodeHostObject.h>
17
+ #include <audioapi/HostObjects/RecorderAdapterNodeHostObject.h>
17
18
 
18
19
  #include <jsi/jsi.h>
19
20
  #include <memory>
@@ -40,6 +41,7 @@ class BaseAudioContextHostObject : public JsiHostObject {
40
41
  JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, currentTime));
41
42
 
42
43
  addFunctions(
44
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createRecorderAdapter),
43
45
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createOscillator),
44
46
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createCustomProcessor),
45
47
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createGain),
@@ -73,6 +75,12 @@ class BaseAudioContextHostObject : public JsiHostObject {
73
75
  return {context_->getCurrentTime()};
74
76
  }
75
77
 
78
+ JSI_HOST_FUNCTION(createRecorderAdapter) {
79
+ auto recorderAdapter = context_->createRecorderAdapter();
80
+ auto recorderAdapterHostObject = std::make_shared<RecorderAdapterNodeHostObject>(recorderAdapter);
81
+ return jsi::Object::createFromHostObject(runtime, recorderAdapterHostObject);
82
+ }
83
+
76
84
  JSI_HOST_FUNCTION(createOscillator) {
77
85
  auto oscillator = context_->createOscillator();
78
86
  auto oscillatorHostObject =
@@ -0,0 +1,26 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/core/sources/RecorderAdapterNode.h>
4
+ #include <audioapi/HostObjects/AudioNodeHostObject.h>
5
+
6
+ #include <memory>
7
+ #include <string>
8
+ #include <vector>
9
+
10
+ namespace audioapi {
11
+ using namespace facebook;
12
+
13
+ class AudioRecorderHostObject;
14
+
15
+ class RecorderAdapterNodeHostObject : public AudioNodeHostObject {
16
+ public:
17
+ explicit RecorderAdapterNodeHostObject(
18
+ const std::shared_ptr<RecorderAdapterNode> &node)
19
+ : AudioNodeHostObject(node) {
20
+ }
21
+
22
+ private:
23
+ friend class AudioRecorderHostObject;
24
+ };
25
+
26
+ } // namespace audioapi
@@ -9,6 +9,7 @@
9
9
  #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
10
10
  #include <audioapi/core/sources/AudioBufferSourceNode.h>
11
11
  #include <audioapi/core/sources/OscillatorNode.h>
12
+ #include <audioapi/core/sources/RecorderAdapterNode.h>
12
13
  #include <audioapi/core/utils/AudioDecoder.h>
13
14
  #include <audioapi/core/utils/AudioNodeManager.h>
14
15
  #include <audioapi/events/AudioEventHandlerRegistry.h>
@@ -49,6 +50,12 @@ std::shared_ptr<AudioDestinationNode> BaseAudioContext::getDestination() {
49
50
  return destination_;
50
51
  }
51
52
 
53
+ std::shared_ptr<RecorderAdapterNode> BaseAudioContext::createRecorderAdapter() {
54
+ auto recorderAdapter = std::make_shared<RecorderAdapterNode>(this);
55
+ nodeManager_->addProcessingNode(recorderAdapter);
56
+ return recorderAdapter;
57
+ }
58
+
52
59
  std::shared_ptr<OscillatorNode> BaseAudioContext::createOscillator() {
53
60
  auto oscillator = std::make_shared<OscillatorNode>(this);
54
61
  nodeManager_->addSourceNode(oscillator);
@@ -3,6 +3,7 @@
3
3
  #include <audioapi/core/types/ContextState.h>
4
4
  #include <audioapi/core/types/OscillatorType.h>
5
5
 
6
+
6
7
  #include <functional>
7
8
  #include <memory>
8
9
  #include <string>
@@ -30,6 +31,7 @@ class AudioDecoder;
30
31
  class AnalyserNode;
31
32
  class AudioEventHandlerRegistry;
32
33
  class IAudioEventHandlerRegistry;
34
+ class RecorderAdapterNode;
33
35
 
34
36
  class BaseAudioContext {
35
37
  public:
@@ -42,6 +44,7 @@ class BaseAudioContext {
42
44
  [[nodiscard]] std::size_t getCurrentSampleFrame() const;
43
45
  std::shared_ptr<AudioDestinationNode> getDestination();
44
46
 
47
+ std::shared_ptr<RecorderAdapterNode> createRecorderAdapter();
45
48
  std::shared_ptr<OscillatorNode> createOscillator();
46
49
  std::shared_ptr<CustomProcessorNode> createCustomProcessor(const std::string& identifier);
47
50
  std::shared_ptr<GainNode> createGain();
@@ -1,9 +1,11 @@
1
1
  #include <audioapi/HostObjects/AudioBufferHostObject.h>
2
2
  #include <audioapi/core/inputs/AudioRecorder.h>
3
3
  #include <audioapi/core/sources/AudioBuffer.h>
4
+ #include <audioapi/core/sources/RecorderAdapterNode.h>
4
5
  #include <audioapi/events/AudioEventHandlerRegistry.h>
5
6
  #include <audioapi/utils/AudioBus.h>
6
7
  #include <audioapi/utils/CircularAudioArray.h>
8
+ #include <audioapi/utils/CircularOverflowableAudioArray.h>
7
9
 
8
10
  namespace audioapi {
9
11
 
@@ -14,8 +16,9 @@ AudioRecorder::AudioRecorder(
14
16
  : sampleRate_(sampleRate),
15
17
  bufferLength_(bufferLength),
16
18
  audioEventHandlerRegistry_(audioEventHandlerRegistry) {
17
- circularBuffer_ =
18
- std::make_shared<CircularAudioArray>(std::max(2 * bufferLength, 2048));
19
+ constexpr int minRingBufferSize = 8192;
20
+ ringBufferSize_ = std::max(2 * bufferLength, minRingBufferSize);
21
+ circularBuffer_ = std::make_shared<CircularAudioArray>(ringBufferSize_);
19
22
  isRunning_.store(false);
20
23
  }
21
24
 
@@ -55,4 +58,27 @@ void AudioRecorder::sendRemainingData() {
55
58
  invokeOnAudioReadyCallback(bus, availableFrames, 0);
56
59
  }
57
60
 
61
+ void AudioRecorder::connect(const std::shared_ptr<RecorderAdapterNode> &node) {
62
+ node->init(ringBufferSize_);
63
+ adapterNodeLock_.lock();
64
+ adapterNode_ = node;
65
+ adapterNodeLock_.unlock();
66
+ }
67
+
68
+ void AudioRecorder::disconnect() {
69
+ adapterNodeLock_.lock();
70
+ adapterNode_ = nullptr;
71
+ adapterNodeLock_.unlock();
72
+ }
73
+
74
+ void AudioRecorder::writeToBuffers(const float *data, int numFrames) {
75
+ if (adapterNodeLock_.try_lock()) {
76
+ if (adapterNode_ != nullptr) {
77
+ adapterNode_->buff_->write(data, numFrames);
78
+ }
79
+ adapterNodeLock_.unlock();
80
+ }
81
+ circularBuffer_->push_back(data, numFrames);
82
+ }
83
+
58
84
  } // namespace audioapi
@@ -1,11 +1,15 @@
1
1
  #pragma once
2
2
 
3
+
3
4
  #include <memory>
5
+ #include <mutex>
4
6
  #include <atomic>
5
7
 
6
8
  namespace audioapi {
9
+ class RecorderAdapterNode;
7
10
  class AudioBus;
8
11
  class CircularAudioArray;
12
+ class CircularOverflowableAudioArray;
9
13
  class AudioEventHandlerRegistry;
10
14
 
11
15
  class AudioRecorder {
@@ -22,18 +26,38 @@ class AudioRecorder {
22
26
  void invokeOnAudioReadyCallback(const std::shared_ptr<AudioBus> &bus, int numFrames, double when);
23
27
  void sendRemainingData();
24
28
 
29
+ /// @brief
30
+ /// # Connects the recorder to the adapter node.
31
+ ///
32
+ /// The adapter node will be used to read audio data from the recorder.
33
+ /// @note Few frames of audio might not yet be written to the buffer when connecting.
34
+ void connect(const std::shared_ptr<RecorderAdapterNode> &node);
35
+
36
+ /// @brief
37
+ /// # Disconnects the recorder from the adapter node.
38
+ ///
39
+ /// The adapter node will no longer be used to read audio data from the recorder.
40
+ /// @note Last few frames of audio might be written to the buffer after disconnecting.
41
+ void disconnect();
42
+
25
43
  virtual void start() = 0;
26
44
  virtual void stop() = 0;
27
45
 
28
46
  protected:
29
47
  float sampleRate_;
30
48
  int bufferLength_;
49
+ size_t ringBufferSize_;
31
50
 
32
51
  std::atomic<bool> isRunning_;
33
52
  std::shared_ptr<CircularAudioArray> circularBuffer_;
34
53
 
54
+ mutable std::mutex adapterNodeLock_;
55
+ std::shared_ptr<RecorderAdapterNode> adapterNode_ = nullptr;
56
+
35
57
  std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
36
58
  uint64_t onAudioReadyCallbackId_ = 0;
59
+
60
+ void writeToBuffers(const float *data, int numFrames);
37
61
  };
38
62
 
39
63
  } // namespace audioapi
@@ -0,0 +1,48 @@
1
+
2
+ #include <audioapi/core/sources/RecorderAdapterNode.h>
3
+ #include <audioapi/utils/AudioArray.h>
4
+ #include <audioapi/utils/AudioBus.h>
5
+ #include <type_traits>
6
+
7
+ namespace audioapi {
8
+
9
+ RecorderAdapterNode::RecorderAdapterNode(BaseAudioContext *context) noexcept(
10
+ std::is_nothrow_constructible<AudioNode, BaseAudioContext *>::value)
11
+ : AudioNode(context) {
12
+ // It should be marked as initialized only after it is connected to the
13
+ // recorder. Internall buffer size is based on the recorder's buffer length.
14
+ isInitialized_ = false;
15
+ }
16
+
17
+ void RecorderAdapterNode::init(size_t bufferSize) {
18
+ if (isInitialized_) {
19
+ throw std::runtime_error(
20
+ "RecorderAdapterNode should not be initialized more than once. Just create a new instance.");
21
+ }
22
+ isInitialized_ = true;
23
+ buff_ = std::make_shared<CircularOverflowableAudioArray>(bufferSize);
24
+ }
25
+
26
+ void RecorderAdapterNode::processNode(
27
+ const std::shared_ptr<AudioBus> &processingBus,
28
+ int framesToProcess) {
29
+ float *outputChannel = processingBus->getChannel(0)->getData();
30
+ readFrames(outputChannel, framesToProcess);
31
+
32
+ for (int i = 1; i < processingBus->getNumberOfChannels(); i++) {
33
+ processingBus->getChannel(i)->copy(
34
+ processingBus->getChannel(0), 0, framesToProcess);
35
+ }
36
+ }
37
+
38
+ void RecorderAdapterNode::readFrames(float *output, const size_t framesToRead) {
39
+ size_t readFrames = buff_->read(output, framesToRead);
40
+
41
+ if (readFrames < framesToRead) {
42
+ // Fill the rest with silence
43
+ std::memset(
44
+ output + readFrames, 0, (framesToRead - readFrames) * sizeof(float));
45
+ }
46
+ }
47
+
48
+ } // namespace audioapi
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/core/AudioParam.h>
4
+ #include <audioapi/core/AudioNode.h>
5
+ #include <audioapi/core/inputs/AudioRecorder.h>
6
+ #include <audioapi/core/BaseAudioContext.h>
7
+ #include <audioapi/utils/CircularOverflowableAudioArray.h>
8
+ #include <memory>
9
+
10
+ namespace audioapi {
11
+
12
+ class AudioBus;
13
+
14
+ /// @brief RecorderAdapterNode is an AudioNode which adapts push Recorder into pull graph.
15
+ /// It uses RingBuffer to store audio data and AudioParam to provide audio data in pull mode.
16
+ /// It is used to connect native audio recording APIs with Audio API.
17
+ ///
18
+ /// @note it will push silence if it is not connected to any Recorder
19
+ class RecorderAdapterNode : public AudioNode {
20
+ public:
21
+ explicit RecorderAdapterNode(BaseAudioContext *context);
22
+
23
+ /// @brief Initialize the RecorderAdapterNode with a buffer size.
24
+ /// @note This method should be called ONLY ONCE when the buffer size is known.
25
+ /// @throws std::runtime_error if the node is already initialized.
26
+ /// @param bufferSize The size of the buffer to be used.
27
+ void init(size_t bufferSize);
28
+
29
+ protected:
30
+ void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
31
+ std::shared_ptr<CircularOverflowableAudioArray> buff_;
32
+
33
+ private:
34
+ /// @brief Read audio frames from the recorder's internal adapterBuffer.
35
+ /// @note If `framesToRead` is greater than the number of available frames, it will fill empty space with silence.
36
+ /// @param output Pointer to the output buffer.
37
+ /// @param framesToRead Number of frames to read.
38
+ void readFrames(float *output, size_t framesToRead);
39
+
40
+ friend class AudioRecorder;
41
+ };
42
+
43
+ } // namespace audioapi
@@ -8,7 +8,7 @@ using namespace facebook;
8
8
 
9
9
  class AudioArrayBuffer : public jsi::MutableBuffer {
10
10
  public:
11
- AudioArrayBuffer(uint8_t *data, const size_t size): data_(data), size_(size) {}
11
+ AudioArrayBuffer(uint8_t *data, size_t size): data_(data), size_(size) {}
12
12
  ~AudioArrayBuffer() override = default;
13
13
 
14
14
  [[nodiscard]] size_t size() const override;
@@ -0,0 +1,61 @@
1
+ #include <audioapi/utils/CircularOverflowableAudioArray.h>
2
+ #include <type_traits>
3
+
4
+ namespace audioapi {
5
+
6
+ CircularOverflowableAudioArray::CircularOverflowableAudioArray(
7
+ size_t
8
+ size) noexcept(std::is_nothrow_constructible<AudioArray, size_t>::value)
9
+ : AudioArray(size) {}
10
+
11
+ void CircularOverflowableAudioArray::write(
12
+ const float *data,
13
+ const size_t size) {
14
+ size_t writeIndex = vWriteIndex_.load(std::memory_order_relaxed);
15
+
16
+ if (size > size_) {
17
+ return; // Ignore write if size exceeds buffer size
18
+ }
19
+
20
+ /// Advances the read index if there is not enough space
21
+ readLock_.lock();
22
+ size_t availableSpace = (size_ + vReadIndex_ - writeIndex - 1) % size_;
23
+ if (size > availableSpace) {
24
+ vReadIndex_ = (writeIndex + size + 1) % size_;
25
+ }
26
+ readLock_.unlock();
27
+
28
+ size_t partSize = size_ - writeIndex;
29
+ if (size > partSize) {
30
+ std::memcpy(data_ + writeIndex, data, partSize * sizeof(float));
31
+ std::memcpy(data_, data + partSize, (size - partSize) * sizeof(float));
32
+ } else {
33
+ std::memcpy(data_ + writeIndex, data, size * sizeof(float));
34
+ }
35
+ vWriteIndex_.store((writeIndex + size) % size_, std::memory_order_relaxed);
36
+ }
37
+
38
+ size_t CircularOverflowableAudioArray::read(float *output, size_t size) const {
39
+ readLock_.lock();
40
+ size_t availableSpace = getAvailableSpace();
41
+ size_t readSize = std::min(size, availableSpace);
42
+
43
+ size_t partSize = size_ - vReadIndex_;
44
+ if (readSize > partSize) {
45
+ std::memcpy(output, data_ + vReadIndex_, partSize * sizeof(float));
46
+ std::memcpy(
47
+ output + partSize, data_, (readSize - partSize) * sizeof(float));
48
+ } else {
49
+ std::memcpy(output, data_ + vReadIndex_, readSize * sizeof(float));
50
+ }
51
+ vReadIndex_ = (vReadIndex_ + readSize) % size_;
52
+ readLock_.unlock();
53
+ return readSize;
54
+ }
55
+
56
+ size_t CircularOverflowableAudioArray::getAvailableSpace() const {
57
+ return (size_ + vWriteIndex_.load(std::memory_order_relaxed) - vReadIndex_) %
58
+ size_;
59
+ }
60
+
61
+ } // namespace audioapi
@@ -0,0 +1,42 @@
1
+
2
+ #pragma once
3
+
4
+ #include <audioapi/utils/AudioArray.h>
5
+ #include <stdexcept>
6
+ #include <atomic>
7
+ #include <mutex>
8
+
9
+ namespace audioapi {
10
+
11
+ /// @brief CircularOverflowableAudioArray is a circular audio array that allows for overflow.
12
+ /// It provides a way to push data safely from one thread while reading from another.
13
+ /// It is designed to handle cases where the write index may be updated while the read index is being read.
14
+ /// It has read precedence, meaning that read locks are acquired before write locks.
15
+ /// @note read can fail when there are a lot of writes and buffer is small.
16
+ class CircularOverflowableAudioArray : public AudioArray {
17
+ public:
18
+ explicit CircularOverflowableAudioArray(size_t size);
19
+ CircularOverflowableAudioArray(const CircularOverflowableAudioArray &other) = default;
20
+ ~CircularOverflowableAudioArray() = default;
21
+
22
+ /// @brief Writes data to the circular buffer.
23
+ /// @note Might wait for read operation to finish if it is in progress. It ignores writes that exceed the buffer size.
24
+ /// @param data Pointer to the input buffer.
25
+ /// @param size Number of frames to write.
26
+ void write(const float *data, size_t size);
27
+
28
+ /// @brief Reads data from the circular buffer.
29
+ /// @param output Pointer to the output buffer.
30
+ /// @param size Number of frames to read.
31
+ /// @return The number of frames actually read.
32
+ size_t read(float *output, size_t size) const;
33
+
34
+ private:
35
+ std::atomic<size_t> vWriteIndex_ = { 0 };
36
+ mutable size_t vReadIndex_ = 0; // it is only used after acquiring readLock_
37
+ mutable std::mutex readLock_;
38
+
39
+ [[nodiscard]] size_t getAvailableSpace() const;
40
+ };
41
+
42
+ } // namespace audioapi
@@ -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
+ #include <audioapi/utils/CircularOverflowableAudioArray.h>
10
11
  #include <unordered_map>
11
12
 
12
13
  namespace audioapi {
@@ -20,7 +21,7 @@ IOSAudioRecorder::IOSAudioRecorder(
20
21
  AudioReceiverBlock audioReceiverBlock = ^(const AudioBufferList *inputBuffer, int numFrames, AVAudioTime *when) {
21
22
  if (isRunning_.load()) {
22
23
  auto *inputChannel = static_cast<float *>(inputBuffer->mBuffers[0].mData);
23
- circularBuffer_->push_back(inputChannel, numFrames);
24
+ writeToBuffers(inputChannel, numFrames);
24
25
  }
25
26
 
26
27
  while (circularBuffer_->getNumberOfAvailableFrames() >= bufferLength_) {
@@ -16,6 +16,13 @@
16
16
 
17
17
  float devicePrefferedSampleRate = [[AVAudioSession sharedInstance] sampleRate];
18
18
 
19
+ if (!devicePrefferedSampleRate) {
20
+ NSError *error;
21
+ devicePrefferedSampleRate = sampleRate;
22
+
23
+ [[AVAudioSession sharedInstance] setPreferredSampleRate:sampleRate error:&error];
24
+ }
25
+
19
26
  self.inputFormat = [[AVAudioFormat alloc] initWithCommonFormat:AVAudioPCMFormatFloat32
20
27
  sampleRate:devicePrefferedSampleRate
21
28
  channels:1
@@ -171,6 +171,12 @@ Object.defineProperty(exports, "RangeError", {
171
171
  return _errors.RangeError;
172
172
  }
173
173
  });
174
+ Object.defineProperty(exports, "RecorderAdapterNode", {
175
+ enumerable: true,
176
+ get: function () {
177
+ return _RecorderAdapterNode.default;
178
+ }
179
+ });
174
180
  Object.defineProperty(exports, "StereoPannerNode", {
175
181
  enumerable: true,
176
182
  get: function () {
@@ -190,6 +196,7 @@ Object.defineProperty(exports, "useSystemVolume", {
190
196
  }
191
197
  });
192
198
  var _specs = require("./specs");
199
+ var _RecorderAdapterNode = _interopRequireDefault(require("./core/RecorderAdapterNode"));
193
200
  var _AudioBuffer = _interopRequireDefault(require("./core/AudioBuffer"));
194
201
  var _AudioBufferSourceNode = _interopRequireDefault(require("./core/AudioBufferSourceNode"));
195
202
  var _AudioBufferQueueSourceNode = _interopRequireDefault(require("./core/AudioBufferQueueSourceNode"));
@@ -1 +1 @@
1
- {"version":3,"names":["_specs","require","_AudioBuffer","_interopRequireDefault","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_CustomProcessorNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_system","_useSytemVolume","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AA0CA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,2BAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,aAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,oBAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,qBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,UAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,WAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,yBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,iBAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,iBAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,oBAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,SAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,eAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,iBAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,cAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,OAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,eAAA,GAAAlB,sBAAA,CAAAF,OAAA;AAEA,IAAAqB,MAAA,GAAArB,OAAA;AAUA,IAAAsB,OAAA,GAAAtB,OAAA;AAMkB,SAAAE,uBAAAqB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AArElB;;AAgBA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACC,2BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC","ignoreList":[]}
1
+ {"version":3,"names":["_specs","require","_RecorderAdapterNode","_interopRequireDefault","_AudioBuffer","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_CustomProcessorNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_system","_useSytemVolume","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AA0CA,IAAAC,oBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,YAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,sBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,2BAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,aAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,oBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,qBAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,UAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,aAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,WAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,yBAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,iBAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,iBAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,oBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,SAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,eAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,iBAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,cAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,OAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,eAAA,GAAAnB,sBAAA,CAAAF,OAAA;AAEA,IAAAsB,MAAA,GAAAtB,OAAA;AAUA,IAAAuB,OAAA,GAAAvB,OAAA;AAMkB,SAAAE,uBAAAsB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAtElB;;AAgBA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACC,2BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC","ignoreList":[]}
@@ -18,6 +18,16 @@ class AudioRecorder {
18
18
  stop() {
19
19
  this.recorder.stop();
20
20
  }
21
+ connect(node) {
22
+ if (node.wasConnected) {
23
+ throw new Error('RecorderAdapterNode cannot be connected more than once. Refer to the documentation for more details.');
24
+ }
25
+ node.wasConnected = true;
26
+ this.recorder.connect(node.getNode());
27
+ }
28
+ disconnect() {
29
+ this.recorder.disconnect();
30
+ }
21
31
  onAudioReady(callback) {
22
32
  const onAudioReadyCallback = event => {
23
33
  callback({
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioBuffer","_interopRequireDefault","require","_events","e","__esModule","default","AudioRecorder","audioEventEmitter","AudioEventEmitter","global","constructor","options","recorder","createAudioRecorder","start","stop","onAudioReady","callback","onAudioReadyCallback","event","buffer","AudioBuffer","numFrames","when","subscription","addAudioEventListener","subscriptionId","exports"],"sourceRoot":"../../../src","sources":["core/AudioRecorder.ts"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAA8C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE/B,MAAMG,aAAa,CAAC;EAEhBC,iBAAiB,GAAG,IAAIC,yBAAiB,CACxDC,MAAM,CAACD,iBACT,CAAC;EAEDE,WAAWA,CAACC,OAA6B,EAAE;IACzC,IAAI,CAACC,QAAQ,GAAGH,MAAM,CAACI,mBAAmB,CAACF,OAAO,CAAC;EACrD;EAEOG,KAAKA,CAAA,EAAS;IACnB,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC,CAAC;EACvB;EAEOC,IAAIA,CAAA,EAAS;IAClB,IAAI,CAACH,QAAQ,CAACG,IAAI,CAAC,CAAC;EACtB;EAEOC,YAAYA,CAACC,QAAgD,EAAQ;IAC1E,MAAMC,oBAAoB,GAAIC,KAA4B,IAAK;MAC7DF,QAAQ,CAAC;QACPG,MAAM,EAAE,IAAIC,oBAAW,CAACF,KAAK,CAACC,MAAM,CAAC;QACrCE,SAAS,EAAEH,KAAK,CAACG,SAAS;QAC1BC,IAAI,EAAEJ,KAAK,CAACI;MACd,CAAC,CAAC;IACJ,CAAC;IAED,MAAMC,YAAY,GAAG,IAAI,CAACjB,iBAAiB,CAACkB,qBAAqB,CAC/D,YAAY,EACZP,oBACF,CAAC;IAED,IAAI,CAACN,QAAQ,CAACI,YAAY,GAAGQ,YAAY,CAACE,cAAc;EAC1D;AACF;AAACC,OAAA,CAAAtB,OAAA,GAAAC,aAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AudioBuffer","_interopRequireDefault","require","_events","e","__esModule","default","AudioRecorder","audioEventEmitter","AudioEventEmitter","global","constructor","options","recorder","createAudioRecorder","start","stop","connect","node","wasConnected","Error","getNode","disconnect","onAudioReady","callback","onAudioReadyCallback","event","buffer","AudioBuffer","numFrames","when","subscription","addAudioEventListener","subscriptionId","exports"],"sourceRoot":"../../../src","sources":["core/AudioRecorder.ts"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAA8C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAG/B,MAAMG,aAAa,CAAC;EAGhBC,iBAAiB,GAAG,IAAIC,yBAAiB,CACxDC,MAAM,CAACD,iBACT,CAAC;EAEDE,WAAWA,CAACC,OAA6B,EAAE;IACzC,IAAI,CAACC,QAAQ,GAAGH,MAAM,CAACI,mBAAmB,CAACF,OAAO,CAAC;EACrD;EAEOG,KAAKA,CAAA,EAAS;IACnB,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC,CAAC;EACvB;EAEOC,IAAIA,CAAA,EAAS;IAClB,IAAI,CAACH,QAAQ,CAACG,IAAI,CAAC,CAAC;EACtB;EAEOC,OAAOA,CAACC,IAAyB,EAAQ;IAC9C,IAAIA,IAAI,CAACC,YAAY,EAAE;MACrB,MAAM,IAAIC,KAAK,CACb,sGACF,CAAC;IACH;IACAF,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB,IAAI,CAACN,QAAQ,CAACI,OAAO,CAACC,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC;EACvC;EAEOC,UAAUA,CAAA,EAAS;IACxB,IAAI,CAACT,QAAQ,CAACS,UAAU,CAAC,CAAC;EAC5B;EAEOC,YAAYA,CAACC,QAAgD,EAAQ;IAC1E,MAAMC,oBAAoB,GAAIC,KAA4B,IAAK;MAC7DF,QAAQ,CAAC;QACPG,MAAM,EAAE,IAAIC,oBAAW,CAACF,KAAK,CAACC,MAAM,CAAC;QACrCE,SAAS,EAAEH,KAAK,CAACG,SAAS;QAC1BC,IAAI,EAAEJ,KAAK,CAACI;MACd,CAAC,CAAC;IACJ,CAAC;IAED,MAAMC,YAAY,GAAG,IAAI,CAACvB,iBAAiB,CAACwB,qBAAqB,CAC/D,YAAY,EACZP,oBACF,CAAC;IAED,IAAI,CAACZ,QAAQ,CAACU,YAAY,GAAGQ,YAAY,CAACE,cAAc;EAC1D;AACF;AAACC,OAAA,CAAA5B,OAAA,GAAAC,aAAA","ignoreList":[]}
@@ -16,6 +16,7 @@ var _PeriodicWave = _interopRequireDefault(require("./PeriodicWave"));
16
16
  var _AnalyserNode = _interopRequireDefault(require("./AnalyserNode"));
17
17
  var _AudioBufferQueueSourceNode = _interopRequireDefault(require("./AudioBufferQueueSourceNode"));
18
18
  var _errors = require("../errors");
19
+ var _RecorderAdapterNode = _interopRequireDefault(require("./RecorderAdapterNode"));
19
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
21
  class BaseAudioContext {
21
22
  constructor(context) {
@@ -29,6 +30,9 @@ class BaseAudioContext {
29
30
  get state() {
30
31
  return this.context.state;
31
32
  }
33
+ createRecorderAdapter() {
34
+ return new _RecorderAdapterNode.default(this, this.context.createRecorderAdapter());
35
+ }
32
36
  createOscillator() {
33
37
  return new _OscillatorNode.default(this, this.context.createOscillator());
34
38
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioDestinationNode","_interopRequireDefault","require","_OscillatorNode","_CustomProcessorNode","_GainNode","_StereoPannerNode","_BiquadFilterNode","_AudioBufferSourceNode","_AudioBuffer","_PeriodicWave","_AnalyserNode","_AudioBufferQueueSourceNode","_errors","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createOscillator","OscillatorNode","createCustomProcessor","identifier","CustomProcessorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","NotSupportedError","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_AudioDestinationNode","_interopRequireDefault","require","_OscillatorNode","_CustomProcessorNode","_GainNode","_StereoPannerNode","_BiquadFilterNode","_AudioBufferSourceNode","_AudioBuffer","_PeriodicWave","_AnalyserNode","_AudioBufferQueueSourceNode","_errors","_RecorderAdapterNode","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createRecorderAdapter","RecorderAdapterNode","createOscillator","OscillatorNode","createCustomProcessor","identifier","CustomProcessorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","NotSupportedError","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _AudioNode = _interopRequireDefault(require("./AudioNode"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ class RecorderAdapterNode extends _AudioNode.default {
10
+ /** @internal */
11
+ wasConnected = false;
12
+
13
+ /** @internal */
14
+ getNode() {
15
+ return this.node;
16
+ }
17
+ }
18
+ exports.default = RecorderAdapterNode;
19
+ //# sourceMappingURL=RecorderAdapterNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_AudioNode","_interopRequireDefault","require","e","__esModule","default","RecorderAdapterNode","AudioNode","wasConnected","getNode","node","exports"],"sourceRoot":"../../../src","sources":["core/RecorderAdapterNode.ts"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAoC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAErB,MAAMG,mBAAmB,SAASC,kBAAS,CAAC;EACzD;EACOC,YAAY,GAAY,KAAK;;EAEpC;EACOC,OAAOA,CAAA,EAAyB;IACrC,OAAO,IAAI,CAACC,IAAI;EAClB;AACF;AAACC,OAAA,CAAAN,OAAA,GAAAC,mBAAA","ignoreList":[]}
package/lib/module/api.js CHANGED
@@ -12,6 +12,7 @@ if (global.createAudioContext == null || global.createOfflineAudioContext == nul
12
12
  }
13
13
  NativeAudioAPIModule.install();
14
14
  }
15
+ export { default as RecorderAdapterNode } from "./core/RecorderAdapterNode.js";
15
16
  export { default as AudioBuffer } from "./core/AudioBuffer.js";
16
17
  export { default as AudioBufferSourceNode } from "./core/AudioBufferSourceNode.js";
17
18
  export { default as AudioBufferQueueSourceNode } from "./core/AudioBufferQueueSourceNode.js";
@@ -1 +1 @@
1
- {"version":3,"names":["NativeAudioAPIModule","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","Error","install","default","AudioBuffer","AudioBufferSourceNode","AudioBufferQueueSourceNode","AudioContext","OfflineAudioContext","AudioDestinationNode","AudioNode","AnalyserNode","AudioParam","AudioScheduledSourceNode","BaseAudioContext","BiquadFilterNode","CustomProcessorNode","GainNode","OscillatorNode","StereoPannerNode","AudioRecorder","AudioManager","useSystemVolume","OscillatorType","BiquadFilterType","ChannelCountMode","ChannelInterpretation","ContextState","WindowType","PeriodicWaveConstraints","IndexSizeError","InvalidAccessError","InvalidStateError","RangeError","NotSupportedError"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,kBAAS;;AAS9C;;AAgBA;;AAEA,IACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACL,oBAAoB,EAAE;IACzB,MAAM,IAAIM,KAAK,CACb,iFACF,CAAC;EACH;EAEAN,oBAAoB,CAACO,OAAO,CAAC,CAAC;AAChC;AAEA,SAASC,OAAO,IAAIC,WAAW,QAAQ,uBAAoB;AAC3D,SAASD,OAAO,IAAIE,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASF,OAAO,IAAIG,0BAA0B,QAAQ,sCAAmC;AACzF,SAASH,OAAO,IAAII,YAAY,QAAQ,wBAAqB;AAC7D,SAASJ,OAAO,IAAIK,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASL,OAAO,IAAIM,oBAAoB,QAAQ,gCAA6B;AAC7E,SAASN,OAAO,IAAIO,SAAS,QAAQ,qBAAkB;AACvD,SAASP,OAAO,IAAIQ,YAAY,QAAQ,wBAAqB;AAC7D,SAASR,OAAO,IAAIS,UAAU,QAAQ,sBAAmB;AACzD,SAAST,OAAO,IAAIU,wBAAwB,QAAQ,oCAAiC;AACrF,SAASV,OAAO,IAAIW,gBAAgB,QAAQ,4BAAyB;AACrE,SAASX,OAAO,IAAIY,gBAAgB,QAAQ,4BAAyB;AACrE,SAASZ,OAAO,IAAIa,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASb,OAAO,IAAIc,QAAQ,QAAQ,oBAAiB;AACrD,SAASd,OAAO,IAAIe,cAAc,QAAQ,0BAAuB;AACjE,SAASf,OAAO,IAAIgB,gBAAgB,QAAQ,4BAAyB;AACrE,SAAShB,OAAO,IAAIiB,aAAa,QAAQ,yBAAsB;AAC/D,SAASjB,OAAO,IAAIkB,YAAY,QAAQ,mBAAU;AAClD,SAASlB,OAAO,IAAImB,eAAe,QAAQ,2BAAwB;AAEnE,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,YAAY,EACZC,UAAU,EACVC,uBAAuB,QAClB,YAAS;AAEhB,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAU,EACVC,iBAAiB,QACZ,mBAAU","ignoreList":[]}
1
+ {"version":3,"names":["NativeAudioAPIModule","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","AudioEventEmitter","Error","install","default","RecorderAdapterNode","AudioBuffer","AudioBufferSourceNode","AudioBufferQueueSourceNode","AudioContext","OfflineAudioContext","AudioDestinationNode","AudioNode","AnalyserNode","AudioParam","AudioScheduledSourceNode","BaseAudioContext","BiquadFilterNode","CustomProcessorNode","GainNode","OscillatorNode","StereoPannerNode","AudioRecorder","AudioManager","useSystemVolume","OscillatorType","BiquadFilterType","ChannelCountMode","ChannelInterpretation","ContextState","WindowType","PeriodicWaveConstraints","IndexSizeError","InvalidAccessError","InvalidStateError","RangeError","NotSupportedError"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,kBAAS;;AAS9C;;AAgBA;;AAEA,IACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACL,oBAAoB,EAAE;IACzB,MAAM,IAAIM,KAAK,CACb,iFACF,CAAC;EACH;EAEAN,oBAAoB,CAACO,OAAO,CAAC,CAAC;AAChC;AAEA,SAASC,OAAO,IAAIC,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASD,OAAO,IAAIE,WAAW,QAAQ,uBAAoB;AAC3D,SAASF,OAAO,IAAIG,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASH,OAAO,IAAII,0BAA0B,QAAQ,sCAAmC;AACzF,SAASJ,OAAO,IAAIK,YAAY,QAAQ,wBAAqB;AAC7D,SAASL,OAAO,IAAIM,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASN,OAAO,IAAIO,oBAAoB,QAAQ,gCAA6B;AAC7E,SAASP,OAAO,IAAIQ,SAAS,QAAQ,qBAAkB;AACvD,SAASR,OAAO,IAAIS,YAAY,QAAQ,wBAAqB;AAC7D,SAAST,OAAO,IAAIU,UAAU,QAAQ,sBAAmB;AACzD,SAASV,OAAO,IAAIW,wBAAwB,QAAQ,oCAAiC;AACrF,SAASX,OAAO,IAAIY,gBAAgB,QAAQ,4BAAyB;AACrE,SAASZ,OAAO,IAAIa,gBAAgB,QAAQ,4BAAyB;AACrE,SAASb,OAAO,IAAIc,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASd,OAAO,IAAIe,QAAQ,QAAQ,oBAAiB;AACrD,SAASf,OAAO,IAAIgB,cAAc,QAAQ,0BAAuB;AACjE,SAAShB,OAAO,IAAIiB,gBAAgB,QAAQ,4BAAyB;AACrE,SAASjB,OAAO,IAAIkB,aAAa,QAAQ,yBAAsB;AAC/D,SAASlB,OAAO,IAAImB,YAAY,QAAQ,mBAAU;AAClD,SAASnB,OAAO,IAAIoB,eAAe,QAAQ,2BAAwB;AAEnE,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,YAAY,EACZC,UAAU,EACVC,uBAAuB,QAClB,YAAS;AAEhB,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAU,EACVC,iBAAiB,QACZ,mBAAU","ignoreList":[]}
@@ -13,6 +13,16 @@ export default class AudioRecorder {
13
13
  stop() {
14
14
  this.recorder.stop();
15
15
  }
16
+ connect(node) {
17
+ if (node.wasConnected) {
18
+ throw new Error('RecorderAdapterNode cannot be connected more than once. Refer to the documentation for more details.');
19
+ }
20
+ node.wasConnected = true;
21
+ this.recorder.connect(node.getNode());
22
+ }
23
+ disconnect() {
24
+ this.recorder.disconnect();
25
+ }
16
26
  onAudioReady(callback) {
17
27
  const onAudioReadyCallback = event => {
18
28
  callback({
@@ -1 +1 @@
1
- {"version":3,"names":["AudioBuffer","AudioEventEmitter","AudioRecorder","audioEventEmitter","global","constructor","options","recorder","createAudioRecorder","start","stop","onAudioReady","callback","onAudioReadyCallback","event","buffer","numFrames","when","subscription","addAudioEventListener","subscriptionId"],"sourceRoot":"../../../src","sources":["core/AudioRecorder.ts"],"mappings":";;AAEA,OAAOA,WAAW,MAAM,kBAAe;AAEvC,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,aAAa,CAAC;EAEhBC,iBAAiB,GAAG,IAAIF,iBAAiB,CACxDG,MAAM,CAACH,iBACT,CAAC;EAEDI,WAAWA,CAACC,OAA6B,EAAE;IACzC,IAAI,CAACC,QAAQ,GAAGH,MAAM,CAACI,mBAAmB,CAACF,OAAO,CAAC;EACrD;EAEOG,KAAKA,CAAA,EAAS;IACnB,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC,CAAC;EACvB;EAEOC,IAAIA,CAAA,EAAS;IAClB,IAAI,CAACH,QAAQ,CAACG,IAAI,CAAC,CAAC;EACtB;EAEOC,YAAYA,CAACC,QAAgD,EAAQ;IAC1E,MAAMC,oBAAoB,GAAIC,KAA4B,IAAK;MAC7DF,QAAQ,CAAC;QACPG,MAAM,EAAE,IAAIf,WAAW,CAACc,KAAK,CAACC,MAAM,CAAC;QACrCC,SAAS,EAAEF,KAAK,CAACE,SAAS;QAC1BC,IAAI,EAAEH,KAAK,CAACG;MACd,CAAC,CAAC;IACJ,CAAC;IAED,MAAMC,YAAY,GAAG,IAAI,CAACf,iBAAiB,CAACgB,qBAAqB,CAC/D,YAAY,EACZN,oBACF,CAAC;IAED,IAAI,CAACN,QAAQ,CAACI,YAAY,GAAGO,YAAY,CAACE,cAAc;EAC1D;AACF","ignoreList":[]}
1
+ {"version":3,"names":["AudioBuffer","AudioEventEmitter","AudioRecorder","audioEventEmitter","global","constructor","options","recorder","createAudioRecorder","start","stop","connect","node","wasConnected","Error","getNode","disconnect","onAudioReady","callback","onAudioReadyCallback","event","buffer","numFrames","when","subscription","addAudioEventListener","subscriptionId"],"sourceRoot":"../../../src","sources":["core/AudioRecorder.ts"],"mappings":";;AAEA,OAAOA,WAAW,MAAM,kBAAe;AAEvC,SAASC,iBAAiB,QAAQ,oBAAW;AAG7C,eAAe,MAAMC,aAAa,CAAC;EAGhBC,iBAAiB,GAAG,IAAIF,iBAAiB,CACxDG,MAAM,CAACH,iBACT,CAAC;EAEDI,WAAWA,CAACC,OAA6B,EAAE;IACzC,IAAI,CAACC,QAAQ,GAAGH,MAAM,CAACI,mBAAmB,CAACF,OAAO,CAAC;EACrD;EAEOG,KAAKA,CAAA,EAAS;IACnB,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC,CAAC;EACvB;EAEOC,IAAIA,CAAA,EAAS;IAClB,IAAI,CAACH,QAAQ,CAACG,IAAI,CAAC,CAAC;EACtB;EAEOC,OAAOA,CAACC,IAAyB,EAAQ;IAC9C,IAAIA,IAAI,CAACC,YAAY,EAAE;MACrB,MAAM,IAAIC,KAAK,CACb,sGACF,CAAC;IACH;IACAF,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB,IAAI,CAACN,QAAQ,CAACI,OAAO,CAACC,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC;EACvC;EAEOC,UAAUA,CAAA,EAAS;IACxB,IAAI,CAACT,QAAQ,CAACS,UAAU,CAAC,CAAC;EAC5B;EAEOC,YAAYA,CAACC,QAAgD,EAAQ;IAC1E,MAAMC,oBAAoB,GAAIC,KAA4B,IAAK;MAC7DF,QAAQ,CAAC;QACPG,MAAM,EAAE,IAAIrB,WAAW,CAACoB,KAAK,CAACC,MAAM,CAAC;QACrCC,SAAS,EAAEF,KAAK,CAACE,SAAS;QAC1BC,IAAI,EAAEH,KAAK,CAACG;MACd,CAAC,CAAC;IACJ,CAAC;IAED,MAAMC,YAAY,GAAG,IAAI,CAACrB,iBAAiB,CAACsB,qBAAqB,CAC/D,YAAY,EACZN,oBACF,CAAC;IAED,IAAI,CAACZ,QAAQ,CAACU,YAAY,GAAGO,YAAY,CAACE,cAAc;EAC1D;AACF","ignoreList":[]}
@@ -12,6 +12,7 @@ import PeriodicWave from "./PeriodicWave.js";
12
12
  import AnalyserNode from "./AnalyserNode.js";
13
13
  import AudioBufferQueueSourceNode from "./AudioBufferQueueSourceNode.js";
14
14
  import { InvalidAccessError, NotSupportedError } from "../errors/index.js";
15
+ import RecorderAdapterNode from "./RecorderAdapterNode.js";
15
16
  export default class BaseAudioContext {
16
17
  constructor(context) {
17
18
  this.context = context;
@@ -24,6 +25,9 @@ export default class BaseAudioContext {
24
25
  get state() {
25
26
  return this.context.state;
26
27
  }
28
+ createRecorderAdapter() {
29
+ return new RecorderAdapterNode(this, this.context.createRecorderAdapter());
30
+ }
27
31
  createOscillator() {
28
32
  return new OscillatorNode(this, this.context.createOscillator());
29
33
  }
@@ -1 +1 @@
1
- {"version":3,"names":["AudioDestinationNode","OscillatorNode","CustomProcessorNode","GainNode","StereoPannerNode","BiquadFilterNode","AudioBufferSourceNode","AudioBuffer","PeriodicWave","AnalyserNode","AudioBufferQueueSourceNode","InvalidAccessError","NotSupportedError","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createOscillator","createCustomProcessor","identifier","createGain","createStereoPanner","createBiquadFilter","createBufferSource","options","pitchCorrection","createBufferQueueSource","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["AudioDestinationNode","OscillatorNode","CustomProcessorNode","GainNode","StereoPannerNode","BiquadFilterNode","AudioBufferSourceNode","AudioBuffer","PeriodicWave","AnalyserNode","AudioBufferQueueSourceNode","InvalidAccessError","NotSupportedError","RecorderAdapterNode","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createRecorderAdapter","createOscillator","createCustomProcessor","identifier","createGain","createStereoPanner","createBiquadFilter","createBufferSource","options","pitchCorrection","createBufferQueueSource","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import AudioNode from "./AudioNode.js";
4
+ export default class RecorderAdapterNode extends AudioNode {
5
+ /** @internal */
6
+ wasConnected = false;
7
+
8
+ /** @internal */
9
+ getNode() {
10
+ return this.node;
11
+ }
12
+ }
13
+ //# sourceMappingURL=RecorderAdapterNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AudioNode","RecorderAdapterNode","wasConnected","getNode","node"],"sourceRoot":"../../../src","sources":["core/RecorderAdapterNode.ts"],"mappings":";;AACA,OAAOA,SAAS,MAAM,gBAAa;AAEnC,eAAe,MAAMC,mBAAmB,SAASD,SAAS,CAAC;EACzD;EACOE,YAAY,GAAY,KAAK;;EAEpC;EACOC,OAAOA,CAAA,EAAyB;IACrC,OAAO,IAAI,CAACC,IAAI;EAClB;AACF","ignoreList":[]}
@@ -6,6 +6,7 @@ declare global {
6
6
  var createAudioRecorder: (options: AudioRecorderOptions) => IAudioRecorder;
7
7
  var AudioEventEmitter: IAudioEventEmitter;
8
8
  }
9
+ export { default as RecorderAdapterNode } from './core/RecorderAdapterNode';
9
10
  export { default as AudioBuffer } from './core/AudioBuffer';
10
11
  export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
11
12
  export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,CACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,OAAO,KACnB,aAAa,CAAC;IACnB,IAAI,yBAAyB,EAAE,CAC7B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,oBAAoB,CAAC;IAE1B,IAAI,mBAAmB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAE3E,IAAI,iBAAiB,EAAE,kBAAkB,CAAC;CAC3C;AAkBD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,CACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,OAAO,KACnB,aAAa,CAAC;IACnB,IAAI,yBAAyB,EAAE,CAC7B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,oBAAoB,CAAC;IAE1B,IAAI,mBAAmB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAE3E,IAAI,iBAAiB,EAAE,kBAAkB,CAAC;CAC3C;AAkBD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
@@ -1,12 +1,15 @@
1
1
  import { IAudioRecorder } from '../interfaces';
2
2
  import { AudioRecorderOptions } from '../types';
3
3
  import { OnAudioReadyEventType } from '../events/types';
4
+ import RecorderAdapterNode from './RecorderAdapterNode';
4
5
  export default class AudioRecorder {
5
6
  protected readonly recorder: IAudioRecorder;
6
7
  private readonly audioEventEmitter;
7
8
  constructor(options: AudioRecorderOptions);
8
9
  start(): void;
9
10
  stop(): void;
11
+ connect(node: RecorderAdapterNode): void;
12
+ disconnect(): void;
10
13
  onAudioReady(callback: (event: OnAudioReadyEventType) => void): void;
11
14
  }
12
15
  //# sourceMappingURL=AudioRecorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioRecorder.d.ts","sourceRoot":"","sources":["../../../src/core/AudioRecorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAEhC;gBAEU,OAAO,EAAE,oBAAoB;IAIlC,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIZ,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI;CAgB5E"}
1
+ {"version":3,"file":"AudioRecorder.d.ts","sourceRoot":"","sources":["../../../src/core/AudioRecorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAEhC;gBAEU,OAAO,EAAE,oBAAoB;IAIlC,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAUxC,UAAU,IAAI,IAAI;IAIlB,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI;CAgB5E"}
@@ -11,6 +11,7 @@ import AudioBuffer from './AudioBuffer';
11
11
  import PeriodicWave from './PeriodicWave';
12
12
  import AnalyserNode from './AnalyserNode';
13
13
  import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
14
+ import RecorderAdapterNode from './RecorderAdapterNode';
14
15
  export default class BaseAudioContext {
15
16
  readonly destination: AudioDestinationNode;
16
17
  readonly sampleRate: number;
@@ -18,6 +19,7 @@ export default class BaseAudioContext {
18
19
  constructor(context: IBaseAudioContext);
19
20
  get currentTime(): number;
20
21
  get state(): ContextState;
22
+ createRecorderAdapter(): RecorderAdapterNode;
21
23
  createOscillator(): OscillatorNode;
22
24
  createCustomProcessor(identifier: string): CustomProcessorNode;
23
25
  createGain(): GainNode;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/BaseAudioContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAGtE,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAElC,OAAO,EAAE,iBAAiB;IAMtC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB;IAO9D,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,CAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB;IASxB,uBAAuB,IAAI,0BAA0B;IAOrD,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAI9B,iDAAiD;IAC3C,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAWrE,8CAA8C;IACxC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAMxD,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,MAAY,GACzB,OAAO,CAAC,WAAW,CAAC;CAKxB"}
1
+ {"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/BaseAudioContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAEtE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAElC,OAAO,EAAE,iBAAiB;IAMtC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,qBAAqB,IAAI,mBAAmB;IAI5C,gBAAgB,IAAI,cAAc;IAIlC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB;IAO9D,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,CAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB;IASxB,uBAAuB,IAAI,0BAA0B;IAOrD,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAI9B,iDAAiD;IAC3C,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAWrE,8CAA8C;IACxC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAMxD,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,MAAY,GACzB,OAAO,CAAC,WAAW,CAAC;CAKxB"}
@@ -0,0 +1,9 @@
1
+ import { IRecorderAdapterNode } from '../interfaces';
2
+ import AudioNode from './AudioNode';
3
+ export default class RecorderAdapterNode extends AudioNode {
4
+ /** @internal */
5
+ wasConnected: boolean;
6
+ /** @internal */
7
+ getNode(): IRecorderAdapterNode;
8
+ }
9
+ //# sourceMappingURL=RecorderAdapterNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecorderAdapterNode.d.ts","sourceRoot":"","sources":["../../../src/core/RecorderAdapterNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS;IACxD,gBAAgB;IACT,YAAY,EAAE,OAAO,CAAS;IAErC,gBAAgB;IACT,OAAO,IAAI,oBAAoB;CAGvC"}
@@ -5,6 +5,7 @@ export interface IBaseAudioContext {
5
5
  readonly state: ContextState;
6
6
  readonly sampleRate: number;
7
7
  readonly currentTime: number;
8
+ createRecorderAdapter(): IRecorderAdapterNode;
8
9
  createOscillator(): IOscillatorNode;
9
10
  createCustomProcessor(identifier: string): ICustomProcessorNode;
10
11
  createGain(): IGainNode;
@@ -125,9 +126,13 @@ export interface IAnalyserNode extends IAudioNode {
125
126
  getFloatTimeDomainData: (array: Float32Array) => void;
126
127
  getByteTimeDomainData: (array: Uint8Array) => void;
127
128
  }
129
+ export interface IRecorderAdapterNode extends IAudioNode {
130
+ }
128
131
  export interface IAudioRecorder {
129
132
  start: () => void;
130
133
  stop: () => void;
134
+ connect: (node: IRecorderAdapterNode) => void;
135
+ disconnect: () => void;
131
136
  onAudioReady: string;
132
137
  }
133
138
  export interface IAudioEventEmitter {
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.7.0-nightly-4fc09d1-20250727",
3
+ "version": "0.7.0-nightly-a21e1f4-20250728",
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"
package/src/api.ts CHANGED
@@ -40,6 +40,7 @@ if (
40
40
  NativeAudioAPIModule.install();
41
41
  }
42
42
 
43
+ export { default as RecorderAdapterNode } from './core/RecorderAdapterNode';
43
44
  export { default as AudioBuffer } from './core/AudioBuffer';
44
45
  export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
45
46
  export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
@@ -3,9 +3,11 @@ import { AudioRecorderOptions } from '../types';
3
3
  import AudioBuffer from './AudioBuffer';
4
4
  import { OnAudioReadyEventType } from '../events/types';
5
5
  import { AudioEventEmitter } from '../events';
6
+ import RecorderAdapterNode from './RecorderAdapterNode';
6
7
 
7
8
  export default class AudioRecorder {
8
9
  protected readonly recorder: IAudioRecorder;
10
+
9
11
  private readonly audioEventEmitter = new AudioEventEmitter(
10
12
  global.AudioEventEmitter
11
13
  );
@@ -22,6 +24,20 @@ export default class AudioRecorder {
22
24
  this.recorder.stop();
23
25
  }
24
26
 
27
+ public connect(node: RecorderAdapterNode): void {
28
+ if (node.wasConnected) {
29
+ throw new Error(
30
+ 'RecorderAdapterNode cannot be connected more than once. Refer to the documentation for more details.'
31
+ );
32
+ }
33
+ node.wasConnected = true;
34
+ this.recorder.connect(node.getNode());
35
+ }
36
+
37
+ public disconnect(): void {
38
+ this.recorder.disconnect();
39
+ }
40
+
25
41
  public onAudioReady(callback: (event: OnAudioReadyEventType) => void): void {
26
42
  const onAudioReadyCallback = (event: OnAudioReadyEventType) => {
27
43
  callback({
@@ -16,6 +16,7 @@ import PeriodicWave from './PeriodicWave';
16
16
  import AnalyserNode from './AnalyserNode';
17
17
  import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
18
18
  import { InvalidAccessError, NotSupportedError } from '../errors';
19
+ import RecorderAdapterNode from './RecorderAdapterNode';
19
20
 
20
21
  export default class BaseAudioContext {
21
22
  readonly destination: AudioDestinationNode;
@@ -36,6 +37,10 @@ export default class BaseAudioContext {
36
37
  return this.context.state;
37
38
  }
38
39
 
40
+ createRecorderAdapter(): RecorderAdapterNode {
41
+ return new RecorderAdapterNode(this, this.context.createRecorderAdapter());
42
+ }
43
+
39
44
  createOscillator(): OscillatorNode {
40
45
  return new OscillatorNode(this, this.context.createOscillator());
41
46
  }
@@ -0,0 +1,12 @@
1
+ import { IRecorderAdapterNode } from '../interfaces';
2
+ import AudioNode from './AudioNode';
3
+
4
+ export default class RecorderAdapterNode extends AudioNode {
5
+ /** @internal */
6
+ public wasConnected: boolean = false;
7
+
8
+ /** @internal */
9
+ public getNode(): IRecorderAdapterNode {
10
+ return this.node as IRecorderAdapterNode;
11
+ }
12
+ }
package/src/interfaces.ts CHANGED
@@ -15,6 +15,7 @@ export interface IBaseAudioContext {
15
15
  readonly sampleRate: number;
16
16
  readonly currentTime: number;
17
17
 
18
+ createRecorderAdapter(): IRecorderAdapterNode;
18
19
  createOscillator(): IOscillatorNode;
19
20
  createCustomProcessor(identifier: string): ICustomProcessorNode;
20
21
  createGain(): IGainNode;
@@ -195,9 +196,13 @@ export interface IAnalyserNode extends IAudioNode {
195
196
  getByteTimeDomainData: (array: Uint8Array) => void;
196
197
  }
197
198
 
199
+ export interface IRecorderAdapterNode extends IAudioNode {}
200
+
198
201
  export interface IAudioRecorder {
199
202
  start: () => void;
200
203
  stop: () => void;
204
+ connect: (node: IRecorderAdapterNode) => void;
205
+ disconnect: () => void;
201
206
 
202
207
  // passing subscriptionId(uint_64 in cpp, string in js) to the cpp
203
208
  onAudioReady: string;