react-native-audio-api 0.10.0-nightly-75aa9d0-20251022 → 0.10.0-nightly-353aaa2-20251023

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 (127) hide show
  1. package/RNAudioAPI.podspec +9 -5
  2. package/android/build.gradle +33 -3
  3. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +5 -0
  4. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +1 -0
  5. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +4 -2
  6. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +29 -1
  7. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +20 -0
  8. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  9. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +0 -10
  10. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  11. package/ios/audioapi/ios/AudioAPIModule.h +2 -1
  12. package/ios/audioapi/ios/AudioAPIModule.mm +2 -0
  13. package/ios/audioapi/ios/core/IOSAudioRecorder.h +2 -1
  14. package/ios/audioapi/ios/system/AudioSessionManager.mm +9 -0
  15. package/lib/commonjs/core/AudioContext.js +1 -1
  16. package/lib/commonjs/core/AudioContext.js.map +1 -1
  17. package/lib/commonjs/core/BaseAudioContext.js +16 -25
  18. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  19. package/lib/commonjs/core/OfflineAudioContext.js +1 -1
  20. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  21. package/lib/commonjs/utils/index.js +19 -4
  22. package/lib/commonjs/utils/index.js.map +1 -1
  23. package/lib/module/core/AudioContext.js +2 -2
  24. package/lib/module/core/AudioContext.js.map +1 -1
  25. package/lib/module/core/BaseAudioContext.js +17 -26
  26. package/lib/module/core/BaseAudioContext.js.map +1 -1
  27. package/lib/module/core/OfflineAudioContext.js +2 -2
  28. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  29. package/lib/module/utils/index.js +15 -1
  30. package/lib/module/utils/index.js.map +1 -1
  31. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  32. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  33. package/lib/typescript/utils/index.d.ts +4 -1
  34. package/lib/typescript/utils/index.d.ts.map +1 -1
  35. package/package.json +2 -1
  36. package/scripts/download-prebuilt-binaries.sh +52 -0
  37. package/src/core/AudioContext.ts +3 -2
  38. package/src/core/BaseAudioContext.ts +44 -60
  39. package/src/core/OfflineAudioContext.ts +2 -2
  40. package/src/utils/index.ts +22 -1
  41. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  42. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  43. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  44. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  45. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  46. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  47. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  48. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  49. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  50. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  51. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  52. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  53. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  54. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  55. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  56. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  57. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  58. package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
  59. package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
  60. package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
  61. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  62. package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
  63. package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
  64. package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
  65. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  66. package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
  67. package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
  68. package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
  69. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  70. package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
  71. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
  72. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
  73. package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
  74. package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
  75. package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
  76. package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
  77. package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
  78. package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
  79. package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
  80. package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
  81. package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
  82. package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
  83. package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
  84. package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
  85. package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
  86. package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
  87. package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
  88. package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
  89. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +0 -44
  90. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +0 -1
  91. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  92. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -1
  93. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  94. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +0 -44
  95. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +0 -1
  96. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  97. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -1
  98. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  99. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +0 -44
  100. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +0 -1
  101. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  102. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -1
  103. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  104. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +0 -44
  105. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +0 -1
  106. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  107. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -1
  108. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  109. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  110. package/common/cpp/audioapi/external/x86/libogg.a +0 -0
  111. package/common/cpp/audioapi/external/x86/libopus.a +0 -0
  112. package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
  113. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  114. package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
  115. package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
  116. package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
  117. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  118. package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
  119. package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
  120. package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
  121. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  122. package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
  123. package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
  124. package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
  125. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -26
  126. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  127. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -381
@@ -1,4 +1,5 @@
1
1
  require "json"
2
+ require_relative './scripts/rnaa_utils'
2
3
 
3
4
  package_json = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
5
 
@@ -8,6 +9,8 @@ folly_flags = "-DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-
8
9
  fabric_flags = $new_arch_enabled ? '-DRCT_NEW_ARCH_ENABLED' : ''
9
10
  version_flag = "-DAUDIOAPI_VERSION=#{package_json['version']}"
10
11
 
12
+ worklets_preprocessor_flag = check_if_worklets_enabled() ? '-DRN_AUDIO_API_ENABLE_WORKLETS=1' : ''
13
+
11
14
  Pod::Spec.new do |s|
12
15
  s.name = "RNAudioAPI"
13
16
  s.version = package_json["version"]
@@ -35,9 +38,10 @@ Pod::Spec.new do |s|
35
38
 
36
39
  s.compiler_flags = "#{folly_flags}"
37
40
 
38
- # s.prepare_command = <<-CMD TODO: re-add when we have prebuilt libs put somewhere public
39
- # ruby -r './scripts/download-audioapi-libs.rb'
40
- # CMD
41
+ s.prepare_command = <<-CMD
42
+ chmod +x scripts/download-prebuilt-binaries.sh
43
+ scripts/download-prebuilt-binaries.sh ios
44
+ CMD
41
45
 
42
46
  # Assumes Pods dir is nested under ios project dir
43
47
  ios_dir = File.join(Pod::Config.instance.project_pods_root, '..')
@@ -68,8 +72,8 @@ s.pod_target_xcconfig = {
68
72
  $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/vorbis
69
73
  $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/ffmpeg_include
70
74
  ].join(" "),
71
- 'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}",
72
- 'OTHER_CPLUSPLUSFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}"
75
+ 'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag} #{worklets_preprocessor_flag}",
76
+ 'OTHER_CPLUSPLUSFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag} #{worklets_preprocessor_flag}",
73
77
  }
74
78
 
75
79
  s.user_target_xcconfig = {
@@ -74,6 +74,30 @@ def resolveReactNativeWorkletsDirectory() {
74
74
  return null;
75
75
  }
76
76
 
77
+ def validateWorkletsVersion() {
78
+ def validationScript = file("${projectDir}/../scripts/validate-worklets-version.js")
79
+ if (!validationScript.exists()) {
80
+ logger.error("[AudioAPI] Worklets validation script not found at ${validationScript.absolutePath}")
81
+ return false
82
+ }
83
+
84
+ try {
85
+ def process = ["node", validationScript.absolutePath].execute()
86
+ process.waitForProcessOutput(System.out, System.err)
87
+ def exitCode = process.exitValue()
88
+
89
+ if (exitCode == 0) {
90
+ return true
91
+ } else {
92
+ logger.warn("[AudioAPI] Worklets version validation failed")
93
+ return false
94
+ }
95
+ } catch (Exception e) {
96
+ logger.error("[AudioAPI] Failed to validate worklets version: ${e.message}")
97
+ return false
98
+ }
99
+ }
100
+
77
101
  def toPlatformFileString(String path) {
78
102
  if (Os.isFamily(Os.FAMILY_WINDOWS)) {
79
103
  path = path.replace(File.separatorChar, '/' as char)
@@ -92,7 +116,7 @@ static def supportsNamespace() {
92
116
 
93
117
  def reactNativeRootDir = resolveReactNativeDirectory()
94
118
  def reactNativeWorkletsRootDir = resolveReactNativeWorkletsDirectory()
95
- def isWorkletsAvailable = reactNativeWorkletsRootDir != null
119
+ def isWorkletsAvailable = reactNativeWorkletsRootDir != null && validateWorkletsVersion()
96
120
 
97
121
  def reactProperties = new Properties()
98
122
  file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
@@ -123,7 +147,7 @@ android {
123
147
  defaultConfig {
124
148
  minSdkVersion getExtOrIntegerDefault("minSdkVersion")
125
149
  targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
126
-
150
+
127
151
  buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
128
152
  buildConfigField "boolean", "RN_AUDIO_API_ENABLE_WORKLETS", "${isWorkletsAvailable}"
129
153
 
@@ -277,10 +301,16 @@ def assertMinimalReactNativeVersion = task assertMinimalReactNativeVersionTask {
277
301
  }
278
302
  }
279
303
 
304
+ task downloadPrebuiltBinaries(type: Exec) {
305
+ commandLine 'chmod', '+x', '../scripts/download-prebuilt-binaries.sh'
306
+ commandLine 'bash', '../scripts/download-prebuilt-binaries.sh'
307
+ args 'android'
308
+ }
309
+
280
310
  // Make preBuild depend on the download task
281
311
  tasks.preBuild {
282
312
  dependsOn assertMinimalReactNativeVersion
283
- // dependsOn downloadStaticPrebuiltLibraries TODO: re-add when we have prebuilt libs put somewhere public
313
+ dependsOn downloadPrebuiltBinaries
284
314
  }
285
315
 
286
316
  task cleanCmakeCache() {
@@ -51,6 +51,7 @@ void AudioAPIModule::registerNatives() {
51
51
  makeNativeMethod(
52
52
  "invokeHandlerWithEventNameAndEventBody",
53
53
  AudioAPIModule::invokeHandlerWithEventNameAndEventBody),
54
+ makeNativeMethod("closeAllContexts", AudioAPIModule::closeAllContexts),
54
55
  });
55
56
  }
56
57
 
@@ -101,4 +102,8 @@ void AudioAPIModule::invokeHandlerWithEventNameAndEventBody(
101
102
  eventName->toStdString(), body);
102
103
  }
103
104
  }
105
+
106
+ void AudioAPIModule::closeAllContexts() {
107
+ AudioAPIModuleInstaller::closeAllContexts();
108
+ }
104
109
  } // namespace audioapi
@@ -34,6 +34,7 @@ class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
34
34
 
35
35
  void injectJSIBindings();
36
36
  void invokeHandlerWithEventNameAndEventBody(jni::alias_ref<jni::JString> eventName, jni::alias_ref<jni::JMap<jstring, jobject>> eventBody);
37
+ void closeAllContexts();
37
38
 
38
39
  private:
39
40
  friend HybridBase;
@@ -4,6 +4,7 @@
4
4
  #include <audioapi/core/utils/Constants.h>
5
5
  #include <audioapi/utils/AudioArray.h>
6
6
  #include <audioapi/utils/AudioBus.h>
7
+ #include <jni.h>
7
8
 
8
9
  namespace audioapi {
9
10
 
@@ -49,7 +50,8 @@ bool AudioPlayer::openAudioStream() {
49
50
 
50
51
  bool AudioPlayer::start() {
51
52
  if (mStream_) {
52
- nativeAudioPlayer_->start();
53
+ jni::ThreadScope::WithClassLoader(
54
+ [this]() { nativeAudioPlayer_->start(); });
53
55
  auto result = mStream_->requestStart();
54
56
  return result == oboe::Result::OK;
55
57
  }
@@ -59,7 +61,7 @@ bool AudioPlayer::start() {
59
61
 
60
62
  void AudioPlayer::stop() {
61
63
  if (mStream_) {
62
- nativeAudioPlayer_->stop();
64
+ jni::ThreadScope::WithClassLoader([this]() { nativeAudioPlayer_->stop(); });
63
65
  mStream_->requestStop();
64
66
  }
65
67
  }
@@ -1,6 +1,8 @@
1
1
  package com.swmansion.audioapi
2
2
 
3
3
  import com.facebook.jni.HybridData
4
+ import com.facebook.react.bridge.LifecycleEventListener
5
+ import com.facebook.react.bridge.NativeModule
4
6
  import com.facebook.react.bridge.Promise
5
7
  import com.facebook.react.bridge.ReactApplicationContext
6
8
  import com.facebook.react.bridge.ReadableArray
@@ -16,7 +18,8 @@ import java.lang.ref.WeakReference
16
18
  @ReactModule(name = AudioAPIModule.NAME)
17
19
  class AudioAPIModule(
18
20
  reactContext: ReactApplicationContext,
19
- ) : NativeAudioAPIModuleSpec(reactContext) {
21
+ ) : NativeAudioAPIModuleSpec(reactContext),
22
+ LifecycleEventListener {
20
23
  companion object {
21
24
  const val NAME = NativeAudioAPIModuleSpec.NAME
22
25
  }
@@ -24,6 +27,7 @@ class AudioAPIModule(
24
27
  val reactContext: WeakReference<ReactApplicationContext> = WeakReference(reactContext)
25
28
 
26
29
  private val mHybridData: HybridData
30
+ private var reanimatedModule: NativeModule? = null
27
31
 
28
32
  external fun initHybrid(
29
33
  workletsModule: Any?,
@@ -38,6 +42,8 @@ class AudioAPIModule(
38
42
  eventBody: Map<String, Any>,
39
43
  )
40
44
 
45
+ private external fun closeAllContexts()
46
+
41
47
  init {
42
48
  try {
43
49
  System.loadLibrary("react-native-audio-api")
@@ -47,6 +53,8 @@ class AudioAPIModule(
47
53
  if (BuildConfig.RN_AUDIO_API_ENABLE_WORKLETS) {
48
54
  try {
49
55
  workletsModule = reactContext.getNativeModule("WorkletsModule")
56
+ reanimatedModule = reactContext.getNativeModule("ReanimatedModule")
57
+ reanimatedModule
50
58
  } catch (ex: Exception) {
51
59
  throw RuntimeException("WorkletsModule not found - make sure react-native-worklets is properly installed")
52
60
  }
@@ -64,6 +72,26 @@ class AudioAPIModule(
64
72
  return true
65
73
  }
66
74
 
75
+ override fun onHostResume() {
76
+ // do nothing
77
+ }
78
+
79
+ override fun onHostPause() {
80
+ closeAllContexts()
81
+ }
82
+
83
+ override fun onHostDestroy() {
84
+ // do nothing
85
+ }
86
+
87
+ override fun initialize() {
88
+ reactContext.get()?.addLifecycleEventListener(this)
89
+ }
90
+
91
+ override fun invalidate() {
92
+ // think about cleaning up resources, singletons etc.
93
+ }
94
+
67
95
  override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
68
96
 
69
97
  override fun setAudioSessionActivity(
@@ -16,12 +16,16 @@
16
16
  #include <audioapi/core/utils/worklets/SafeIncludes.h>
17
17
 
18
18
  #include <memory>
19
+ #include <vector>
19
20
 
20
21
  namespace audioapi {
21
22
 
22
23
  using namespace facebook;
23
24
 
24
25
  class AudioAPIModuleInstaller {
26
+ private:
27
+ inline static std::vector<std::weak_ptr<AudioContext>> contexts_ = {};
28
+
25
29
  public:
26
30
  static void injectJSIBindings(
27
31
  jsi::Runtime *jsiRuntime,
@@ -61,6 +65,19 @@ class AudioAPIModuleInstaller {
61
65
  *jsiRuntime, audioEventHandlerRegistryHostObject));
62
66
  }
63
67
 
68
+ static void closeAllContexts() {
69
+ for (auto it = contexts_.begin(); it != contexts_.end(); ++it) {
70
+ auto weakContext = *it;
71
+
72
+ if (auto context = weakContext.lock()) {
73
+ context->close();
74
+ }
75
+
76
+ it = contexts_.erase(it);
77
+ --it;
78
+ }
79
+ }
80
+
64
81
  private:
65
82
  static jsi::Function getCreateAudioContextFunction(
66
83
  jsi::Runtime *jsiRuntime,
@@ -95,6 +112,8 @@ class AudioAPIModuleInstaller {
95
112
  initSuspended,
96
113
  audioEventHandlerRegistry,
97
114
  runtimeRegistry);
115
+ AudioAPIModuleInstaller::contexts_.push_back(audioContext);
116
+
98
117
  auto audioContextHostObject =
99
118
  std::make_shared<AudioContextHostObject>(
100
119
  audioContext, &runtime, jsCallInvoker);
@@ -138,6 +157,7 @@ class AudioAPIModuleInstaller {
138
157
  sampleRate,
139
158
  audioEventHandlerRegistry,
140
159
  runtimeRegistry);
160
+
141
161
  auto audioContextHostObject =
142
162
  std::make_shared<OfflineAudioContextHostObject>(
143
163
  offlineAudioContext, &runtime, jsCallInvoker);
@@ -56,7 +56,7 @@ float AudioParam::getValueAtTime(double time) {
56
56
  void AudioParam::setValueAtTime(float value, double startTime) {
57
57
  auto event = [value, startTime](AudioParam &param) {
58
58
  // Ignore events scheduled before the end of existing automation
59
- if (startTime <= param.getQueueEndTime()) {
59
+ if (startTime < param.getQueueEndTime()) {
60
60
  return;
61
61
  }
62
62
 
@@ -87,7 +87,7 @@ void AudioParam::setValueAtTime(float value, double startTime) {
87
87
  void AudioParam::linearRampToValueAtTime(float value, double endTime) {
88
88
  auto event = [value, endTime](AudioParam &param) {
89
89
  // Ignore events scheduled before the end of existing automation
90
- if (endTime <= param.getQueueEndTime()) {
90
+ if (endTime < param.getQueueEndTime()) {
91
91
  return;
92
92
  }
93
93
 
@@ -5,16 +5,6 @@
5
5
  #include <string>
6
6
  #include <memory>
7
7
 
8
- #ifdef __APPLE__
9
- /// We cannot make any conditional logic inside podspec but it should automatically compile those files
10
- /// they should be accessible if someone has react-native-worklets in node_modules
11
- #if __has_include(<worklets/WorkletRuntime/WorkletRuntime.h>)
12
- #define RN_AUDIO_API_ENABLE_WORKLETS 1
13
- #else
14
- #define RN_AUDIO_API_ENABLE_WORKLETS 0
15
- #endif
16
- #endif
17
-
18
8
  #ifndef RN_AUDIO_API_TEST
19
9
  #define RN_AUDIO_API_TEST 0
20
10
  #endif
@@ -0,0 +1,24 @@
1
+ ## If you would like to relink ffmpeg to your implementation there are two options:
2
+
3
+ ### Option A)
4
+
5
+ you can modify script in scripts/download-prebuilt-binaries.sh
6
+
7
+ - ios dynamic frameworks are in `ffmpeg_ios.zip` directory
8
+ - android shared libraries are in `jniLibs.zip`
9
+
10
+ just replace way of downloading them that links to your binaries
11
+
12
+ ### Option B)
13
+
14
+ directly modify libraries in source code
15
+
16
+ - ios dynamic frameworks are placed in `common/cpp/audioapi/external`
17
+ - android shared libraries are placed in `android/src/main/jniLibs`
18
+
19
+ ---
20
+ `USED_LIBRARIES`:
21
+ - libavcodec
22
+ - libavformat
23
+ - libavutil
24
+ - libswresample
@@ -1,5 +1,6 @@
1
1
  #ifdef RCT_NEW_ARCH_ENABLED
2
2
  #import <React/RCTCallInvokerModule.h>
3
+ #import <React/RCTInvalidating.h>
3
4
  #import <rnaudioapi/rnaudioapi.h>
4
5
  #else // RCT_NEW_ARCH_ENABLED
5
6
  #import <React/RCTBridgeModule.h>
@@ -14,7 +15,7 @@
14
15
 
15
16
  @interface AudioAPIModule : RCTEventEmitter
16
17
  #ifdef RCT_NEW_ARCH_ENABLED
17
- <NativeAudioAPIModuleSpec, RCTCallInvokerModule>
18
+ <NativeAudioAPIModuleSpec, RCTCallInvokerModule, RCTInvalidating>
18
19
  #else
19
20
  <RCTBridgeModule>
20
21
  #endif // RCT_NEW_ARCH_ENABLED
@@ -54,6 +54,8 @@ RCT_EXPORT_MODULE(AudioAPIModule);
54
54
 
55
55
  _eventHandler = nullptr;
56
56
 
57
+ audioapi::AudioAPIModuleInstaller::closeAllContexts();
58
+
57
59
  [super invalidate];
58
60
  }
59
61
 
@@ -18,7 +18,8 @@ class IOSAudioRecorder : public AudioRecorder {
18
18
  IOSAudioRecorder(
19
19
  float sampleRate,
20
20
  int bufferLength,
21
- const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
21
+ const std::shared_ptr<AudioEventHandlerRegistry>
22
+ &audioEventHandlerRegistry);
22
23
 
23
24
  ~IOSAudioRecorder() override;
24
25
 
@@ -213,6 +213,15 @@
213
213
 
214
214
  - (void)requestRecordingPermissions:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
215
215
  {
216
+ id value = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSMicrophoneUsageDescription"];
217
+ // if there is no entry NSMicrophoneUsageDescription calling requestRecordPermission will quit an app
218
+ if (value == nil) {
219
+ reject(
220
+ nil,
221
+ @"There is no NSMicrophoneUsageDescription entry in info.plist file. App cannot access microphone without it.",
222
+ nil);
223
+ return;
224
+ }
216
225
  if (@available(iOS 17, *)) {
217
226
  [AVAudioSession.sharedInstance requestRecordPermission:^(BOOL granted) {
218
227
  if (granted) {
@@ -15,7 +15,7 @@ class AudioContext extends _BaseAudioContext.default {
15
15
  throw new _errors.NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
16
16
  }
17
17
  let audioRuntime = null;
18
- if (_utils.isWorkletsAvailable) {
18
+ if (_utils.isWorkletsVersionSupported) {
19
19
  audioRuntime = _utils.workletsModule.createWorkletRuntime('AudioWorkletRuntime');
20
20
  }
21
21
  super(global.createAudioContext(options?.sampleRate || _system.default.getDevicePreferredSampleRate(), options?.initSuspended || false, audioRuntime));
@@ -1 +1 @@
1
- {"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_system","_errors","_utils","e","__esModule","default","AudioContext","BaseAudioContext","constructor","options","sampleRate","NotSupportedError","audioRuntime","isWorkletsAvailable","workletsModule","createWorkletRuntime","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;AACA,IAAAG,MAAA,GAAAH,OAAA;AAA+D,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhD,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;IACA,IAAIE,YAAY,GAAG,IAAI;IACvB,IAAIC,0BAAmB,EAAE;MACvBD,YAAY,GAAGE,qBAAc,CAACC,oBAAoB,CAAC,qBAAqB,CAAC;IAC3E;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBR,OAAO,EAAEC,UAAU,IAAIQ,eAAY,CAACC,4BAA4B,CAAC,CAAC,EAClEV,OAAO,EAAEW,aAAa,IAAI,KAAK,EAC/BR,YACF,CACF,CAAC;EACH;EAEA,MAAMS,KAAKA,CAAA,EAAkB;IAC3B,OAAQ,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAChD;EAEA,MAAME,MAAMA,CAAA,EAAqB;IAC/B,OAAQ,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EACjD;EAEA,MAAMC,OAAOA,CAAA,EAAqB;IAChC,OAAQ,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EAClD;AACF;AAACC,OAAA,CAAApB,OAAA,GAAAC,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_system","_errors","_utils","e","__esModule","default","AudioContext","BaseAudioContext","constructor","options","sampleRate","NotSupportedError","audioRuntime","isWorkletsVersionSupported","workletsModule","createWorkletRuntime","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;AACA,IAAAG,MAAA,GAAAH,OAAA;AAAsE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEvD,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;IACA,IAAIE,YAAY,GAAG,IAAI;IAEvB,IAAIC,iCAA0B,EAAE;MAC9BD,YAAY,GAAGE,qBAAc,CAACC,oBAAoB,CAAC,qBAAqB,CAAC;IAC3E;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBR,OAAO,EAAEC,UAAU,IAAIQ,eAAY,CAACC,4BAA4B,CAAC,CAAC,EAClEV,OAAO,EAAEW,aAAa,IAAI,KAAK,EAC/BR,YACF,CACF,CAAC;EACH;EAEA,MAAMS,KAAKA,CAAA,EAAkB;IAC3B,OAAQ,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAChD;EAEA,MAAME,MAAMA,CAAA,EAAqB;IAC/B,OAAQ,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EACjD;EAEA,MAAMC,OAAOA,CAAA,EAAqB;IAChC,OAAQ,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EAClD;AACF;AAACC,OAAA,CAAApB,OAAA,GAAAC,YAAA","ignoreList":[]}
@@ -52,37 +52,28 @@ class BaseAudioContext {
52
52
  if (bufferLength < 1) {
53
53
  throw new _errors.NotSupportedError(`The buffer length provided (${bufferLength}) can not be less than 1`);
54
54
  }
55
- if (_utils.isWorkletsAvailable) {
56
- const shareableWorklet = _utils.workletsModule.makeShareableCloneRecursive((audioBuffers, channelCount) => {
57
- 'worklet';
55
+ (0, _utils.assertWorkletsEnabled)();
56
+ const shareableWorklet = _utils.workletsModule.makeShareableCloneRecursive((audioBuffers, channelCount) => {
57
+ 'worklet';
58
58
 
59
- const floatAudioData = audioBuffers.map(buffer => new Float32Array(buffer));
60
- callback(floatAudioData, channelCount);
61
- });
62
- return new _WorkletNode.default(this, this.context.createWorkletNode(shareableWorklet, workletRuntime === 'UIRuntime', bufferLength, inputChannelCount));
63
- }
64
- /// User does not have worklets as a dependency so he cannot use the worklet API.
65
- throw new Error('[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.');
59
+ const floatAudioData = audioBuffers.map(buffer => new Float32Array(buffer));
60
+ callback(floatAudioData, channelCount);
61
+ });
62
+ return new _WorkletNode.default(this, this.context.createWorkletNode(shareableWorklet, workletRuntime === 'UIRuntime', bufferLength, inputChannelCount));
66
63
  }
67
64
  createWorkletProcessingNode(callback, workletRuntime = 'AudioRuntime') {
68
- if (_utils.isWorkletsAvailable) {
69
- const shareableWorklet = _utils.workletsModule.makeShareableCloneRecursive((inputBuffers, outputBuffers, framesToProcess, currentTime) => {
70
- 'worklet';
65
+ (0, _utils.assertWorkletsEnabled)();
66
+ const shareableWorklet = _utils.workletsModule.makeShareableCloneRecursive((inputBuffers, outputBuffers, framesToProcess, currentTime) => {
67
+ 'worklet';
71
68
 
72
- const inputData = inputBuffers.map(buffer => new Float32Array(buffer, 0, framesToProcess));
73
- const outputData = outputBuffers.map(buffer => new Float32Array(buffer, 0, framesToProcess));
74
- callback(inputData, outputData, framesToProcess, currentTime);
75
- });
76
- return new _WorkletProcessingNode.default(this, this.context.createWorkletProcessingNode(shareableWorklet, workletRuntime === 'UIRuntime'));
77
- }
78
- /// User does not have worklets as a dependency so he cannot use the worklet API.
79
- throw new Error('[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.');
69
+ const inputData = inputBuffers.map(buffer => new Float32Array(buffer, 0, framesToProcess));
70
+ const outputData = outputBuffers.map(buffer => new Float32Array(buffer, 0, framesToProcess));
71
+ callback(inputData, outputData, framesToProcess, currentTime);
72
+ });
73
+ return new _WorkletProcessingNode.default(this, this.context.createWorkletProcessingNode(shareableWorklet, workletRuntime === 'UIRuntime'));
80
74
  }
81
75
  createWorkletSourceNode(callback, workletRuntime = 'AudioRuntime') {
82
- if (!_utils.isWorkletsAvailable) {
83
- /// User does not have worklets as a dependency so he cannot use the worklet API.
84
- throw new Error('[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.');
85
- }
76
+ (0, _utils.assertWorkletsEnabled)();
86
77
  const shareableWorklet = _utils.workletsModule.makeShareableCloneRecursive((audioBuffers, framesToProcess, currentTime, startOffset) => {
87
78
  'worklet';
88
79
 
@@ -1 +1 @@
1
- {"version":3,"names":["_errors","require","_utils","_WorkletSourceNode","_interopRequireDefault","_WorkletProcessingNode","_AnalyserNode","_AudioBuffer","_AudioBufferQueueSourceNode","_AudioBufferSourceNode","_AudioDestinationNode","_BiquadFilterNode","_ConstantSourceNode","_GainNode","_OscillatorNode","_PeriodicWave","_RecorderAdapterNode","_StereoPannerNode","_StreamerNode","_WorkletNode","_AudioDecoder","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","decodeAudioData","input","ArrayBuffer","TypeError","decodePCMInBase64","base64String","inputSampleRate","inputChannelCount","isInterleaved","createWorkletNode","callback","bufferLength","workletRuntime","NotSupportedError","isWorkletsAvailable","shareableWorklet","workletsModule","makeShareableCloneRecursive","audioBuffers","channelCount","floatAudioData","map","buffer","Float32Array","WorkletNode","Error","createWorkletProcessingNode","inputBuffers","outputBuffers","framesToProcess","inputData","outputData","WorkletProcessingNode","createWorkletSourceNode","startOffset","WorkletSourceNode","createRecorderAdapter","RecorderAdapterNode","createOscillator","OscillatorNode","createStreamer","StreamerNode","createConstantSource","ConstantSourceNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_errors","require","_utils","_WorkletSourceNode","_interopRequireDefault","_WorkletProcessingNode","_AnalyserNode","_AudioBuffer","_AudioBufferQueueSourceNode","_AudioBufferSourceNode","_AudioDestinationNode","_BiquadFilterNode","_ConstantSourceNode","_GainNode","_OscillatorNode","_PeriodicWave","_RecorderAdapterNode","_StereoPannerNode","_StreamerNode","_WorkletNode","_AudioDecoder","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","decodeAudioData","input","ArrayBuffer","TypeError","decodePCMInBase64","base64String","inputSampleRate","inputChannelCount","isInterleaved","createWorkletNode","callback","bufferLength","workletRuntime","NotSupportedError","assertWorkletsEnabled","shareableWorklet","workletsModule","makeShareableCloneRecursive","audioBuffers","channelCount","floatAudioData","map","buffer","Float32Array","WorkletNode","createWorkletProcessingNode","inputBuffers","outputBuffers","framesToProcess","inputData","outputData","WorkletProcessingNode","createWorkletSourceNode","startOffset","WorkletSourceNode","createRecorderAdapter","RecorderAdapterNode","createOscillator","OscillatorNode","createStreamer","StreamerNode","createConstantSource","ConstantSourceNode","createGain","GainNode","createStereoPanner","StereoPannerNode","createBiquadFilter","BiquadFilterNode","createBufferSource","options","pitchCorrection","AudioBufferSourceNode","createBufferQueueSource","AudioBufferQueueSourceNode","createBuffer","numOfChannels","length","AudioBuffer","createPeriodicWave","real","imag","constraints","InvalidAccessError","disableNormalization","PeriodicWave","createAnalyser","AnalyserNode","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
12
12
  class OfflineAudioContext extends _BaseAudioContext.default {
13
13
  constructor(arg0, arg1, arg2) {
14
14
  let audioRuntime = null;
15
- if (_utils.isWorkletsAvailable) {
15
+ if (_utils.isWorkletsVersionSupported) {
16
16
  audioRuntime = _utils.workletsModule.createWorkletRuntime('AudioWorkletRuntime');
17
17
  }
18
18
  if (typeof arg0 === 'object') {
@@ -1 +1 @@
1
- {"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_errors","_AudioBuffer","_utils","e","__esModule","default","OfflineAudioContext","BaseAudioContext","constructor","arg0","arg1","arg2","audioRuntime","isWorkletsAvailable","workletsModule","createWorkletRuntime","numberOfChannels","length","sampleRate","global","createOfflineAudioContext","duration","NotSupportedError","isSuspended","isRendering","resume","InvalidStateError","context","suspend","suspendTime","currentTime","startRendering","audioBuffer","AudioBuffer","exports"],"sourceRoot":"../../../src","sources":["core/OfflineAudioContext.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_errors","_AudioBuffer","_utils","e","__esModule","default","OfflineAudioContext","BaseAudioContext","constructor","arg0","arg1","arg2","audioRuntime","isWorkletsVersionSupported","workletsModule","createWorkletRuntime","numberOfChannels","length","sampleRate","global","createOfflineAudioContext","duration","NotSupportedError","isSuspended","isRendering","resume","InvalidStateError","context","suspend","suspendTime","currentTime","startRendering","audioBuffer","AudioBuffer","exports"],"sourceRoot":"../../../src","sources":["core/OfflineAudioContext.ts"],"mappings":"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","ignoreList":[]}
@@ -3,18 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.assertWorkletsEnabled = assertWorkletsEnabled;
6
7
  exports.clamp = clamp;
7
- exports.workletsModule = exports.isWorkletsAvailable = void 0;
8
+ exports.workletsVersion = exports.workletsModule = exports.supportedWorkletsVersions = exports.isWorkletsVersionSupported = void 0;
8
9
  function clamp(value, min, max) {
9
10
  return Math.min(Math.max(value, min), max);
10
11
  }
11
- let isWorkletsAvailable = exports.isWorkletsAvailable = false;
12
+ let isWorkletsAvailable = false;
13
+ let isWorkletsVersionSupported = exports.isWorkletsVersionSupported = false;
14
+ let workletsVersion = exports.workletsVersion = 'unknown';
15
+ const supportedWorkletsVersions = exports.supportedWorkletsVersions = ['0.6.0', '0.6.1'];
12
16
  let workletsModule = exports.workletsModule = void 0;
17
+ function assertWorkletsEnabled() {
18
+ if (!isWorkletsAvailable) {
19
+ throw new Error('[react-native-audio-api]: Worklets are not available. Please install react-native-worklets to use this feature.');
20
+ } else if (!isWorkletsVersionSupported) {
21
+ throw new Error(`[react-native-audio-api]: Worklets version ${workletsVersion} is not supported.
22
+ Please install react-native-worklets of one of the following versions: [${supportedWorkletsVersions.join(', ')}] to use this feature.`);
23
+ }
24
+ }
13
25
  try {
14
26
  exports.workletsModule = workletsModule = require('react-native-worklets');
15
- exports.isWorkletsAvailable = isWorkletsAvailable = true;
27
+ const workletsModuleJson = require('react-native-worklets/package.json');
28
+ exports.isWorkletsVersionSupported = isWorkletsVersionSupported = supportedWorkletsVersions.includes(workletsModuleJson.version);
29
+ isWorkletsAvailable = true;
30
+ exports.workletsVersion = workletsVersion = workletsModuleJson.version;
16
31
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
32
  } catch (error) {
18
- exports.isWorkletsAvailable = isWorkletsAvailable = false;
33
+ isWorkletsAvailable = false;
19
34
  }
20
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["clamp","value","min","max","Math","isWorkletsAvailable","exports","workletsModule","require","error"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;;;;;;AAWO,SAASA,KAAKA,CAACC,KAAa,EAAEC,GAAW,EAAEC,GAAW,EAAU;EACrE,OAAOC,IAAI,CAACF,GAAG,CAACE,IAAI,CAACD,GAAG,CAACF,KAAK,EAAEC,GAAG,CAAC,EAAEC,GAAG,CAAC;AAC5C;AAEO,IAAIE,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,KAAK;AAC/B,IAAIE,cAAuC,GAAAD,OAAA,CAAAC,cAAA;AAElD,IAAI;EACFD,OAAA,CAAAC,cAAA,GAAAA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;EACjDF,OAAA,CAAAD,mBAAA,GAAAA,mBAAmB,GAAG,IAAI;EAC1B;AACF,CAAC,CAAC,OAAOI,KAAK,EAAE;EACdH,OAAA,CAAAD,mBAAA,GAAAA,mBAAmB,GAAG,KAAK;AAC7B","ignoreList":[]}
1
+ {"version":3,"names":["clamp","value","min","max","Math","isWorkletsAvailable","isWorkletsVersionSupported","exports","workletsVersion","supportedWorkletsVersions","workletsModule","assertWorkletsEnabled","Error","join","require","workletsModuleJson","includes","version","error"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;;;;;;;AAWO,SAASA,KAAKA,CAACC,KAAa,EAAEC,GAAW,EAAEC,GAAW,EAAU;EACrE,OAAOC,IAAI,CAACF,GAAG,CAACE,IAAI,CAACD,GAAG,CAACF,KAAK,EAAEC,GAAG,CAAC,EAAEC,GAAG,CAAC;AAC5C;AAEA,IAAIE,mBAAmB,GAAG,KAAK;AACxB,IAAIC,0BAA0B,GAAAC,OAAA,CAAAD,0BAAA,GAAG,KAAK;AACtC,IAAIE,eAAe,GAAAD,OAAA,CAAAC,eAAA,GAAG,SAAS;AAC/B,MAAMC,yBAAyB,GAAAF,OAAA,CAAAE,yBAAA,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AACpD,IAAIC,cAAuC,GAAAH,OAAA,CAAAG,cAAA;AAE3C,SAASC,qBAAqBA,CAAA,EAAG;EACtC,IAAI,CAACN,mBAAmB,EAAE;IACxB,MAAM,IAAIO,KAAK,CACb,iHACF,CAAC;EACH,CAAC,MAAM,IAAI,CAACN,0BAA0B,EAAE;IACtC,MAAM,IAAIM,KAAK,CACb,8CAA8CJ,eAAe;AACnE,gFAAgFC,yBAAyB,CAACI,IAAI,CAAC,IAAI,CAAC,wBAChH,CAAC;EACH;AACF;AAEA,IAAI;EACFN,OAAA,CAAAG,cAAA,GAAAA,cAAc,GAAGI,OAAO,CAAC,uBAAuB,CAAC;EACjD,MAAMC,kBAAkB,GAAGD,OAAO,CAAC,oCAAoC,CAAC;EACxEP,OAAA,CAAAD,0BAAA,GAAAA,0BAA0B,GAAGG,yBAAyB,CAACO,QAAQ,CAC7DD,kBAAkB,CAACE,OACrB,CAAC;EACDZ,mBAAmB,GAAG,IAAI;EAC1BE,OAAA,CAAAC,eAAA,GAAAA,eAAe,GAAGO,kBAAkB,CAACE,OAAO;EAC5C;AACF,CAAC,CAAC,OAAOC,KAAK,EAAE;EACdb,mBAAmB,GAAG,KAAK;AAC7B","ignoreList":[]}
@@ -3,14 +3,14 @@
3
3
  import BaseAudioContext from "./BaseAudioContext.js";
4
4
  import AudioManager from "../system/index.js";
5
5
  import { NotSupportedError } from "../errors/index.js";
6
- import { isWorkletsAvailable, workletsModule } from "../utils/index.js";
6
+ import { isWorkletsVersionSupported, workletsModule } from "../utils/index.js";
7
7
  export default class AudioContext extends BaseAudioContext {
8
8
  constructor(options) {
9
9
  if (options && options.sampleRate && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
10
10
  throw new NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
11
11
  }
12
12
  let audioRuntime = null;
13
- if (isWorkletsAvailable) {
13
+ if (isWorkletsVersionSupported) {
14
14
  audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
15
15
  }
16
16
  super(global.createAudioContext(options?.sampleRate || AudioManager.getDevicePreferredSampleRate(), options?.initSuspended || false, audioRuntime));
@@ -1 +1 @@
1
- {"version":3,"names":["BaseAudioContext","AudioManager","NotSupportedError","isWorkletsAvailable","workletsModule","AudioContext","constructor","options","sampleRate","audioRuntime","createWorkletRuntime","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;AAC7C,SAASC,mBAAmB,EAAEC,cAAc,QAAQ,mBAAU;AAE9D,eAAe,MAAMC,YAAY,SAASL,gBAAgB,CAAC;EACzDM,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,IAAIN,iBAAiB,CACzB,6CAA6CK,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IACA,IAAIC,YAAY,GAAG,IAAI;IACvB,IAAIN,mBAAmB,EAAE;MACvBM,YAAY,GAAGL,cAAc,CAACM,oBAAoB,CAAC,qBAAqB,CAAC;IAC3E;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBL,OAAO,EAAEC,UAAU,IAAIP,YAAY,CAACY,4BAA4B,CAAC,CAAC,EAClEN,OAAO,EAAEO,aAAa,IAAI,KAAK,EAC/BL,YACF,CACF,CAAC;EACH;EAEA,MAAMM,KAAKA,CAAA,EAAkB;IAC3B,OAAQ,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAChD;EAEA,MAAME,MAAMA,CAAA,EAAqB;IAC/B,OAAQ,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EACjD;EAEA,MAAMC,OAAOA,CAAA,EAAqB;IAChC,OAAQ,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EAClD;AACF","ignoreList":[]}
1
+ {"version":3,"names":["BaseAudioContext","AudioManager","NotSupportedError","isWorkletsVersionSupported","workletsModule","AudioContext","constructor","options","sampleRate","audioRuntime","createWorkletRuntime","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;AAC7C,SAASC,0BAA0B,EAAEC,cAAc,QAAQ,mBAAU;AAErE,eAAe,MAAMC,YAAY,SAASL,gBAAgB,CAAC;EACzDM,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,IAAIN,iBAAiB,CACzB,6CAA6CK,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IACA,IAAIC,YAAY,GAAG,IAAI;IAEvB,IAAIN,0BAA0B,EAAE;MAC9BM,YAAY,GAAGL,cAAc,CAACM,oBAAoB,CAAC,qBAAqB,CAAC;IAC3E;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBL,OAAO,EAAEC,UAAU,IAAIP,YAAY,CAACY,4BAA4B,CAAC,CAAC,EAClEN,OAAO,EAAEO,aAAa,IAAI,KAAK,EAC/BL,YACF,CACF,CAAC;EACH;EAEA,MAAMM,KAAKA,CAAA,EAAkB;IAC3B,OAAQ,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAChD;EAEA,MAAME,MAAMA,CAAA,EAAqB;IAC/B,OAAQ,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EACjD;EAEA,MAAMC,OAAOA,CAAA,EAAqB;IAChC,OAAQ,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EAClD;AACF","ignoreList":[]}