react-native-audio-api 0.9.0-nightly-96a5bcd-20251007 → 0.9.0-nightly-7ecb495-20251008

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.
@@ -4,6 +4,7 @@
4
4
  #include <audioapi/HostObjects/OfflineAudioContextHostObject.h>
5
5
  #include <audioapi/HostObjects/inputs/AudioRecorderHostObject.h>
6
6
  #include <audioapi/HostObjects/utils/AudioDecoderHostObject.h>
7
+ #include <audioapi/HostObjects/utils/AudioStretcherHostObject.h>
7
8
  #include <audioapi/core/AudioContext.h>
8
9
  #include <audioapi/core/OfflineAudioContext.h>
9
10
  #include <audioapi/core/inputs/AudioRecorder.h>
@@ -36,6 +37,8 @@ class AudioAPIModuleInstaller {
36
37
  jsiRuntime, jsCallInvoker, audioEventHandlerRegistry, uiRuntime);
37
38
  auto createAudioDecoder =
38
39
  getCreateAudioDecoderFunction(jsiRuntime, jsCallInvoker);
40
+ auto createAudioStretcher =
41
+ getCreateAudioStretcherFunction(jsiRuntime, jsCallInvoker);
39
42
 
40
43
  jsiRuntime->global().setProperty(
41
44
  *jsiRuntime, "createAudioContext", createAudioContext);
@@ -45,6 +48,8 @@ class AudioAPIModuleInstaller {
45
48
  *jsiRuntime, "createOfflineAudioContext", createOfflineAudioContext);
46
49
  jsiRuntime->global().setProperty(
47
50
  *jsiRuntime, "createAudioDecoder", createAudioDecoder);
51
+ jsiRuntime->global().setProperty(
52
+ *jsiRuntime, "createAudioStretcher", createAudioStretcher);
48
53
 
49
54
  auto audioEventHandlerRegistryHostObject =
50
55
  std::make_shared<AudioEventHandlerRegistryHostObject>(
@@ -190,6 +195,26 @@ class AudioAPIModuleInstaller {
190
195
  runtime, audioDecoderHostObject);
191
196
  });
192
197
  }
198
+
199
+ static jsi::Function getCreateAudioStretcherFunction(
200
+ jsi::Runtime *jsiRuntime,
201
+ const std::shared_ptr<react::CallInvoker> &jsCallInvoker) {
202
+ return jsi::Function::createFromHostFunction(
203
+ *jsiRuntime,
204
+ jsi::PropNameID::forAscii(*jsiRuntime, "createAudioStretcher"),
205
+ 0,
206
+ [jsCallInvoker](
207
+ jsi::Runtime &runtime,
208
+ const jsi::Value &thisValue,
209
+ const jsi::Value *args,
210
+ size_t count) -> jsi::Value {
211
+ auto audioStretcherHostObject =
212
+ std::make_shared<AudioStretcherHostObject>(
213
+ &runtime, jsCallInvoker);
214
+ return jsi::Object::createFromHostObject(
215
+ runtime, audioStretcherHostObject);
216
+ });
217
+ }
193
218
  };
194
219
 
195
220
  } // namespace audioapi
@@ -32,49 +32,63 @@ JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithMemoryBlock) {
32
32
 
33
33
  auto sampleRate = args[1].getNumber();
34
34
 
35
- return promiseVendor_->createAsyncPromise(
36
- [data, size, sampleRate](
37
- jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
38
- auto result =
39
- AudioDecoder::decodeWithMemoryBlock(data, size, sampleRate);
40
-
41
- if (!result) {
42
- return std::string("Failed to decode audio data.");
43
- }
44
-
45
- auto audioBufferHostObject =
46
- std::make_shared<AudioBufferHostObject>(result);
47
-
48
- auto jsiObject =
49
- jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
50
- jsiObject.setExternalMemoryPressure(
51
- runtime, audioBufferHostObject->getSizeInBytes());
52
- return jsiObject;
35
+ auto promise = promiseVendor_->createPromise(
36
+ [data, size, sampleRate](std::shared_ptr<Promise> promise) {
37
+ std::thread([data, size, sampleRate, promise = std::move(promise)]() {
38
+ auto result =
39
+ AudioDecoder::decodeWithMemoryBlock(data, size, sampleRate);
40
+
41
+ if (!result) {
42
+ promise->reject("Failed to decode audio data.");
43
+ return;
44
+ }
45
+
46
+ auto audioBufferHostObject =
47
+ std::make_shared<AudioBufferHostObject>(result);
48
+
49
+ promise->resolve([audioBufferHostObject = std::move(
50
+ audioBufferHostObject)](jsi::Runtime &runtime) {
51
+ auto jsiObject = jsi::Object::createFromHostObject(
52
+ runtime, audioBufferHostObject);
53
+ jsiObject.setExternalMemoryPressure(
54
+ runtime, audioBufferHostObject->getSizeInBytes());
55
+ return jsiObject;
56
+ });
57
+ }).detach();
53
58
  });
59
+ return promise;
54
60
  }
55
61
 
56
62
  JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithFilePath) {
57
63
  auto sourcePath = args[0].getString(runtime).utf8(runtime);
58
64
  auto sampleRate = args[1].getNumber();
59
65
 
60
- return promiseVendor_->createAsyncPromise(
61
- [sourcePath, sampleRate](
62
- jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
63
- auto result = AudioDecoder::decodeWithFilePath(sourcePath, sampleRate);
64
-
65
- if (!result) {
66
- return std::string("Failed to decode audio data source.");
67
- }
68
-
69
- auto audioBufferHostObject =
70
- std::make_shared<AudioBufferHostObject>(result);
71
-
72
- auto jsiObject =
73
- jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
74
- jsiObject.setExternalMemoryPressure(
75
- runtime, audioBufferHostObject->getSizeInBytes());
76
- return jsiObject;
66
+ auto promise = promiseVendor_->createPromise(
67
+ [sourcePath, sampleRate](std::shared_ptr<Promise> promise) {
68
+ std::thread([sourcePath, sampleRate, promise = std::move(promise)]() {
69
+ auto result =
70
+ AudioDecoder::decodeWithFilePath(sourcePath, sampleRate);
71
+
72
+ if (!result) {
73
+ promise->reject("Failed to decode audio data source.");
74
+ return;
75
+ }
76
+
77
+ auto audioBufferHostObject =
78
+ std::make_shared<AudioBufferHostObject>(result);
79
+
80
+ promise->resolve([audioBufferHostObject = std::move(
81
+ audioBufferHostObject)](jsi::Runtime &runtime) {
82
+ auto jsiObject = jsi::Object::createFromHostObject(
83
+ runtime, audioBufferHostObject);
84
+ jsiObject.setExternalMemoryPressure(
85
+ runtime, audioBufferHostObject->getSizeInBytes());
86
+ return jsiObject;
87
+ });
88
+ }).detach();
77
89
  });
90
+
91
+ return promise;
78
92
  }
79
93
 
80
94
  JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithPCMInBase64) {
@@ -83,25 +97,37 @@ JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithPCMInBase64) {
83
97
  auto inputChannelCount = args[2].getNumber();
84
98
  auto interleaved = args[3].getBool();
85
99
 
86
- return promiseVendor_->createAsyncPromise(
100
+ auto promise = promiseVendor_->createPromise(
87
101
  [b64, inputSampleRate, inputChannelCount, interleaved](
88
- jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
89
- auto result = AudioDecoder::decodeWithPCMInBase64(
90
- b64, inputSampleRate, inputChannelCount, interleaved);
91
-
92
- if (!result) {
93
- return std::string("Failed to decode audio data source.");
94
- }
95
-
96
- auto audioBufferHostObject =
97
- std::make_shared<AudioBufferHostObject>(result);
98
-
99
- auto jsiObject =
100
- jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
101
- jsiObject.setExternalMemoryPressure(
102
- runtime, audioBufferHostObject->getSizeInBytes());
103
- return jsiObject;
102
+ std::shared_ptr<Promise> promise) {
103
+ std::thread([b64,
104
+ inputSampleRate,
105
+ inputChannelCount,
106
+ interleaved,
107
+ promise = std::move(promise)]() {
108
+ auto result = AudioDecoder::decodeWithPCMInBase64(
109
+ b64, inputSampleRate, inputChannelCount, interleaved);
110
+
111
+ if (!result) {
112
+ promise->reject("Failed to decode audio data source.");
113
+ return;
114
+ }
115
+
116
+ auto audioBufferHostObject =
117
+ std::make_shared<AudioBufferHostObject>(result);
118
+
119
+ promise->resolve([audioBufferHostObject = std::move(
120
+ audioBufferHostObject)](jsi::Runtime &runtime) {
121
+ auto jsiObject = jsi::Object::createFromHostObject(
122
+ runtime, audioBufferHostObject);
123
+ jsiObject.setExternalMemoryPressure(
124
+ runtime, audioBufferHostObject->getSizeInBytes());
125
+ return jsiObject;
126
+ });
127
+ }).detach();
104
128
  });
129
+
130
+ return promise;
105
131
  }
106
132
 
107
133
  } // namespace audioapi
@@ -0,0 +1,58 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/HostObjects/utils/AudioStretcherHostObject.h>
5
+ #include <audioapi/core/utils/AudioStretcher.h>
6
+ #include <audioapi/jsi/JsiPromise.h>
7
+
8
+ #include <jsi/jsi.h>
9
+ #include <memory>
10
+ #include <string>
11
+ #include <thread>
12
+ #include <utility>
13
+
14
+ namespace audioapi {
15
+
16
+ AudioStretcherHostObject::AudioStretcherHostObject(
17
+ jsi::Runtime *runtime,
18
+ const std::shared_ptr<react::CallInvoker> &callInvoker) {
19
+ promiseVendor_ = std::make_shared<PromiseVendor>(runtime, callInvoker);
20
+ addFunctions(
21
+ JSI_EXPORT_FUNCTION(AudioStretcherHostObject, changePlaybackSpeed));
22
+ }
23
+
24
+ JSI_HOST_FUNCTION_IMPL(AudioStretcherHostObject, changePlaybackSpeed) {
25
+ auto audioBuffer =
26
+ args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
27
+ auto playbackSpeed = static_cast<float>(args[1].asNumber());
28
+
29
+ auto promise = promiseVendor_->createPromise(
30
+ [audioBuffer, playbackSpeed](std::shared_ptr<Promise> promise) {
31
+ std::thread([audioBuffer,
32
+ playbackSpeed,
33
+ promise = std::move(promise)]() {
34
+ auto result = AudioStretcher::changePlaybackSpeed(
35
+ *audioBuffer->audioBuffer_, playbackSpeed);
36
+
37
+ if (!result) {
38
+ promise->reject("Failed to change audio playback speed.");
39
+ return;
40
+ }
41
+
42
+ auto audioBufferHostObject =
43
+ std::make_shared<AudioBufferHostObject>(result);
44
+
45
+ promise->resolve([audioBufferHostObject = std::move(
46
+ audioBufferHostObject)](jsi::Runtime &runtime) {
47
+ auto jsiObject = jsi::Object::createFromHostObject(
48
+ runtime, audioBufferHostObject);
49
+ jsiObject.setExternalMemoryPressure(
50
+ runtime, audioBufferHostObject->getSizeInBytes());
51
+ return jsiObject;
52
+ });
53
+ }).detach();
54
+ });
55
+ return promise;
56
+ }
57
+
58
+ } // namespace audioapi
@@ -0,0 +1,26 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/core/utils/AudioStretcher.h>
5
+ #include <audioapi/jsi/JsiPromise.h>
6
+
7
+ #include <jsi/jsi.h>
8
+ #include <memory>
9
+ #include <string>
10
+ #include <thread>
11
+ #include <utility>
12
+
13
+ namespace audioapi {
14
+ using namespace facebook;
15
+
16
+ class AudioStretcherHostObject : public JsiHostObject {
17
+ public:
18
+ explicit AudioStretcherHostObject(
19
+ jsi::Runtime *runtime,
20
+ const std::shared_ptr<react::CallInvoker> &callInvoker);
21
+ JSI_HOST_FUNCTION_DECL(changePlaybackSpeed);
22
+
23
+ private:
24
+ std::shared_ptr<PromiseVendor> promiseVendor_;
25
+ };
26
+ } // namespace audioapi
@@ -1,7 +1,6 @@
1
1
  #pragma once
2
2
 
3
3
  #include <audioapi/core/types/AudioFormat.h>
4
- #include <audioapi/libs/audio-stretch/stretch.h>
5
4
  #include <audioapi/libs/miniaudio/miniaudio.h>
6
5
  #include <algorithm>
7
6
  #include <cstring>
@@ -0,0 +1,75 @@
1
+ #include <audioapi/core/sources/AudioBuffer.h>
2
+ #include <audioapi/core/utils/AudioStretcher.h>
3
+ #include <audioapi/core/utils/Constants.h>
4
+ #include <audioapi/libs/audio-stretch/stretch.h>
5
+ #include <audioapi/utils/AudioArray.h>
6
+ #include <audioapi/utils/AudioBus.h>
7
+ #include <cstdint>
8
+
9
+ namespace audioapi {
10
+
11
+ std::vector<int16_t> AudioStretcher::castToInt16Buffer(AudioBuffer &buffer) {
12
+ const size_t numChannels = buffer.getNumberOfChannels();
13
+ const size_t numFrames = buffer.getLength();
14
+
15
+ std::vector<int16_t> int16Buffer(numFrames * numChannels);
16
+
17
+ for (size_t ch = 0; ch < numChannels; ++ch) {
18
+ const float *channelData = buffer.getChannelData(ch);
19
+ for (size_t i = 0; i < numFrames; ++i) {
20
+ int16Buffer[i * numChannels + ch] = floatToInt16(channelData[i]);
21
+ }
22
+ }
23
+
24
+ return int16Buffer;
25
+ }
26
+
27
+ std::shared_ptr<AudioBuffer> AudioStretcher::changePlaybackSpeed(
28
+ AudioBuffer buffer,
29
+ float playbackSpeed) {
30
+ const float sampleRate = buffer.getSampleRate();
31
+ const size_t outputChannels = buffer.getNumberOfChannels();
32
+ const size_t numFrames = buffer.getLength();
33
+
34
+ if (playbackSpeed == 1.0f) {
35
+ return std::make_shared<AudioBuffer>(buffer);
36
+ }
37
+
38
+ std::vector<int16_t> int16Buffer = castToInt16Buffer(buffer);
39
+
40
+ auto stretcher = stretch_init(
41
+ static_cast<int>(sampleRate / UPPER_FREQUENCY_LIMIT_DETECTION),
42
+ static_cast<int>(sampleRate / LOWER_FREQUENCY_LIMIT_DETECTION),
43
+ outputChannels,
44
+ 0x1);
45
+
46
+ int maxOutputFrames = stretch_output_capacity(
47
+ stretcher, static_cast<int>(numFrames), 1 / playbackSpeed);
48
+ std::vector<int16_t> stretchedBuffer(maxOutputFrames * outputChannels);
49
+
50
+ int outputFrames = stretch_samples(
51
+ stretcher,
52
+ int16Buffer.data(),
53
+ static_cast<int>(numFrames),
54
+ stretchedBuffer.data(),
55
+ 1 / playbackSpeed);
56
+
57
+ outputFrames +=
58
+ stretch_flush(stretcher, stretchedBuffer.data() + (outputFrames));
59
+ stretchedBuffer.resize(outputFrames * outputChannels);
60
+ stretch_deinit(stretcher);
61
+
62
+ auto audioBus =
63
+ std::make_shared<AudioBus>(outputFrames, outputChannels, sampleRate);
64
+
65
+ for (int ch = 0; ch < outputChannels; ++ch) {
66
+ auto channelData = audioBus->getChannel(ch)->getData();
67
+ for (int i = 0; i < outputFrames; ++i) {
68
+ channelData[i] = int16ToFloat(stretchedBuffer[i * outputChannels + ch]);
69
+ }
70
+ }
71
+
72
+ return std::make_shared<AudioBuffer>(audioBus);
73
+ }
74
+
75
+ } // namespace audioapi
@@ -0,0 +1,30 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <vector>
5
+
6
+ namespace audioapi {
7
+
8
+ class AudioBus;
9
+ class AudioBuffer;
10
+
11
+ class AudioStretcher {
12
+ public:
13
+ AudioStretcher() = delete;
14
+
15
+ [[nodiscard]] static std::shared_ptr<AudioBuffer> changePlaybackSpeed(
16
+ AudioBuffer buffer,
17
+ float playbackSpeed);
18
+
19
+ private:
20
+ static std::vector<int16_t> castToInt16Buffer(AudioBuffer &buffer);
21
+
22
+ [[nodiscard]] static inline int16_t floatToInt16(float sample) {
23
+ return static_cast<int16_t>(sample * INT16_MAX);
24
+ }
25
+ [[nodiscard]] static inline float int16ToFloat(int16_t sample) {
26
+ return static_cast<float>(sample) / INT16_MAX;
27
+ }
28
+ };
29
+
30
+ } // namespace audioapi
@@ -10,6 +10,10 @@ namespace audioapi {
10
10
  static constexpr int RENDER_QUANTUM_SIZE = 128;
11
11
  static constexpr size_t MAX_FFT_SIZE = 32768;
12
12
 
13
+ // stretcher
14
+ static constexpr float UPPER_FREQUENCY_LIMIT_DETECTION = 333.0f;
15
+ static constexpr float LOWER_FREQUENCY_LIMIT_DETECTION = 55.0f;
16
+
13
17
  // general
14
18
  static constexpr float MOST_POSITIVE_SINGLE_FLOAT = static_cast<float>(std::numeric_limits<float>::max());
15
19
  static constexpr float MOST_NEGATIVE_SINGLE_FLOAT = static_cast<float>(std::numeric_limits<float>::lowest());
@@ -219,6 +219,12 @@ Object.defineProperty(exports, "WorkletSourceNode", {
219
219
  return _WorkletSourceNode.default;
220
220
  }
221
221
  });
222
+ Object.defineProperty(exports, "changePlaybackSpeed", {
223
+ enumerable: true,
224
+ get: function () {
225
+ return _AudioStretcher.default;
226
+ }
227
+ });
222
228
  Object.defineProperty(exports, "decodeAudioData", {
223
229
  enumerable: true,
224
230
  get: function () {
@@ -263,6 +269,7 @@ var _ConstantSourceNode = _interopRequireDefault(require("./core/ConstantSourceN
263
269
  var _system = _interopRequireDefault(require("./system"));
264
270
  var _useSystemVolume = _interopRequireDefault(require("./hooks/useSystemVolume"));
265
271
  var _AudioDecoder = require("./core/AudioDecoder");
272
+ var _AudioStretcher = _interopRequireDefault(require("./core/AudioStretcher"));
266
273
  var _types = require("./types");
267
274
  var _errors = require("./errors");
268
275
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -270,7 +277,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
270
277
 
271
278
  /* eslint-disable no-var */
272
279
 
273
- if (global.createAudioContext == null || global.createOfflineAudioContext == null || global.createAudioRecorder == null || global.createAudioDecoder == null || global.AudioEventEmitter == null) {
280
+ if (global.createAudioContext == null || global.createOfflineAudioContext == null || global.createAudioRecorder == null || global.createAudioDecoder == null || global.createAudioStretcher == null || global.AudioEventEmitter == null) {
274
281
  if (!_specs.NativeAudioAPIModule) {
275
282
  throw new Error(`Failed to install react-native-audio-api: The native module could not be found.`);
276
283
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_specs","require","_WorkletNode","_interopRequireDefault","_WorkletSourceNode","_WorkletProcessingNode","_RecorderAdapterNode","_AudioBuffer","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_StreamerNode","_ConstantSourceNode","_system","_useSystemVolume","_AudioDecoder","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAkDA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,sBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,oBAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,YAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,sBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,2BAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,oBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,qBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,UAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,aAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,yBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,iBAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,iBAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,SAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,eAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,iBAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,cAAA,GAAAnB,sBAAA,CAAAF,OAAA;AACA,IAAAsB,aAAA,GAAApB,sBAAA,CAAAF,OAAA;AACA,IAAAuB,mBAAA,GAAArB,sBAAA,CAAAF,OAAA;AACA,IAAAwB,OAAA,GAAAtB,sBAAA,CAAAF,OAAA;AACA,IAAAyB,gBAAA,GAAAvB,sBAAA,CAAAF,OAAA;AACA,IAAA0B,aAAA,GAAA1B,OAAA;AAEA,IAAA2B,MAAA,GAAA3B,OAAA;AAWA,IAAA4B,OAAA,GAAA5B,OAAA;AAMkB,SAAAE,uBAAA2B,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAnFlB;;AAsBA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,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","_WorkletNode","_interopRequireDefault","_WorkletSourceNode","_WorkletProcessingNode","_RecorderAdapterNode","_AudioBuffer","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_StreamerNode","_ConstantSourceNode","_system","_useSystemVolume","_AudioDecoder","_AudioStretcher","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAsDA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,sBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,oBAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,YAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,sBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,2BAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,oBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,qBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,UAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,aAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,yBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,iBAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,iBAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,SAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,eAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,iBAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,cAAA,GAAAnB,sBAAA,CAAAF,OAAA;AACA,IAAAsB,aAAA,GAAApB,sBAAA,CAAAF,OAAA;AACA,IAAAuB,mBAAA,GAAArB,sBAAA,CAAAF,OAAA;AACA,IAAAwB,OAAA,GAAAtB,sBAAA,CAAAF,OAAA;AACA,IAAAyB,gBAAA,GAAAvB,sBAAA,CAAAF,OAAA;AACA,IAAA0B,aAAA,GAAA1B,OAAA;AACA,IAAA2B,eAAA,GAAAzB,sBAAA,CAAAF,OAAA;AAEA,IAAA4B,MAAA,GAAA5B,OAAA;AAWA,IAAA6B,OAAA,GAAA7B,OAAA;AAMkB,SAAAE,uBAAA4B,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAvFlB;;AAwBA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,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":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = changePlaybackSpeed;
7
+ var _AudioBuffer = _interopRequireDefault(require("./AudioBuffer"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ class AudioStretcher {
10
+ static instance = null;
11
+ constructor() {
12
+ this.stretcher = global.createAudioStretcher();
13
+ }
14
+ static getInstance() {
15
+ if (!AudioStretcher.instance) {
16
+ AudioStretcher.instance = new AudioStretcher();
17
+ }
18
+ return AudioStretcher.instance;
19
+ }
20
+ async changePlaybackSpeedInstance(input, playbackSpeed) {
21
+ const buffer = await this.stretcher.changePlaybackSpeed(input.buffer, playbackSpeed);
22
+ if (!buffer) {
23
+ throw new Error('Failed to change playback speed');
24
+ }
25
+ return new _AudioBuffer.default(buffer);
26
+ }
27
+ }
28
+ async function changePlaybackSpeed(input, playbackSpeed) {
29
+ return AudioStretcher.getInstance().changePlaybackSpeedInstance(input, playbackSpeed);
30
+ }
31
+ //# sourceMappingURL=AudioStretcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_AudioBuffer","_interopRequireDefault","require","e","__esModule","default","AudioStretcher","instance","constructor","stretcher","global","createAudioStretcher","getInstance","changePlaybackSpeedInstance","input","playbackSpeed","buffer","changePlaybackSpeed","Error","AudioBuffer"],"sourceRoot":"../../../src","sources":["core/AudioStretcher.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAwC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExC,MAAMG,cAAc,CAAC;EACnB,OAAeC,QAAQ,GAA0B,IAAI;EAG7CC,WAAWA,CAAA,EAAG;IACpB,IAAI,CAACC,SAAS,GAAGC,MAAM,CAACC,oBAAoB,CAAC,CAAC;EAChD;EAEA,OAAcC,WAAWA,CAAA,EAAmB;IAC1C,IAAI,CAACN,cAAc,CAACC,QAAQ,EAAE;MAC5BD,cAAc,CAACC,QAAQ,GAAG,IAAID,cAAc,CAAC,CAAC;IAChD;IACA,OAAOA,cAAc,CAACC,QAAQ;EAChC;EAEA,MAAaM,2BAA2BA,CACtCC,KAAkB,EAClBC,aAAqB,EACC;IACtB,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACP,SAAS,CAACQ,mBAAmB,CACrDH,KAAK,CAACE,MAAM,EACZD,aACF,CAAC;IAED,IAAI,CAACC,MAAM,EAAE;MACX,MAAM,IAAIE,KAAK,CAAC,iCAAiC,CAAC;IACpD;IACA,OAAO,IAAIC,oBAAW,CAACH,MAAM,CAAC;EAChC;AACF;AAEe,eAAeC,mBAAmBA,CAC/CH,KAAkB,EAClBC,aAAqB,EACC;EACtB,OAAOT,cAAc,CAACM,WAAW,CAAC,CAAC,CAACC,2BAA2B,CAC7DC,KAAK,EACLC,aACF,CAAC;AACH","ignoreList":[]}
package/lib/module/api.js CHANGED
@@ -6,7 +6,7 @@ import { NativeAudioAPIModule } from "./specs/index.js";
6
6
 
7
7
  /* eslint-disable no-var */
8
8
 
9
- if (global.createAudioContext == null || global.createOfflineAudioContext == null || global.createAudioRecorder == null || global.createAudioDecoder == null || global.AudioEventEmitter == null) {
9
+ if (global.createAudioContext == null || global.createOfflineAudioContext == null || global.createAudioRecorder == null || global.createAudioDecoder == null || global.createAudioStretcher == null || global.AudioEventEmitter == null) {
10
10
  if (!NativeAudioAPIModule) {
11
11
  throw new Error(`Failed to install react-native-audio-api: The native module could not be found.`);
12
12
  }
@@ -37,6 +37,7 @@ export { default as ConstantSourceNode } from "./core/ConstantSourceNode.js";
37
37
  export { default as AudioManager } from "./system/index.js";
38
38
  export { default as useSystemVolume } from "./hooks/useSystemVolume.js";
39
39
  export { decodeAudioData, decodePCMInBase64 } from "./core/AudioDecoder.js";
40
+ export { default as changePlaybackSpeed } from "./core/AudioStretcher.js";
40
41
  export { OscillatorType, BiquadFilterType, ChannelCountMode, ChannelInterpretation, ContextState, WindowType, PeriodicWaveConstraints, AudioWorkletRuntime } from "./types.js";
41
42
  export { IndexSizeError, InvalidAccessError, InvalidStateError, RangeError, NotSupportedError } from "./errors/index.js";
42
43
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeAudioAPIModule","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","AudioEventEmitter","Error","install","default","WorkletNode","WorkletSourceNode","WorkletProcessingNode","RecorderAdapterNode","AudioBuffer","AudioBufferSourceNode","AudioBufferQueueSourceNode","AudioContext","OfflineAudioContext","AudioDestinationNode","AudioNode","AnalyserNode","AudioParam","AudioScheduledSourceNode","BaseAudioContext","BiquadFilterNode","GainNode","OscillatorNode","StereoPannerNode","AudioRecorder","StreamerNode","ConstantSourceNode","AudioManager","useSystemVolume","decodeAudioData","decodePCMInBase64","OscillatorType","BiquadFilterType","ChannelCountMode","ChannelInterpretation","ContextState","WindowType","PeriodicWaveConstraints","AudioWorkletRuntime","IndexSizeError","InvalidAccessError","InvalidStateError","RangeError","NotSupportedError"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,kBAAS;;AAU9C;;AAsBA;;AAEA,IACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACN,oBAAoB,EAAE;IACzB,MAAM,IAAIO,KAAK,CACb,iFACF,CAAC;EACH;EAEAP,oBAAoB,CAACQ,OAAO,CAAC,CAAC;AAChC;AAEA,SAASC,OAAO,IAAIC,WAAW,QAAQ,uBAAoB;AAC3D,SAASD,OAAO,IAAIE,iBAAiB,QAAQ,6BAA0B;AACvE,SAASF,OAAO,IAAIG,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASH,OAAO,IAAII,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASJ,OAAO,IAAIK,WAAW,QAAQ,uBAAoB;AAC3D,SAASL,OAAO,IAAIM,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASN,OAAO,IAAIO,0BAA0B,QAAQ,sCAAmC;AACzF,SAASP,OAAO,IAAIQ,YAAY,QAAQ,wBAAqB;AAC7D,SAASR,OAAO,IAAIS,mBAAmB,QAAQ,+BAA4B;AAC3E,SAAST,OAAO,IAAIU,oBAAoB,QAAQ,gCAA6B;AAC7E,SAASV,OAAO,IAAIW,SAAS,QAAQ,qBAAkB;AACvD,SAASX,OAAO,IAAIY,YAAY,QAAQ,wBAAqB;AAC7D,SAASZ,OAAO,IAAIa,UAAU,QAAQ,sBAAmB;AACzD,SAASb,OAAO,IAAIc,wBAAwB,QAAQ,oCAAiC;AACrF,SAASd,OAAO,IAAIe,gBAAgB,QAAQ,4BAAyB;AACrE,SAASf,OAAO,IAAIgB,gBAAgB,QAAQ,4BAAyB;AACrE,SAAShB,OAAO,IAAIiB,QAAQ,QAAQ,oBAAiB;AACrD,SAASjB,OAAO,IAAIkB,cAAc,QAAQ,0BAAuB;AACjE,SAASlB,OAAO,IAAImB,gBAAgB,QAAQ,4BAAyB;AACrE,SAASnB,OAAO,IAAIoB,aAAa,QAAQ,yBAAsB;AAC/D,SAASpB,OAAO,IAAIqB,YAAY,QAAQ,wBAAqB;AAC7D,SAASrB,OAAO,IAAIsB,kBAAkB,QAAQ,8BAA2B;AACzE,SAAStB,OAAO,IAAIuB,YAAY,QAAQ,mBAAU;AAClD,SAASvB,OAAO,IAAIwB,eAAe,QAAQ,4BAAyB;AACpE,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,wBAAqB;AAExE,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,YAAY,EACZC,UAAU,EACVC,uBAAuB,EACvBC,mBAAmB,QACd,YAAS;AAEhB,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAU,EACVC,iBAAiB,QACZ,mBAAU","ignoreList":[]}
1
+ {"version":3,"names":["NativeAudioAPIModule","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","Error","install","default","WorkletNode","WorkletSourceNode","WorkletProcessingNode","RecorderAdapterNode","AudioBuffer","AudioBufferSourceNode","AudioBufferQueueSourceNode","AudioContext","OfflineAudioContext","AudioDestinationNode","AudioNode","AnalyserNode","AudioParam","AudioScheduledSourceNode","BaseAudioContext","BiquadFilterNode","GainNode","OscillatorNode","StereoPannerNode","AudioRecorder","StreamerNode","ConstantSourceNode","AudioManager","useSystemVolume","decodeAudioData","decodePCMInBase64","changePlaybackSpeed","OscillatorType","BiquadFilterType","ChannelCountMode","ChannelInterpretation","ContextState","WindowType","PeriodicWaveConstraints","AudioWorkletRuntime","IndexSizeError","InvalidAccessError","InvalidStateError","RangeError","NotSupportedError"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,kBAAS;;AAW9C;;AAwBA;;AAEA,IACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACP,oBAAoB,EAAE;IACzB,MAAM,IAAIQ,KAAK,CACb,iFACF,CAAC;EACH;EAEAR,oBAAoB,CAACS,OAAO,CAAC,CAAC;AAChC;AAEA,SAASC,OAAO,IAAIC,WAAW,QAAQ,uBAAoB;AAC3D,SAASD,OAAO,IAAIE,iBAAiB,QAAQ,6BAA0B;AACvE,SAASF,OAAO,IAAIG,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASH,OAAO,IAAII,mBAAmB,QAAQ,+BAA4B;AAC3E,SAASJ,OAAO,IAAIK,WAAW,QAAQ,uBAAoB;AAC3D,SAASL,OAAO,IAAIM,qBAAqB,QAAQ,iCAA8B;AAC/E,SAASN,OAAO,IAAIO,0BAA0B,QAAQ,sCAAmC;AACzF,SAASP,OAAO,IAAIQ,YAAY,QAAQ,wBAAqB;AAC7D,SAASR,OAAO,IAAIS,mBAAmB,QAAQ,+BAA4B;AAC3E,SAAST,OAAO,IAAIU,oBAAoB,QAAQ,gCAA6B;AAC7E,SAASV,OAAO,IAAIW,SAAS,QAAQ,qBAAkB;AACvD,SAASX,OAAO,IAAIY,YAAY,QAAQ,wBAAqB;AAC7D,SAASZ,OAAO,IAAIa,UAAU,QAAQ,sBAAmB;AACzD,SAASb,OAAO,IAAIc,wBAAwB,QAAQ,oCAAiC;AACrF,SAASd,OAAO,IAAIe,gBAAgB,QAAQ,4BAAyB;AACrE,SAASf,OAAO,IAAIgB,gBAAgB,QAAQ,4BAAyB;AACrE,SAAShB,OAAO,IAAIiB,QAAQ,QAAQ,oBAAiB;AACrD,SAASjB,OAAO,IAAIkB,cAAc,QAAQ,0BAAuB;AACjE,SAASlB,OAAO,IAAImB,gBAAgB,QAAQ,4BAAyB;AACrE,SAASnB,OAAO,IAAIoB,aAAa,QAAQ,yBAAsB;AAC/D,SAASpB,OAAO,IAAIqB,YAAY,QAAQ,wBAAqB;AAC7D,SAASrB,OAAO,IAAIsB,kBAAkB,QAAQ,8BAA2B;AACzE,SAAStB,OAAO,IAAIuB,YAAY,QAAQ,mBAAU;AAClD,SAASvB,OAAO,IAAIwB,eAAe,QAAQ,4BAAyB;AACpE,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,wBAAqB;AACxE,SAAS1B,OAAO,IAAI2B,mBAAmB,QAAQ,0BAAuB;AAEtE,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,YAAY,EACZC,UAAU,EACVC,uBAAuB,EACvBC,mBAAmB,QACd,YAAS;AAEhB,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAU,EACVC,iBAAiB,QACZ,mBAAU","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ import AudioBuffer from "./AudioBuffer.js";
4
+ class AudioStretcher {
5
+ static instance = null;
6
+ constructor() {
7
+ this.stretcher = global.createAudioStretcher();
8
+ }
9
+ static getInstance() {
10
+ if (!AudioStretcher.instance) {
11
+ AudioStretcher.instance = new AudioStretcher();
12
+ }
13
+ return AudioStretcher.instance;
14
+ }
15
+ async changePlaybackSpeedInstance(input, playbackSpeed) {
16
+ const buffer = await this.stretcher.changePlaybackSpeed(input.buffer, playbackSpeed);
17
+ if (!buffer) {
18
+ throw new Error('Failed to change playback speed');
19
+ }
20
+ return new AudioBuffer(buffer);
21
+ }
22
+ }
23
+ export default async function changePlaybackSpeed(input, playbackSpeed) {
24
+ return AudioStretcher.getInstance().changePlaybackSpeedInstance(input, playbackSpeed);
25
+ }
26
+ //# sourceMappingURL=AudioStretcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AudioBuffer","AudioStretcher","instance","constructor","stretcher","global","createAudioStretcher","getInstance","changePlaybackSpeedInstance","input","playbackSpeed","buffer","changePlaybackSpeed","Error"],"sourceRoot":"../../../src","sources":["core/AudioStretcher.ts"],"mappings":";;AACA,OAAOA,WAAW,MAAM,kBAAe;AAEvC,MAAMC,cAAc,CAAC;EACnB,OAAeC,QAAQ,GAA0B,IAAI;EAG7CC,WAAWA,CAAA,EAAG;IACpB,IAAI,CAACC,SAAS,GAAGC,MAAM,CAACC,oBAAoB,CAAC,CAAC;EAChD;EAEA,OAAcC,WAAWA,CAAA,EAAmB;IAC1C,IAAI,CAACN,cAAc,CAACC,QAAQ,EAAE;MAC5BD,cAAc,CAACC,QAAQ,GAAG,IAAID,cAAc,CAAC,CAAC;IAChD;IACA,OAAOA,cAAc,CAACC,QAAQ;EAChC;EAEA,MAAaM,2BAA2BA,CACtCC,KAAkB,EAClBC,aAAqB,EACC;IACtB,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACP,SAAS,CAACQ,mBAAmB,CACrDH,KAAK,CAACE,MAAM,EACZD,aACF,CAAC;IAED,IAAI,CAACC,MAAM,EAAE;MACX,MAAM,IAAIE,KAAK,CAAC,iCAAiC,CAAC;IACpD;IACA,OAAO,IAAIb,WAAW,CAACW,MAAM,CAAC;EAChC;AACF;AAEA,eAAe,eAAeC,mBAAmBA,CAC/CH,KAAkB,EAClBC,aAAqB,EACC;EACtB,OAAOT,cAAc,CAACM,WAAW,CAAC,CAAC,CAACC,2BAA2B,CAC7DC,KAAK,EACLC,aACF,CAAC;AACH","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  import { AudioRecorderOptions } from './types';
2
- import type { IAudioContext, IAudioDecoder, IAudioRecorder, IOfflineAudioContext, IAudioEventEmitter } from './interfaces';
2
+ import type { IAudioContext, IAudioDecoder, IAudioRecorder, IAudioStretcher, IOfflineAudioContext, IAudioEventEmitter } from './interfaces';
3
3
  declare global {
4
4
  var createAudioContext: (sampleRate: number, initSuspended: boolean, audioWorkletRuntime: any) => IAudioContext;
5
5
  var createOfflineAudioContext: (numberOfChannels: number, length: number, sampleRate: number, audioWorkletRuntime: any) => IOfflineAudioContext;
6
6
  var createAudioRecorder: (options: AudioRecorderOptions) => IAudioRecorder;
7
7
  var createAudioDecoder: () => IAudioDecoder;
8
+ var createAudioStretcher: () => IAudioStretcher;
8
9
  var AudioEventEmitter: IAudioEventEmitter;
9
10
  }
10
11
  export { default as WorkletNode } from './core/WorkletNode';
@@ -32,6 +33,7 @@ export { default as ConstantSourceNode } from './core/ConstantSourceNode';
32
33
  export { default as AudioManager } from './system';
33
34
  export { default as useSystemVolume } from './hooks/useSystemVolume';
34
35
  export { decodeAudioData, decodePCMInBase64 } from './core/AudioDecoder';
36
+ export { default as changePlaybackSpeed } from './core/AudioStretcher';
35
37
  export { OscillatorType, BiquadFilterType, ChannelCountMode, ChannelInterpretation, ContextState, WindowType, PeriodicWaveConstraints, AudioWorkletRuntime, } from './types';
36
38
  export { IndexSizeError, InvalidAccessError, InvalidStateError, RangeError, NotSupportedError, } from './errors';
37
39
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import AudioBuffer from './AudioBuffer';
2
+ export default function changePlaybackSpeed(input: AudioBuffer, playbackSpeed: number): Promise<AudioBuffer>;
3
+ //# sourceMappingURL=AudioStretcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioStretcher.d.ts","sourceRoot":"","sources":["../../../src/core/AudioStretcher.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,eAAe,CAAC;AAiCxC,wBAA8B,mBAAmB,CAC/C,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAKtB"}
@@ -10,6 +10,7 @@ export interface IBaseAudioContext {
10
10
  readonly sampleRate: number;
11
11
  readonly currentTime: number;
12
12
  readonly decoder: IAudioDecoder;
13
+ readonly stretcher: IAudioStretcher;
13
14
  createRecorderAdapter(): IRecorderAdapterNode;
14
15
  createWorkletSourceNode(shareableWorklet: ShareableWorkletCallback, shouldUseUiRuntime: boolean): IWorkletSourceNode;
15
16
  createWorkletNode(shareableWorklet: ShareableWorkletCallback, shouldUseUiRuntime: boolean, bufferLength: number, inputChannelCount: number): IWorkletNode;
@@ -157,6 +158,9 @@ export interface IAudioDecoder {
157
158
  decodeWithFilePath: (sourcePath: string, sampleRate?: number) => Promise<IAudioBuffer>;
158
159
  decodeWithPCMInBase64: (b64: string, inputSampleRate: number, inputChannelCount: number, interleaved?: boolean) => Promise<IAudioBuffer>;
159
160
  }
161
+ export interface IAudioStretcher {
162
+ changePlaybackSpeed: (arrayBuffer: AudioBuffer, playbackSpeed: number) => Promise<IAudioBuffer>;
163
+ }
160
164
  export interface IAudioEventEmitter {
161
165
  addAudioEventListener<Name extends AudioEventName>(name: Name, callback: AudioEventCallback<Name>): string;
162
166
  removeAudioEventListener<Name extends AudioEventName>(name: Name, subscriptionId: string): void;
@@ -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.9.0-nightly-96a5bcd-20251007",
3
+ "version": "0.9.0-nightly-7ecb495-20251008",
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
@@ -4,6 +4,7 @@ import type {
4
4
  IAudioContext,
5
5
  IAudioDecoder,
6
6
  IAudioRecorder,
7
+ IAudioStretcher,
7
8
  IOfflineAudioContext,
8
9
  IAudioEventEmitter,
9
10
  } from './interfaces';
@@ -28,6 +29,8 @@ declare global {
28
29
 
29
30
  var createAudioDecoder: () => IAudioDecoder;
30
31
 
32
+ var createAudioStretcher: () => IAudioStretcher;
33
+
31
34
  var AudioEventEmitter: IAudioEventEmitter;
32
35
  }
33
36
  /* eslint-disable no-var */
@@ -37,6 +40,7 @@ if (
37
40
  global.createOfflineAudioContext == null ||
38
41
  global.createAudioRecorder == null ||
39
42
  global.createAudioDecoder == null ||
43
+ global.createAudioStretcher == null ||
40
44
  global.AudioEventEmitter == null
41
45
  ) {
42
46
  if (!NativeAudioAPIModule) {
@@ -73,6 +77,7 @@ export { default as ConstantSourceNode } from './core/ConstantSourceNode';
73
77
  export { default as AudioManager } from './system';
74
78
  export { default as useSystemVolume } from './hooks/useSystemVolume';
75
79
  export { decodeAudioData, decodePCMInBase64 } from './core/AudioDecoder';
80
+ export { default as changePlaybackSpeed } from './core/AudioStretcher';
76
81
 
77
82
  export {
78
83
  OscillatorType,
@@ -0,0 +1,43 @@
1
+ import { IAudioStretcher } from '../interfaces';
2
+ import AudioBuffer from './AudioBuffer';
3
+
4
+ class AudioStretcher {
5
+ private static instance: AudioStretcher | null = null;
6
+ protected readonly stretcher: IAudioStretcher;
7
+
8
+ private constructor() {
9
+ this.stretcher = global.createAudioStretcher();
10
+ }
11
+
12
+ public static getInstance(): AudioStretcher {
13
+ if (!AudioStretcher.instance) {
14
+ AudioStretcher.instance = new AudioStretcher();
15
+ }
16
+ return AudioStretcher.instance;
17
+ }
18
+
19
+ public async changePlaybackSpeedInstance(
20
+ input: AudioBuffer,
21
+ playbackSpeed: number
22
+ ): Promise<AudioBuffer> {
23
+ const buffer = await this.stretcher.changePlaybackSpeed(
24
+ input.buffer,
25
+ playbackSpeed
26
+ );
27
+
28
+ if (!buffer) {
29
+ throw new Error('Failed to change playback speed');
30
+ }
31
+ return new AudioBuffer(buffer);
32
+ }
33
+ }
34
+
35
+ export default async function changePlaybackSpeed(
36
+ input: AudioBuffer,
37
+ playbackSpeed: number
38
+ ): Promise<AudioBuffer> {
39
+ return AudioStretcher.getInstance().changePlaybackSpeedInstance(
40
+ input,
41
+ playbackSpeed
42
+ );
43
+ }
package/src/interfaces.ts CHANGED
@@ -38,6 +38,7 @@ export interface IBaseAudioContext {
38
38
  readonly sampleRate: number;
39
39
  readonly currentTime: number;
40
40
  readonly decoder: IAudioDecoder;
41
+ readonly stretcher: IAudioStretcher;
41
42
 
42
43
  createRecorderAdapter(): IRecorderAdapterNode;
43
44
  createWorkletSourceNode(
@@ -276,6 +277,13 @@ export interface IAudioDecoder {
276
277
  ) => Promise<IAudioBuffer>;
277
278
  }
278
279
 
280
+ export interface IAudioStretcher {
281
+ changePlaybackSpeed: (
282
+ arrayBuffer: AudioBuffer,
283
+ playbackSpeed: number
284
+ ) => Promise<IAudioBuffer>;
285
+ }
286
+
279
287
  export interface IAudioEventEmitter {
280
288
  addAudioEventListener<Name extends AudioEventName>(
281
289
  name: Name,