react-native-audio-api 0.6.1-rc.8 → 0.6.1-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +12 -1
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.h +2 -0
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +10 -0
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +6 -1
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -4
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +1 -1
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +2 -1
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +10 -0
- package/common/cpp/audioapi/core/AudioContext.cpp +30 -5
- package/common/cpp/audioapi/core/AudioContext.h +2 -1
- package/common/cpp/audioapi/core/AudioParam.cpp +5 -4
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +6 -10
- package/ios/audioapi/ios/AudioAPIModule.mm +9 -7
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -0
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +16 -0
- package/ios/audioapi/ios/core/NativeAudioPlayer.h +4 -0
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +15 -0
- package/ios/audioapi/ios/system/AudioEngine.h +1 -0
- package/ios/audioapi/ios/system/AudioEngine.mm +11 -1
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +2 -2
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +5 -3
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/module/api.js.map +1 -1
- package/lib/module/core/AudioContext.js +2 -2
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +5 -3
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/typescript/api.d.ts +1 -1
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +2 -1
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api.ts +4 -1
- package/src/core/AudioContext.ts +7 -2
- package/src/types.ts +2 -1
- package/src/web-core/AudioContext.tsx +7 -3
|
@@ -34,6 +34,18 @@ void AudioPlayer::start() {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
void AudioPlayer::stop() {
|
|
37
|
+
if (mStream_) {
|
|
38
|
+
mStream_->requestStop();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void AudioPlayer::resume() {
|
|
43
|
+
if (mStream_) {
|
|
44
|
+
mStream_->requestStart();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void AudioPlayer::suspend() {
|
|
37
49
|
if (mStream_) {
|
|
38
50
|
mStream_->requestPause();
|
|
39
51
|
}
|
|
@@ -43,7 +55,6 @@ void AudioPlayer::cleanup() {
|
|
|
43
55
|
isInitialized_ = false;
|
|
44
56
|
|
|
45
57
|
if (mStream_) {
|
|
46
|
-
mStream_->requestStop();
|
|
47
58
|
mStream_->close();
|
|
48
59
|
mStream_.reset();
|
|
49
60
|
}
|
|
@@ -53,8 +53,10 @@ class AudioAPIModule(
|
|
|
53
53
|
return true
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
@Synchronized
|
|
56
57
|
override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
|
|
57
58
|
|
|
59
|
+
@Synchronized
|
|
58
60
|
override fun setAudioSessionActivity(
|
|
59
61
|
enabled: Boolean,
|
|
60
62
|
promise: Promise?,
|
|
@@ -62,6 +64,7 @@ class AudioAPIModule(
|
|
|
62
64
|
// noting to do here
|
|
63
65
|
}
|
|
64
66
|
|
|
67
|
+
@Synchronized
|
|
65
68
|
override fun setAudioSessionOptions(
|
|
66
69
|
category: String?,
|
|
67
70
|
mode: String?,
|
|
@@ -70,14 +73,17 @@ class AudioAPIModule(
|
|
|
70
73
|
// noting to do here
|
|
71
74
|
}
|
|
72
75
|
|
|
76
|
+
@Synchronized
|
|
73
77
|
override fun setLockScreenInfo(info: ReadableMap?) {
|
|
74
78
|
MediaSessionManager.setLockScreenInfo(info)
|
|
75
79
|
}
|
|
76
80
|
|
|
81
|
+
@Synchronized
|
|
77
82
|
override fun resetLockScreenInfo() {
|
|
78
83
|
MediaSessionManager.resetLockScreenInfo()
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
@Synchronized
|
|
81
87
|
override fun enableRemoteCommand(
|
|
82
88
|
name: String?,
|
|
83
89
|
enabled: Boolean,
|
|
@@ -85,19 +91,23 @@ class AudioAPIModule(
|
|
|
85
91
|
MediaSessionManager.enableRemoteCommand(name!!, enabled)
|
|
86
92
|
}
|
|
87
93
|
|
|
94
|
+
@Synchronized
|
|
88
95
|
override fun observeAudioInterruptions(enabled: Boolean) {
|
|
89
96
|
MediaSessionManager.observeAudioInterruptions(enabled)
|
|
90
97
|
}
|
|
91
98
|
|
|
99
|
+
@Synchronized
|
|
92
100
|
override fun observeVolumeChanges(enabled: Boolean) {
|
|
93
101
|
MediaSessionManager.observeVolumeChanges(enabled)
|
|
94
102
|
}
|
|
95
103
|
|
|
104
|
+
@Synchronized
|
|
96
105
|
override fun requestRecordingPermissions(promise: Promise?) {
|
|
97
106
|
val res = MediaSessionManager.requestRecordingPermissions(currentActivity)
|
|
98
107
|
promise!!.resolve(res)
|
|
99
108
|
}
|
|
100
109
|
|
|
110
|
+
@Synchronized
|
|
101
111
|
override fun checkRecordingPermissions(promise: Promise?) {
|
|
102
112
|
val res = MediaSessionManager.checkRecordingPermissions()
|
|
103
113
|
promise!!.resolve(res)
|
|
@@ -254,7 +254,7 @@ class LockScreenManager(
|
|
|
254
254
|
return bitmap
|
|
255
255
|
}
|
|
256
256
|
|
|
257
|
-
fun updatePlaybackState(playbackState: Int) {
|
|
257
|
+
private fun updatePlaybackState(playbackState: Int) {
|
|
258
258
|
isPlaying = playbackState == PlaybackStateCompat.STATE_PLAYING
|
|
259
259
|
|
|
260
260
|
pb.setState(playbackState, elapsedTime, speed)
|
|
@@ -289,6 +289,11 @@ class LockScreenManager(
|
|
|
289
289
|
if (hasControl(PlaybackStateCompat.ACTION_REWIND)) {
|
|
290
290
|
controlCount += 1
|
|
291
291
|
}
|
|
292
|
+
|
|
293
|
+
if (hasControl(PlaybackStateCompat.ACTION_SEEK_TO)) {
|
|
294
|
+
controlCount += 1
|
|
295
|
+
}
|
|
296
|
+
|
|
292
297
|
val actions = IntArray(controlCount)
|
|
293
298
|
for (i in actions.indices) {
|
|
294
299
|
actions[i] = i
|
|
@@ -3,7 +3,6 @@ package com.swmansion.audioapi.system
|
|
|
3
3
|
import android.content.Intent
|
|
4
4
|
import android.os.Build
|
|
5
5
|
import android.support.v4.media.session.MediaSessionCompat
|
|
6
|
-
import android.support.v4.media.session.PlaybackStateCompat
|
|
7
6
|
import androidx.core.app.NotificationManagerCompat
|
|
8
7
|
import com.swmansion.audioapi.AudioAPIModule
|
|
9
8
|
import java.lang.ref.WeakReference
|
|
@@ -11,15 +10,12 @@ import java.util.HashMap
|
|
|
11
10
|
|
|
12
11
|
class MediaSessionCallback(
|
|
13
12
|
private val audioAPIModule: WeakReference<AudioAPIModule>,
|
|
14
|
-
private val lockScreenManager: WeakReference<LockScreenManager>,
|
|
15
13
|
) : MediaSessionCompat.Callback() {
|
|
16
14
|
override fun onPlay() {
|
|
17
|
-
lockScreenManager.get()?.updatePlaybackState(PlaybackStateCompat.STATE_PLAYING)
|
|
18
15
|
audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("remotePlay", mapOf())
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
override fun onPause() {
|
|
22
|
-
lockScreenManager.get()?.updatePlaybackState(PlaybackStateCompat.STATE_PAUSED)
|
|
23
19
|
audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("remotePause", mapOf())
|
|
24
20
|
}
|
|
25
21
|
|
|
@@ -81,7 +81,7 @@ object MediaSessionManager {
|
|
|
81
81
|
this.lockScreenManager = LockScreenManager(this.reactContext, WeakReference(this.mediaSession), WeakReference(mediaNotificationManager))
|
|
82
82
|
this.mediaReceiver =
|
|
83
83
|
MediaReceiver(this.reactContext, WeakReference(this.mediaSession), WeakReference(mediaNotificationManager), this.audioAPIModule)
|
|
84
|
-
this.mediaSession.setCallback(MediaSessionCallback(this.audioAPIModule
|
|
84
|
+
this.mediaSession.setCallback(MediaSessionCallback(this.audioAPIModule))
|
|
85
85
|
|
|
86
86
|
val filter = IntentFilter()
|
|
87
87
|
filter.addAction(MediaNotificationManager.REMOVE_NOTIFICATION)
|
|
@@ -45,7 +45,8 @@ class AudioAPIModuleInstaller {
|
|
|
45
45
|
size_t count) -> jsi::Value {
|
|
46
46
|
std::shared_ptr<AudioContext> audioContext;
|
|
47
47
|
auto sampleRate = static_cast<float>(args[0].getNumber());
|
|
48
|
-
|
|
48
|
+
auto initSuspended = args[1].getBool();
|
|
49
|
+
audioContext = std::make_shared<AudioContext>(sampleRate, initSuspended, audioEventHandlerRegistry);
|
|
49
50
|
|
|
50
51
|
auto audioContextHostObject = std::make_shared<AudioContextHostObject>(
|
|
51
52
|
audioContext, &runtime, jsCallInvoker);
|
|
@@ -45,6 +45,11 @@ class AudioContextHostObject : public BaseAudioContextHostObject {
|
|
|
45
45
|
auto audioContext = std::static_pointer_cast<AudioContext>(context_);
|
|
46
46
|
auto result = audioContext->resume();
|
|
47
47
|
|
|
48
|
+
if (!result) {
|
|
49
|
+
promise->reject("Failed to resume audio context because it is already closed.");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
48
53
|
promise->resolve([result](jsi::Runtime &runtime) {
|
|
49
54
|
return jsi::Value(result);
|
|
50
55
|
});
|
|
@@ -60,6 +65,11 @@ class AudioContextHostObject : public BaseAudioContextHostObject {
|
|
|
60
65
|
auto audioContext = std::static_pointer_cast<AudioContext>(context_);
|
|
61
66
|
auto result = audioContext->suspend();
|
|
62
67
|
|
|
68
|
+
if (!result) {
|
|
69
|
+
promise->reject("Failed to suspend audio context because it is already closed.");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
63
73
|
promise->resolve([result](jsi::Runtime &runtime) {
|
|
64
74
|
return jsi::Value(result);
|
|
65
75
|
});
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
namespace audioapi {
|
|
13
13
|
AudioContext::AudioContext(
|
|
14
14
|
float sampleRate,
|
|
15
|
+
bool initSuspended,
|
|
15
16
|
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry)
|
|
16
17
|
: BaseAudioContext(audioEventHandlerRegistry) {
|
|
17
18
|
#ifdef ANDROID
|
|
@@ -24,8 +25,16 @@ AudioContext::AudioContext(
|
|
|
24
25
|
sampleRate_ = sampleRate;
|
|
25
26
|
audioDecoder_ = std::make_shared<AudioDecoder>(sampleRate);
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
if (initSuspended) {
|
|
29
|
+
playerHasBeenStarted_ = false;
|
|
30
|
+
state_ = ContextState::SUSPENDED;
|
|
31
|
+
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
playerHasBeenStarted_ = true;
|
|
28
36
|
audioPlayer_->start();
|
|
37
|
+
state_ = ContextState::RUNNING;
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
AudioContext::~AudioContext() {
|
|
@@ -37,27 +46,43 @@ AudioContext::~AudioContext() {
|
|
|
37
46
|
void AudioContext::close() {
|
|
38
47
|
state_ = ContextState::CLOSED;
|
|
39
48
|
|
|
49
|
+
audioPlayer_->stop();
|
|
40
50
|
audioPlayer_->cleanup();
|
|
41
51
|
nodeManager_->cleanup();
|
|
42
52
|
}
|
|
43
53
|
|
|
44
54
|
bool AudioContext::resume() {
|
|
45
|
-
if (isClosed()
|
|
55
|
+
if (isClosed()) {
|
|
46
56
|
return false;
|
|
47
57
|
}
|
|
48
58
|
|
|
59
|
+
if (isRunning()) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!playerHasBeenStarted_) {
|
|
64
|
+
playerHasBeenStarted_ = true;
|
|
65
|
+
audioPlayer_->start();
|
|
66
|
+
} else {
|
|
67
|
+
audioPlayer_->resume();
|
|
68
|
+
}
|
|
69
|
+
|
|
49
70
|
state_ = ContextState::RUNNING;
|
|
50
|
-
audioPlayer_->start();
|
|
51
71
|
return true;
|
|
52
72
|
}
|
|
53
73
|
|
|
54
74
|
bool AudioContext::suspend() {
|
|
55
|
-
if (isClosed()
|
|
75
|
+
if (isClosed()) {
|
|
56
76
|
return false;
|
|
57
77
|
}
|
|
58
78
|
|
|
79
|
+
if (isSuspended()) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
audioPlayer_->suspend();
|
|
84
|
+
|
|
59
85
|
state_ = ContextState::SUSPENDED;
|
|
60
|
-
audioPlayer_->stop();
|
|
61
86
|
return true;
|
|
62
87
|
}
|
|
63
88
|
|
|
@@ -14,7 +14,7 @@ class IOSAudioPlayer;
|
|
|
14
14
|
|
|
15
15
|
class AudioContext : public BaseAudioContext {
|
|
16
16
|
public:
|
|
17
|
-
explicit AudioContext(float sampleRate, const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
|
|
17
|
+
explicit AudioContext(float sampleRate, bool initSuspended, const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
|
|
18
18
|
~AudioContext() override;
|
|
19
19
|
|
|
20
20
|
void close();
|
|
@@ -27,6 +27,7 @@ class AudioContext : public BaseAudioContext {
|
|
|
27
27
|
#else
|
|
28
28
|
std::shared_ptr<IOSAudioPlayer> audioPlayer_;
|
|
29
29
|
#endif
|
|
30
|
+
bool playerHasBeenStarted_;
|
|
30
31
|
|
|
31
32
|
std::function<void(std::shared_ptr<AudioBus>, int)> renderAudio();
|
|
32
33
|
};
|
|
@@ -17,10 +17,11 @@ AudioParam::AudioParam(
|
|
|
17
17
|
minValue_(minValue),
|
|
18
18
|
maxValue_(maxValue),
|
|
19
19
|
context_(context),
|
|
20
|
-
audioBus_(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
audioBus_(
|
|
21
|
+
std::make_shared<AudioBus>(
|
|
22
|
+
RENDER_QUANTUM_SIZE,
|
|
23
|
+
1,
|
|
24
|
+
context->getSampleRate())) {
|
|
24
25
|
startTime_ = 0;
|
|
25
26
|
endTime_ = 0;
|
|
26
27
|
startValue_ = value_;
|
|
@@ -152,7 +152,11 @@ void AudioBufferQueueSourceNode::processWithPitchCorrection(
|
|
|
152
152
|
|
|
153
153
|
playbackRateBus_->zero();
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
auto framesNeededToStretch =
|
|
156
|
+
static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
|
|
157
|
+
|
|
158
|
+
updatePlaybackInfo(
|
|
159
|
+
playbackRateBus_, framesNeededToStretch, startOffset, offsetLength);
|
|
156
160
|
|
|
157
161
|
if (playbackRate == 0.0f || (!isPlaying() && !isStopScheduled())) {
|
|
158
162
|
processingBus->zero();
|
|
@@ -162,15 +166,7 @@ void AudioBufferQueueSourceNode::processWithPitchCorrection(
|
|
|
162
166
|
// Send position changed event
|
|
163
167
|
sendOnPositionChangedEvent();
|
|
164
168
|
|
|
165
|
-
|
|
166
|
-
static_cast<int>(playbackRate * static_cast<float>(framesToProcess));
|
|
167
|
-
auto stretchedStartOffset =
|
|
168
|
-
static_cast<size_t>(static_cast<float>(startOffset) * playbackRate);
|
|
169
|
-
auto stretchedOffsetLength =
|
|
170
|
-
static_cast<size_t>(static_cast<float>(offsetLength) * playbackRate);
|
|
171
|
-
|
|
172
|
-
processWithoutInterpolation(
|
|
173
|
-
playbackRateBus_, stretchedStartOffset, stretchedOffsetLength);
|
|
169
|
+
processWithoutInterpolation(playbackRateBus_, startOffset, offsetLength);
|
|
174
170
|
|
|
175
171
|
stretch_->process(
|
|
176
172
|
playbackRateBus_.get()[0],
|
|
@@ -85,8 +85,9 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
|
|
|
85
85
|
return [self.audioSessionManager getDevicePreferredSampleRate];
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
RCT_EXPORT_METHOD(
|
|
89
|
-
|
|
88
|
+
RCT_EXPORT_METHOD(
|
|
89
|
+
setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)
|
|
90
|
+
reject)
|
|
90
91
|
{
|
|
91
92
|
if ([self.audioSessionManager setActive:enabled]) {
|
|
92
93
|
resolve(@"true");
|
|
@@ -126,15 +127,16 @@ RCT_EXPORT_METHOD(observeVolumeChanges : (BOOL)enabled)
|
|
|
126
127
|
[self.notificationManager observeVolumeChanges:(BOOL)enabled];
|
|
127
128
|
}
|
|
128
129
|
|
|
129
|
-
RCT_EXPORT_METHOD(
|
|
130
|
-
|
|
130
|
+
RCT_EXPORT_METHOD(
|
|
131
|
+
requestRecordingPermissions : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)
|
|
132
|
+
reject)
|
|
131
133
|
{
|
|
132
134
|
NSString *res = [self.audioSessionManager requestRecordingPermissions];
|
|
133
135
|
resolve(res);
|
|
134
136
|
}
|
|
135
137
|
|
|
136
|
-
RCT_EXPORT_METHOD(
|
|
137
|
-
|
|
138
|
+
RCT_EXPORT_METHOD(
|
|
139
|
+
checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
138
140
|
{
|
|
139
141
|
NSString *res = [self.audioSessionManager checkRecordingPermissions];
|
|
140
142
|
resolve(res);
|
|
@@ -169,7 +171,7 @@ RCT_EXPORT_METHOD(checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)
|
|
|
169
171
|
body[stdKey] = EventValue([value doubleValue]);
|
|
170
172
|
} else if (strcmp(type, @encode(float)) == 0) {
|
|
171
173
|
body[stdKey] = EventValue([value floatValue]);
|
|
172
|
-
} else
|
|
174
|
+
} else {
|
|
173
175
|
body[stdKey] = EventValue([value boolValue]);
|
|
174
176
|
}
|
|
175
177
|
}
|
|
@@ -62,6 +62,22 @@ void IOSAudioPlayer::stop()
|
|
|
62
62
|
[audioPlayer_ stop];
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
void IOSAudioPlayer::resume()
|
|
66
|
+
{
|
|
67
|
+
if (isRunning_.load()) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
[audioPlayer_ resume];
|
|
72
|
+
isRunning_.store(true);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void IOSAudioPlayer::suspend()
|
|
76
|
+
{
|
|
77
|
+
isRunning_.store(false);
|
|
78
|
+
[audioPlayer_ suspend];
|
|
79
|
+
}
|
|
80
|
+
|
|
65
81
|
void IOSAudioPlayer::cleanup()
|
|
66
82
|
{
|
|
67
83
|
stop();
|
|
@@ -51,6 +51,21 @@
|
|
|
51
51
|
self.sourceNodeId = nil;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
- (void)resume
|
|
55
|
+
{
|
|
56
|
+
NSLog(@"[AudioPlayer] resume");
|
|
57
|
+
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
58
|
+
assert(audioEngine != nil);
|
|
59
|
+
[audioEngine startEngine];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
- (void)suspend
|
|
63
|
+
{
|
|
64
|
+
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
65
|
+
assert(audioEngine != nil);
|
|
66
|
+
[audioEngine pauseEngine];
|
|
67
|
+
}
|
|
68
|
+
|
|
54
69
|
- (void)cleanup
|
|
55
70
|
{
|
|
56
71
|
self.renderAudio = nil;
|
|
@@ -20,7 +20,6 @@ static AudioEngine *_sharedInstance = nil;
|
|
|
20
20
|
self.sourceFormats = [[NSMutableDictionary alloc] init];
|
|
21
21
|
|
|
22
22
|
self.sessionManager = sessionManager;
|
|
23
|
-
[self.sessionManager setActive:true];
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
_sharedInstance = self;
|
|
@@ -76,6 +75,7 @@ static AudioEngine *_sharedInstance = nil;
|
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
[self.audioEngine startAndReturnError:&error];
|
|
78
|
+
[self.sessionManager setActive:true];
|
|
79
79
|
|
|
80
80
|
if (error != nil) {
|
|
81
81
|
NSLog(@"Error while starting the audio engine: %@", [error debugDescription]);
|
|
@@ -92,6 +92,16 @@ static AudioEngine *_sharedInstance = nil;
|
|
|
92
92
|
[self.audioEngine stop];
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
+
- (void)pauseEngine
|
|
96
|
+
{
|
|
97
|
+
NSLog(@"[AudioEngine] pauseEngine");
|
|
98
|
+
if (![self.audioEngine isRunning]) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[self.audioEngine pause];
|
|
103
|
+
}
|
|
104
|
+
|
|
95
105
|
- (bool)isRunning
|
|
96
106
|
{
|
|
97
107
|
return [self.audioEngine isRunning];
|
package/lib/commonjs/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_specs","require","_AudioBuffer","_interopRequireDefault","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_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;
|
|
1
|
+
{"version":3,"names":["_specs","require","_AudioBuffer","_interopRequireDefault","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_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,SAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,eAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,iBAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,cAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,OAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,eAAA,GAAAjB,sBAAA,CAAAF,OAAA;AAEA,IAAAoB,MAAA,GAAApB,OAAA;AAUA,IAAAqB,OAAA,GAAArB,OAAA;AAMkB,SAAAE,uBAAAoB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AApElB;;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":[]}
|
|
@@ -10,10 +10,10 @@ var _errors = require("../errors");
|
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
class AudioContext extends _BaseAudioContext.default {
|
|
12
12
|
constructor(options) {
|
|
13
|
-
if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
13
|
+
if (options && options.sampleRate && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
14
14
|
throw new _errors.NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
|
|
15
15
|
}
|
|
16
|
-
super(global.createAudioContext(options?.sampleRate || _system.default.getDevicePreferredSampleRate()));
|
|
16
|
+
super(global.createAudioContext(options?.sampleRate || _system.default.getDevicePreferredSampleRate(), options?.initSuspended || false));
|
|
17
17
|
}
|
|
18
18
|
async close() {
|
|
19
19
|
await this.context.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_system","_errors","e","__esModule","default","AudioContext","BaseAudioContext","constructor","options","sampleRate","NotSupportedError","global","createAudioContext","AudioManager","getDevicePreferredSampleRate","close","context","resume","suspend","exports"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAA8C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE/B,MAAMG,YAAY,SAASC,yBAAgB,CAAC;EACzDC,WAAWA,CAACC,OAA6B,EAAE;IACzC,
|
|
1
|
+
{"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_system","_errors","e","__esModule","default","AudioContext","BaseAudioContext","constructor","options","sampleRate","NotSupportedError","global","createAudioContext","AudioManager","getDevicePreferredSampleRate","initSuspended","close","context","resume","suspend","exports"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAA8C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE/B,MAAMG,YAAY,SAASC,yBAAgB,CAAC;EACzDC,WAAWA,CAACC,OAA6B,EAAE;IACzC,IACEA,OAAO,IACPA,OAAO,CAACC,UAAU,KACjBD,OAAO,CAACC,UAAU,GAAG,IAAI,IAAID,OAAO,CAACC,UAAU,GAAG,KAAK,CAAC,EACzD;MACA,MAAM,IAAIC,yBAAiB,CACzB,6CAA6CF,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IAEA,KAAK,CACHE,MAAM,CAACC,kBAAkB,CACvBJ,OAAO,EAAEC,UAAU,IAAII,eAAY,CAACC,4BAA4B,CAAC,CAAC,EAClEN,OAAO,EAAEO,aAAa,IAAI,KAC5B,CACF,CAAC;EACH;EAEA,MAAMC,KAAKA,CAAA,EAAuB;IAChC,MAAO,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAC/C;EAEA,MAAME,MAAMA,CAAA,EAAuB;IACjC,MAAO,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EAChD;EAEA,MAAMC,OAAOA,CAAA,EAAuB;IAClC,MAAO,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EACjD;AACF;AAACC,OAAA,CAAAhB,OAAA,GAAAC,YAAA","ignoreList":[]}
|
|
@@ -17,11 +17,13 @@ var _StereoPannerNode = _interopRequireDefault(require("./StereoPannerNode"));
|
|
|
17
17
|
var _LoadCustomWasm = require("./custom/LoadCustomWasm");
|
|
18
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
19
|
class AudioContext {
|
|
20
|
-
constructor(options) {
|
|
21
|
-
if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
20
|
+
constructor(options, _initSuspended = false) {
|
|
21
|
+
if (options && options.sampleRate && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
22
22
|
throw new _errors.NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
|
|
23
23
|
}
|
|
24
|
-
this.context = new window.AudioContext(
|
|
24
|
+
this.context = new window.AudioContext({
|
|
25
|
+
sampleRate: options?.sampleRate
|
|
26
|
+
});
|
|
25
27
|
this.sampleRate = this.context.sampleRate;
|
|
26
28
|
this.destination = new _AudioDestinationNode.default(this, this.context.destination);
|
|
27
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_errors","require","_AnalyserNode","_interopRequireDefault","_AudioDestinationNode","_AudioBuffer","_AudioBufferSourceNode","_BiquadFilterNode","_GainNode","_OscillatorNode","_PeriodicWave","_StereoPannerNode","_LoadCustomWasm","e","__esModule","default","AudioContext","constructor","options","sampleRate","NotSupportedError","context","window","destination","AudioDestinationNode","currentTime","state","createOscillator","OscillatorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","pitchCorrection","AudioBufferSourceNode","globalWasmPromise","wasmStretch","globalTag","createBuffer","numOfChannels","length","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","source","arrayBuffer","fetch","then","response","decodeAudioData","close","resume","suspend","exports"],"sourceRoot":"../../../src","sources":["web-core/AudioContext.tsx"],"mappings":";;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,YAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,sBAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,iBAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,SAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,eAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,iBAAA,GAAAR,sBAAA,CAAAF,OAAA;AAEA,IAAAW,eAAA,GAAAX,OAAA;AAAuE,SAAAE,uBAAAU,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExD,MAAMG,YAAY,CAA6B;EAM5DC,WAAWA,CAACC,OAA6B,EAAE;
|
|
1
|
+
{"version":3,"names":["_errors","require","_AnalyserNode","_interopRequireDefault","_AudioDestinationNode","_AudioBuffer","_AudioBufferSourceNode","_BiquadFilterNode","_GainNode","_OscillatorNode","_PeriodicWave","_StereoPannerNode","_LoadCustomWasm","e","__esModule","default","AudioContext","constructor","options","_initSuspended","sampleRate","NotSupportedError","context","window","destination","AudioDestinationNode","currentTime","state","createOscillator","OscillatorNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","pitchCorrection","AudioBufferSourceNode","globalWasmPromise","wasmStretch","globalTag","createBuffer","numOfChannels","length","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","PeriodicWave","createAnalyser","AnalyserNode","decodeAudioDataSource","source","arrayBuffer","fetch","then","response","decodeAudioData","close","resume","suspend","exports"],"sourceRoot":"../../../src","sources":["web-core/AudioContext.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/api.js.map
CHANGED
|
@@ -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","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;;
|
|
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","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,QAAQ,QAAQ,oBAAiB;AACrD,SAASb,OAAO,IAAIc,cAAc,QAAQ,0BAAuB;AACjE,SAASd,OAAO,IAAIe,gBAAgB,QAAQ,4BAAyB;AACrE,SAASf,OAAO,IAAIgB,aAAa,QAAQ,yBAAsB;AAC/D,SAAShB,OAAO,IAAIiB,YAAY,QAAQ,mBAAU;AAClD,SAASjB,OAAO,IAAIkB,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":[]}
|
|
@@ -5,10 +5,10 @@ import AudioManager from "../system/index.js";
|
|
|
5
5
|
import { NotSupportedError } from "../errors/index.js";
|
|
6
6
|
export default class AudioContext extends BaseAudioContext {
|
|
7
7
|
constructor(options) {
|
|
8
|
-
if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
8
|
+
if (options && options.sampleRate && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
9
9
|
throw new NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
|
|
10
10
|
}
|
|
11
|
-
super(global.createAudioContext(options?.sampleRate || AudioManager.getDevicePreferredSampleRate()));
|
|
11
|
+
super(global.createAudioContext(options?.sampleRate || AudioManager.getDevicePreferredSampleRate(), options?.initSuspended || false));
|
|
12
12
|
}
|
|
13
13
|
async close() {
|
|
14
14
|
await this.context.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BaseAudioContext","AudioManager","NotSupportedError","AudioContext","constructor","options","sampleRate","global","createAudioContext","getDevicePreferredSampleRate","close","context","resume","suspend"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;AACA,OAAOA,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,YAAY,MAAM,oBAAW;AAEpC,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,YAAY,SAASH,gBAAgB,CAAC;EACzDI,WAAWA,CAACC,OAA6B,EAAE;IACzC,
|
|
1
|
+
{"version":3,"names":["BaseAudioContext","AudioManager","NotSupportedError","AudioContext","constructor","options","sampleRate","global","createAudioContext","getDevicePreferredSampleRate","initSuspended","close","context","resume","suspend"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;AACA,OAAOA,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,YAAY,MAAM,oBAAW;AAEpC,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,YAAY,SAASH,gBAAgB,CAAC;EACzDI,WAAWA,CAACC,OAA6B,EAAE;IACzC,IACEA,OAAO,IACPA,OAAO,CAACC,UAAU,KACjBD,OAAO,CAACC,UAAU,GAAG,IAAI,IAAID,OAAO,CAACC,UAAU,GAAG,KAAK,CAAC,EACzD;MACA,MAAM,IAAIJ,iBAAiB,CACzB,6CAA6CG,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBH,OAAO,EAAEC,UAAU,IAAIL,YAAY,CAACQ,4BAA4B,CAAC,CAAC,EAClEJ,OAAO,EAAEK,aAAa,IAAI,KAC5B,CACF,CAAC;EACH;EAEA,MAAMC,KAAKA,CAAA,EAAuB;IAChC,MAAO,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAC/C;EAEA,MAAME,MAAMA,CAAA,EAAuB;IACjC,MAAO,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EAChD;EAEA,MAAMC,OAAOA,CAAA,EAAuB;IAClC,MAAO,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EACjD;AACF","ignoreList":[]}
|
|
@@ -12,11 +12,13 @@ import PeriodicWave from "./PeriodicWave.js";
|
|
|
12
12
|
import StereoPannerNode from "./StereoPannerNode.js";
|
|
13
13
|
import { globalWasmPromise, globalTag } from "./custom/LoadCustomWasm.js";
|
|
14
14
|
export default class AudioContext {
|
|
15
|
-
constructor(options) {
|
|
16
|
-
if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
15
|
+
constructor(options, _initSuspended = false) {
|
|
16
|
+
if (options && options.sampleRate && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
17
17
|
throw new NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
|
|
18
18
|
}
|
|
19
|
-
this.context = new window.AudioContext(
|
|
19
|
+
this.context = new window.AudioContext({
|
|
20
|
+
sampleRate: options?.sampleRate
|
|
21
|
+
});
|
|
20
22
|
this.sampleRate = this.context.sampleRate;
|
|
21
23
|
this.destination = new AudioDestinationNode(this, this.context.destination);
|
|
22
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["InvalidAccessError","NotSupportedError","AnalyserNode","AudioDestinationNode","AudioBuffer","AudioBufferSourceNode","BiquadFilterNode","GainNode","OscillatorNode","PeriodicWave","StereoPannerNode","globalWasmPromise","globalTag","AudioContext","constructor","options","sampleRate","context","window","destination","currentTime","state","createOscillator","createGain","createStereoPanner","createBiquadFilter","createBufferSource","pitchCorrection","wasmStretch","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","createAnalyser","decodeAudioDataSource","source","arrayBuffer","fetch","then","response","decodeAudioData","close","resume","suspend"],"sourceRoot":"../../../src","sources":["web-core/AudioContext.tsx"],"mappings":";;AAMA,SAASA,kBAAkB,EAAEC,iBAAiB,QAAQ,oBAAW;AAEjE,OAAOC,YAAY,MAAM,mBAAgB;AACzC,OAAOC,oBAAoB,MAAM,2BAAwB;AACzD,OAAOC,WAAW,MAAM,kBAAe;AACvC,OAAOC,qBAAqB,MAAM,4BAAyB;AAC3D,OAAOC,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,QAAQ,MAAM,eAAY;AACjC,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,OAAOC,YAAY,MAAM,mBAAgB;AACzC,OAAOC,gBAAgB,MAAM,uBAAoB;AAEjD,SAASC,iBAAiB,EAAEC,SAAS,QAAQ,4BAAyB;AAEtE,eAAe,MAAMC,YAAY,CAA6B;EAM5DC,WAAWA,CAACC,OAA6B,EAAE;
|
|
1
|
+
{"version":3,"names":["InvalidAccessError","NotSupportedError","AnalyserNode","AudioDestinationNode","AudioBuffer","AudioBufferSourceNode","BiquadFilterNode","GainNode","OscillatorNode","PeriodicWave","StereoPannerNode","globalWasmPromise","globalTag","AudioContext","constructor","options","_initSuspended","sampleRate","context","window","destination","currentTime","state","createOscillator","createGain","createStereoPanner","createBiquadFilter","createBufferSource","pitchCorrection","wasmStretch","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","createAnalyser","decodeAudioDataSource","source","arrayBuffer","fetch","then","response","decodeAudioData","close","resume","suspend"],"sourceRoot":"../../../src","sources":["web-core/AudioContext.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/typescript/api.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AudioRecorderOptions } from './types';
|
|
2
2
|
import type { IAudioContext, IAudioRecorder, IOfflineAudioContext, IAudioEventEmitter } from './interfaces';
|
|
3
3
|
declare global {
|
|
4
|
-
var createAudioContext: (sampleRate
|
|
4
|
+
var createAudioContext: (sampleRate: number, initSuspended: boolean) => IAudioContext;
|
|
5
5
|
var createOfflineAudioContext: (numberOfChannels: number, length: number, sampleRate: number) => IOfflineAudioContext;
|
|
6
6
|
var createAudioRecorder: (options: AudioRecorderOptions) => IAudioRecorder;
|
|
7
7
|
var AudioEventEmitter: IAudioEventEmitter;
|
|
@@ -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,
|
|
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,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/AudioContext.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,gBAAgB;gBAC5C,OAAO,CAAC,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/AudioContext.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,gBAAgB;gBAC5C,OAAO,CAAC,EAAE,mBAAmB;IAmBnC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IAI3B,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;CAGpC"}
|
|
@@ -7,7 +7,8 @@ export interface PeriodicWaveConstraints {
|
|
|
7
7
|
disableNormalization: boolean;
|
|
8
8
|
}
|
|
9
9
|
export interface AudioContextOptions {
|
|
10
|
-
sampleRate
|
|
10
|
+
sampleRate?: number;
|
|
11
|
+
initSuspended?: boolean;
|
|
11
12
|
}
|
|
12
13
|
export interface OfflineAudioContextOptions {
|
|
13
14
|
numberOfChannels: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,OAAO,CAAC;CAC1B"}
|
|
@@ -13,7 +13,7 @@ export default class AudioContext implements BaseAudioContext {
|
|
|
13
13
|
readonly context: globalThis.AudioContext;
|
|
14
14
|
readonly destination: AudioDestinationNode;
|
|
15
15
|
readonly sampleRate: number;
|
|
16
|
-
constructor(options?: AudioContextOptions);
|
|
16
|
+
constructor(options?: AudioContextOptions, _initSuspended?: boolean);
|
|
17
17
|
get currentTime(): number;
|
|
18
18
|
get state(): ContextState;
|
|
19
19
|
createOscillator(): OscillatorNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC;IAE1C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,CAAC,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC;IAE1C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,CAAC,EAAE,mBAAmB,EAAE,cAAc,GAAE,OAAe;IAiB1E,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAIhC,kBAAkB,CACtB,OAAO,CAAC,EAAE,4BAA4B,GACrC,OAAO,CAAC,qBAAqB,CAAC;IAgBjC,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;IAYf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.6.1-rc.
|
|
3
|
+
"version": "0.6.1-rc.9",
|
|
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
|
@@ -9,7 +9,10 @@ import type {
|
|
|
9
9
|
|
|
10
10
|
/* eslint-disable no-var */
|
|
11
11
|
declare global {
|
|
12
|
-
var createAudioContext: (
|
|
12
|
+
var createAudioContext: (
|
|
13
|
+
sampleRate: number,
|
|
14
|
+
initSuspended: boolean
|
|
15
|
+
) => IAudioContext;
|
|
13
16
|
var createOfflineAudioContext: (
|
|
14
17
|
numberOfChannels: number,
|
|
15
18
|
length: number,
|
package/src/core/AudioContext.ts
CHANGED
|
@@ -6,7 +6,11 @@ import { NotSupportedError } from '../errors';
|
|
|
6
6
|
|
|
7
7
|
export default class AudioContext extends BaseAudioContext {
|
|
8
8
|
constructor(options?: AudioContextOptions) {
|
|
9
|
-
if (
|
|
9
|
+
if (
|
|
10
|
+
options &&
|
|
11
|
+
options.sampleRate &&
|
|
12
|
+
(options.sampleRate < 8000 || options.sampleRate > 96000)
|
|
13
|
+
) {
|
|
10
14
|
throw new NotSupportedError(
|
|
11
15
|
`The provided sampleRate is not supported: ${options.sampleRate}`
|
|
12
16
|
);
|
|
@@ -14,7 +18,8 @@ export default class AudioContext extends BaseAudioContext {
|
|
|
14
18
|
|
|
15
19
|
super(
|
|
16
20
|
global.createAudioContext(
|
|
17
|
-
options?.sampleRate || AudioManager.getDevicePreferredSampleRate()
|
|
21
|
+
options?.sampleRate || AudioManager.getDevicePreferredSampleRate(),
|
|
22
|
+
options?.initSuspended || false
|
|
18
23
|
)
|
|
19
24
|
);
|
|
20
25
|
}
|
package/src/types.ts
CHANGED
|
@@ -24,14 +24,18 @@ export default class AudioContext implements BaseAudioContext {
|
|
|
24
24
|
readonly destination: AudioDestinationNode;
|
|
25
25
|
readonly sampleRate: number;
|
|
26
26
|
|
|
27
|
-
constructor(options?: AudioContextOptions) {
|
|
28
|
-
if (
|
|
27
|
+
constructor(options?: AudioContextOptions, _initSuspended: boolean = false) {
|
|
28
|
+
if (
|
|
29
|
+
options &&
|
|
30
|
+
options.sampleRate &&
|
|
31
|
+
(options.sampleRate < 8000 || options.sampleRate > 96000)
|
|
32
|
+
) {
|
|
29
33
|
throw new NotSupportedError(
|
|
30
34
|
`The provided sampleRate is not supported: ${options.sampleRate}`
|
|
31
35
|
);
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
this.context = new window.AudioContext(options);
|
|
38
|
+
this.context = new window.AudioContext({ sampleRate: options?.sampleRate });
|
|
35
39
|
|
|
36
40
|
this.sampleRate = this.context.sampleRate;
|
|
37
41
|
this.destination = new AudioDestinationNode(this, this.context.destination);
|