react-native-audio-api 0.8.3-nightly-cae1f96-20250928 β 0.8.3-nightly-751c08a-20250930
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/README.md +40 -39
- package/lib/commonjs/core/BaseAudioContext.js +10 -18
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/utils/index.js +1 -1
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +10 -18
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/utils/index.js +1 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -9
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +4 -3
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +6 -1
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/BaseAudioContext.ts +11 -19
- package/src/interfaces.ts +12 -7
- package/src/utils/index.ts +9 -1
package/README.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/react-native-audio-api)
|
|
6
6
|
[](https://www.npmjs.com/package/react-native-audio-api?activeTab=versions)
|
|
7
|
+
<br />
|
|
7
8
|
[](https://github.com/software-mansion/react-native-audio-api/actions/workflows/ci.yml)
|
|
8
|
-
[](https://github.com/software-mansion/react-native-audio-api/actions/workflows/npm-publish-nightly.yml)
|
|
9
9
|
[](https://github.com/software-mansion/react-native-audio-api/actions/workflows/tests.yml)
|
|
10
10
|
|
|
11
11
|
`react-native-audio-api` provides system for controlling audio in React Native environment compatible with Web Audio API specification,
|
|
@@ -17,55 +17,56 @@ check out the [Getting Started](https://docs.swmansion.com/react-native-audio-ap
|
|
|
17
17
|
|
|
18
18
|
## Roadmap
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
**Sound synthesis and system audio** π£ <br />
|
|
22
|
-
Access to devices audio engines and threads, basic nodes for sound synthesis, simple effects and audio graph implementation
|
|
23
|
-
<br />
|
|
20
|
+
### Planned
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
**Graph Processing** ποΈ <br />
|
|
27
|
-
Support for multi-channel audio processing, audio-graph route optimizations, improved react-native layer for managing audio nodes
|
|
28
|
-
<br />
|
|
22
|
+
### <img src="https://img.shields.io/badge/Coming_in-0.9.0-orange" />
|
|
29
23
|
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
Support for local and remote audio file resources: MP3, WAV, FLAC.
|
|
33
|
-
<br />
|
|
24
|
+
- **JS Audio Worklets V1 π**<br />
|
|
25
|
+
Receive events and data callbacks from audio thread to synchronize with UI on UI thread.
|
|
34
26
|
|
|
35
|
-
|
|
36
|
-
**Analyser Node** π <br />
|
|
37
|
-
Ability to draw, animate or simply debug audio data in time or frequency domain.
|
|
38
|
-
<br />
|
|
27
|
+
### <img src="https://img.shields.io/badge/Coming_in-x.x.x-orange" />
|
|
39
28
|
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
Ability to modify playback speed without affecting pitch of the sound
|
|
43
|
-
<br />
|
|
29
|
+
- **Convolver Node π**<br />
|
|
30
|
+
Realistic reverb and spatial effects in the browser by applying impulse responses. It makes audio sound like itβs being played in real spaces, from small rooms to cathedrals, or through hardware like amps and speakers
|
|
44
31
|
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
Full control of system audio settings, remote controls, lock screen integration and most importantly configurable background modes
|
|
32
|
+
- **Decoding and utility modules π§**<br />
|
|
33
|
+
Decode and modify audio data without the need to create AudioContext first through a set of utility classes
|
|
48
34
|
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
- **DynamicCompressorNode γ½οΈ**<br />
|
|
36
|
+
Reduce the volume of loud sounds and boost quieter nodes to balance the audio signal, avoid clipping or distorted sounds
|
|
51
37
|
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
Grab audio data from device microphone or connected device, connect it to the audio graph or stream through the internet <br />
|
|
38
|
+
- **Audio tag π·οΈ**<br />
|
|
39
|
+
Simple ability to play and buffer audio, with all of the most commonly used functions, same as on the web, without the need to create and manipulate an audio graph.
|
|
55
40
|
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
- **MIDI support πΈ**<br />
|
|
42
|
+
Complementary lib for react-native-audio-api, that will allow to communicate with MIDI devices or read/write MIDI files.
|
|
58
43
|
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
Ability to decode m4a/mp4/aac/ogg/opus audio files, allowing for playback of these formats in the audio graph. <br />
|
|
44
|
+
- **Spatial Audio π’οΈ**<br />
|
|
45
|
+
manipulate audio in 3D space
|
|
62
46
|
|
|
63
|
-
|
|
64
|
-
|
|
47
|
+
- **Noise Cancellation π¦**<br />
|
|
48
|
+
System-based active noise and echo cancellation support
|
|
65
49
|
|
|
66
|
-
- **JS Audio Worklets
|
|
67
|
-
|
|
68
|
-
|
|
50
|
+
- **JS Audio Worklets V2 π**<br />
|
|
51
|
+
Customize the process pipeline with JS functions running on audio thread.
|
|
52
|
+
|
|
53
|
+
### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.8.0"><img src="https://img.shields.io/badge/Released_in-0.8.0-green" /></a>
|
|
54
|
+
|
|
55
|
+
- **Decoding support for m4a/mp4/aac/ogg/opus π** <br />
|
|
56
|
+
Decode m4a/mp4/aac/ogg/opus audio files, allowing for playback of these formats in the audio graph.
|
|
57
|
+
|
|
58
|
+
- **HLS streaming support** π <br />
|
|
59
|
+
Stream audio from HLS sources, allowing for playback of live audio streams or pre-recorded audio files.
|
|
60
|
+
|
|
61
|
+
### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.7.0"><img src="https://img.shields.io/badge/Released_in-0.7.0-green" /></a>
|
|
62
|
+
|
|
63
|
+
- **Microphone support ποΈ** <br />
|
|
64
|
+
Grab audio data from device microphone or connected device, connect it to the audio graph or stream through the internet.
|
|
65
|
+
|
|
66
|
+
- **Custom Audio Processor βοΈ** <br />
|
|
67
|
+
Write your own processing AudioNode.
|
|
68
|
+
|
|
69
|
+
See more in [Changelog](./ghdocs/changelog.md)
|
|
69
70
|
|
|
70
71
|
## Web Audio API Specification Coverage
|
|
71
72
|
|
|
@@ -4,21 +4,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
var _errors = require("../errors");
|
|
8
|
+
var _utils = require("../utils");
|
|
9
|
+
var _AnalyserNode = _interopRequireDefault(require("./AnalyserNode"));
|
|
10
|
+
var _AudioBuffer = _interopRequireDefault(require("./AudioBuffer"));
|
|
11
|
+
var _AudioBufferQueueSourceNode = _interopRequireDefault(require("./AudioBufferQueueSourceNode"));
|
|
12
|
+
var _AudioBufferSourceNode = _interopRequireDefault(require("./AudioBufferSourceNode"));
|
|
7
13
|
var _AudioDestinationNode = _interopRequireDefault(require("./AudioDestinationNode"));
|
|
8
|
-
var _OscillatorNode = _interopRequireDefault(require("./OscillatorNode"));
|
|
9
|
-
var _GainNode = _interopRequireDefault(require("./GainNode"));
|
|
10
|
-
var _StereoPannerNode = _interopRequireDefault(require("./StereoPannerNode"));
|
|
11
14
|
var _BiquadFilterNode = _interopRequireDefault(require("./BiquadFilterNode"));
|
|
12
|
-
var
|
|
13
|
-
var
|
|
15
|
+
var _GainNode = _interopRequireDefault(require("./GainNode"));
|
|
16
|
+
var _OscillatorNode = _interopRequireDefault(require("./OscillatorNode"));
|
|
14
17
|
var _PeriodicWave = _interopRequireDefault(require("./PeriodicWave"));
|
|
15
|
-
var _AnalyserNode = _interopRequireDefault(require("./AnalyserNode"));
|
|
16
|
-
var _AudioBufferQueueSourceNode = _interopRequireDefault(require("./AudioBufferQueueSourceNode"));
|
|
17
|
-
var _StreamerNode = _interopRequireDefault(require("./StreamerNode"));
|
|
18
|
-
var _errors = require("../errors");
|
|
19
18
|
var _RecorderAdapterNode = _interopRequireDefault(require("./RecorderAdapterNode"));
|
|
19
|
+
var _StereoPannerNode = _interopRequireDefault(require("./StereoPannerNode"));
|
|
20
|
+
var _StreamerNode = _interopRequireDefault(require("./StreamerNode"));
|
|
20
21
|
var _WorkletNode = _interopRequireDefault(require("./WorkletNode"));
|
|
21
|
-
var _utils = require("../utils");
|
|
22
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
23
|
class BaseAudioContext {
|
|
24
24
|
constructor(context) {
|
|
@@ -45,14 +45,6 @@ class BaseAudioContext {
|
|
|
45
45
|
|
|
46
46
|
const floatAudioData = audioBuffers.map(buffer => new Float32Array(buffer));
|
|
47
47
|
callback(floatAudioData, channelCount);
|
|
48
|
-
|
|
49
|
-
/// !IMPORTANT Workaround
|
|
50
|
-
/// This is required for now because the worklet is run using runGuarded in C++ which does not invoke any interaction with
|
|
51
|
-
/// the event queue which means if no task is being scheduled, the worklet's side effect won't happen.
|
|
52
|
-
/// So worklet will be called but any of its interactions with the UI thread will not be visible.
|
|
53
|
-
|
|
54
|
-
/// This forces to flush queue
|
|
55
|
-
requestAnimationFrame(() => {});
|
|
56
48
|
});
|
|
57
49
|
return new _WorkletNode.default(this, this.context.createWorkletNode(shareableWorklet, bufferLength, inputChannelCount));
|
|
58
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_errors","require","_utils","_AnalyserNode","_interopRequireDefault","_AudioBuffer","_AudioBufferQueueSourceNode","_AudioBufferSourceNode","_AudioDestinationNode","_BiquadFilterNode","_GainNode","_OscillatorNode","_PeriodicWave","_RecorderAdapterNode","_StereoPannerNode","_StreamerNode","_WorkletNode","e","__esModule","default","BaseAudioContext","constructor","context","destination","AudioDestinationNode","sampleRate","currentTime","state","createWorkletNode","callback","bufferLength","inputChannelCount","NotSupportedError","isWorkletsAvailable","shareableWorklet","workletsModule","makeShareableCloneRecursive","audioBuffers","channelCount","floatAudioData","map","buffer","Float32Array","WorkletNode","Error","createRecorderAdapter","RecorderAdapterNode","createOscillator","OscillatorNode","createStreamer","StreamerNode","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","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64","exports"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ function clamp(value, min, max) {
|
|
|
9
9
|
return Math.min(Math.max(value, min), max);
|
|
10
10
|
}
|
|
11
11
|
let isWorkletsAvailable = exports.isWorkletsAvailable = false;
|
|
12
|
-
let workletsModule = exports.workletsModule =
|
|
12
|
+
let workletsModule = exports.workletsModule = void 0;
|
|
13
13
|
try {
|
|
14
14
|
exports.workletsModule = workletsModule = require('react-native-worklets');
|
|
15
15
|
exports.isWorkletsAvailable = isWorkletsAvailable = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["clamp","value","min","max","Math","isWorkletsAvailable","exports","workletsModule","require","error"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"names":["clamp","value","min","max","Math","isWorkletsAvailable","exports","workletsModule","require","error"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;;;;;;AAQO,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;AAC5B,CAAC,CAAC,OAAOI,KAAK,EAAE;EACdH,OAAA,CAAAD,mBAAA,GAAAA,mBAAmB,GAAG,KAAK;AAC7B","ignoreList":[]}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { InvalidAccessError, NotSupportedError } from "../errors/index.js";
|
|
4
|
+
import { isWorkletsAvailable, workletsModule } from "../utils/index.js";
|
|
5
|
+
import AnalyserNode from "./AnalyserNode.js";
|
|
6
|
+
import AudioBuffer from "./AudioBuffer.js";
|
|
7
|
+
import AudioBufferQueueSourceNode from "./AudioBufferQueueSourceNode.js";
|
|
8
|
+
import AudioBufferSourceNode from "./AudioBufferSourceNode.js";
|
|
3
9
|
import AudioDestinationNode from "./AudioDestinationNode.js";
|
|
4
|
-
import OscillatorNode from "./OscillatorNode.js";
|
|
5
|
-
import GainNode from "./GainNode.js";
|
|
6
|
-
import StereoPannerNode from "./StereoPannerNode.js";
|
|
7
10
|
import BiquadFilterNode from "./BiquadFilterNode.js";
|
|
8
|
-
import
|
|
9
|
-
import
|
|
11
|
+
import GainNode from "./GainNode.js";
|
|
12
|
+
import OscillatorNode from "./OscillatorNode.js";
|
|
10
13
|
import PeriodicWave from "./PeriodicWave.js";
|
|
11
|
-
import AnalyserNode from "./AnalyserNode.js";
|
|
12
|
-
import AudioBufferQueueSourceNode from "./AudioBufferQueueSourceNode.js";
|
|
13
|
-
import StreamerNode from "./StreamerNode.js";
|
|
14
|
-
import { InvalidAccessError, NotSupportedError } from "../errors/index.js";
|
|
15
14
|
import RecorderAdapterNode from "./RecorderAdapterNode.js";
|
|
15
|
+
import StereoPannerNode from "./StereoPannerNode.js";
|
|
16
|
+
import StreamerNode from "./StreamerNode.js";
|
|
16
17
|
import WorkletNode from "./WorkletNode.js";
|
|
17
|
-
import { isWorkletsAvailable, workletsModule } from "../utils/index.js";
|
|
18
18
|
export default class BaseAudioContext {
|
|
19
19
|
constructor(context) {
|
|
20
20
|
this.context = context;
|
|
@@ -40,14 +40,6 @@ export default class BaseAudioContext {
|
|
|
40
40
|
|
|
41
41
|
const floatAudioData = audioBuffers.map(buffer => new Float32Array(buffer));
|
|
42
42
|
callback(floatAudioData, channelCount);
|
|
43
|
-
|
|
44
|
-
/// !IMPORTANT Workaround
|
|
45
|
-
/// This is required for now because the worklet is run using runGuarded in C++ which does not invoke any interaction with
|
|
46
|
-
/// the event queue which means if no task is being scheduled, the worklet's side effect won't happen.
|
|
47
|
-
/// So worklet will be called but any of its interactions with the UI thread will not be visible.
|
|
48
|
-
|
|
49
|
-
/// This forces to flush queue
|
|
50
|
-
requestAnimationFrame(() => {});
|
|
51
43
|
});
|
|
52
44
|
return new WorkletNode(this, this.context.createWorkletNode(shareableWorklet, bufferLength, inputChannelCount));
|
|
53
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["InvalidAccessError","NotSupportedError","isWorkletsAvailable","workletsModule","AnalyserNode","AudioBuffer","AudioBufferQueueSourceNode","AudioBufferSourceNode","AudioDestinationNode","BiquadFilterNode","GainNode","OscillatorNode","PeriodicWave","RecorderAdapterNode","StereoPannerNode","StreamerNode","WorkletNode","BaseAudioContext","constructor","context","destination","sampleRate","currentTime","state","createWorkletNode","callback","bufferLength","inputChannelCount","shareableWorklet","makeShareableCloneRecursive","audioBuffers","channelCount","floatAudioData","map","buffer","Float32Array","Error","createRecorderAdapter","createOscillator","createStreamer","createGain","createStereoPanner","createBiquadFilter","createBufferSource","options","pitchCorrection","createBufferQueueSource","createBuffer","numOfChannels","length","createPeriodicWave","real","imag","constraints","disableNormalization","createAnalyser","decodeAudioDataSource","sourcePath","startsWith","replace","decodeAudioData","data","Uint8Array","decodePCMInBase64Data","base64","playbackRate","decodePCMAudioDataInBase64"],"sourceRoot":"../../../src","sources":["core/BaseAudioContext.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ export function clamp(value, min, max) {
|
|
|
4
4
|
return Math.min(Math.max(value, min), max);
|
|
5
5
|
}
|
|
6
6
|
export let isWorkletsAvailable = false;
|
|
7
|
-
export let workletsModule
|
|
7
|
+
export let workletsModule;
|
|
8
8
|
try {
|
|
9
9
|
workletsModule = require('react-native-worklets');
|
|
10
10
|
isWorkletsAvailable = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["clamp","value","min","max","Math","isWorkletsAvailable","workletsModule","require","error"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"names":["clamp","value","min","max","Math","isWorkletsAvailable","workletsModule","require","error"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;AAQA,OAAO,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,OAAO,IAAIE,mBAAmB,GAAG,KAAK;AACtC,OAAO,IAAIC,cAAuC;AAElD,IAAI;EACFA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;EACjDF,mBAAmB,GAAG,IAAI;AAC5B,CAAC,CAAC,OAAOG,KAAK,EAAE;EACdH,mBAAmB,GAAG,KAAK;AAC7B","ignoreList":[]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { IBaseAudioContext } from '../interfaces';
|
|
2
|
-
import { ContextState, PeriodicWaveConstraints
|
|
2
|
+
import { AudioBufferBaseSourceNodeOptions, ContextState, PeriodicWaveConstraints } from '../types';
|
|
3
|
+
import AnalyserNode from './AnalyserNode';
|
|
4
|
+
import AudioBuffer from './AudioBuffer';
|
|
5
|
+
import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
|
|
6
|
+
import AudioBufferSourceNode from './AudioBufferSourceNode';
|
|
3
7
|
import AudioDestinationNode from './AudioDestinationNode';
|
|
4
|
-
import OscillatorNode from './OscillatorNode';
|
|
5
|
-
import GainNode from './GainNode';
|
|
6
|
-
import StereoPannerNode from './StereoPannerNode';
|
|
7
8
|
import BiquadFilterNode from './BiquadFilterNode';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
9
|
+
import GainNode from './GainNode';
|
|
10
|
+
import OscillatorNode from './OscillatorNode';
|
|
10
11
|
import PeriodicWave from './PeriodicWave';
|
|
11
|
-
import AnalyserNode from './AnalyserNode';
|
|
12
|
-
import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
|
|
13
|
-
import StreamerNode from './StreamerNode';
|
|
14
12
|
import RecorderAdapterNode from './RecorderAdapterNode';
|
|
13
|
+
import StereoPannerNode from './StereoPannerNode';
|
|
14
|
+
import StreamerNode from './StreamerNode';
|
|
15
15
|
import WorkletNode from './WorkletNode';
|
|
16
16
|
export default class BaseAudioContext {
|
|
17
17
|
readonly destination: AudioDestinationNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/BaseAudioContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/BaseAudioContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,gCAAgC,EAChC,YAAY,EACZ,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,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,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAExB,OAAO,EAAE,iBAAiB;IAMtC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,iBAAiB,CACf,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,EACxE,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,GACxB,WAAW;IAqCd,qBAAqB,IAAI,mBAAmB;IAI5C,gBAAgB,IAAI,cAAc;IAIlC,cAAc,IAAI,YAAY;IAI9B,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,CAChB,OAAO,CAAC,EAAE,gCAAgC,GACzC,qBAAqB;IASxB,uBAAuB,CACrB,OAAO,CAAC,EAAE,gCAAgC,GACzC,0BAA0B;IAS7B,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAcf,cAAc,IAAI,YAAY;IAI9B,iDAAiD;IAC3C,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAWrE,8CAA8C;IACxC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAMxD,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,MAAY,GACzB,OAAO,CAAC,WAAW,CAAC;CAKxB"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { AudioEventCallback, AudioEventName } from './events/types';
|
|
2
|
+
import { BiquadFilterType, ChannelCountMode, ChannelInterpretation, ContextState, OscillatorType, WindowType } from './types';
|
|
3
|
+
export type ShareableWorkletCallback = (audioBuffers: Array<ArrayBuffer>, channelCount: number) => void;
|
|
3
4
|
export interface IBaseAudioContext {
|
|
4
5
|
readonly destination: IAudioDestinationNode;
|
|
5
6
|
readonly state: ContextState;
|
|
6
7
|
readonly sampleRate: number;
|
|
7
8
|
readonly currentTime: number;
|
|
8
9
|
createRecorderAdapter(): IRecorderAdapterNode;
|
|
9
|
-
createWorkletNode
|
|
10
|
+
createWorkletNode(shareableWorklet: ShareableWorkletCallback, bufferLength: number, inputChannelCount: number): IWorkletNode;
|
|
10
11
|
createOscillator(): IOscillatorNode;
|
|
11
12
|
createGain(): IGainNode;
|
|
12
13
|
createStereoPanner(): IStereoPannerNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import type { ShareableWorkletCallback } from '../interfaces';
|
|
2
|
+
interface SimplifiedWorkletModule {
|
|
3
|
+
makeShareableCloneRecursive: (workletCallback: ShareableWorkletCallback) => ShareableWorkletCallback;
|
|
4
|
+
}
|
|
1
5
|
export declare function clamp(value: number, min: number, max: number): number;
|
|
2
6
|
export declare let isWorkletsAvailable: boolean;
|
|
3
|
-
export declare let workletsModule:
|
|
7
|
+
export declare let workletsModule: SimplifiedWorkletModule;
|
|
8
|
+
export {};
|
|
4
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,eAAO,IAAI,mBAAmB,SAAQ,CAAC;AACvC,eAAO,IAAI,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,UAAU,uBAAuB;IAC/B,2BAA2B,EAAE,CAC3B,eAAe,EAAE,wBAAwB,KACtC,wBAAwB,CAAC;CAC/B;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,eAAO,IAAI,mBAAmB,SAAQ,CAAC;AACvC,eAAO,IAAI,cAAc,EAAE,uBAAuB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.8.3-nightly-
|
|
3
|
+
"version": "0.8.3-nightly-751c08a-20250930",
|
|
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"
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
+
import { InvalidAccessError, NotSupportedError } from '../errors';
|
|
1
2
|
import { IBaseAudioContext } from '../interfaces';
|
|
2
3
|
import {
|
|
4
|
+
AudioBufferBaseSourceNodeOptions,
|
|
3
5
|
ContextState,
|
|
4
6
|
PeriodicWaveConstraints,
|
|
5
|
-
AudioBufferBaseSourceNodeOptions,
|
|
6
7
|
} from '../types';
|
|
8
|
+
import { isWorkletsAvailable, workletsModule } from '../utils';
|
|
9
|
+
import AnalyserNode from './AnalyserNode';
|
|
10
|
+
import AudioBuffer from './AudioBuffer';
|
|
11
|
+
import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
|
|
12
|
+
import AudioBufferSourceNode from './AudioBufferSourceNode';
|
|
7
13
|
import AudioDestinationNode from './AudioDestinationNode';
|
|
8
|
-
import OscillatorNode from './OscillatorNode';
|
|
9
|
-
import GainNode from './GainNode';
|
|
10
|
-
import StereoPannerNode from './StereoPannerNode';
|
|
11
14
|
import BiquadFilterNode from './BiquadFilterNode';
|
|
12
|
-
import
|
|
13
|
-
import
|
|
15
|
+
import GainNode from './GainNode';
|
|
16
|
+
import OscillatorNode from './OscillatorNode';
|
|
14
17
|
import PeriodicWave from './PeriodicWave';
|
|
15
|
-
import AnalyserNode from './AnalyserNode';
|
|
16
|
-
import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
|
|
17
|
-
import StreamerNode from './StreamerNode';
|
|
18
|
-
import { InvalidAccessError, NotSupportedError } from '../errors';
|
|
19
18
|
import RecorderAdapterNode from './RecorderAdapterNode';
|
|
19
|
+
import StereoPannerNode from './StereoPannerNode';
|
|
20
|
+
import StreamerNode from './StreamerNode';
|
|
20
21
|
import WorkletNode from './WorkletNode';
|
|
21
|
-
import { isWorkletsAvailable, workletsModule } from '../utils';
|
|
22
22
|
|
|
23
23
|
export default class BaseAudioContext {
|
|
24
24
|
readonly destination: AudioDestinationNode;
|
|
@@ -63,14 +63,6 @@ export default class BaseAudioContext {
|
|
|
63
63
|
(buffer) => new Float32Array(buffer)
|
|
64
64
|
);
|
|
65
65
|
callback(floatAudioData, channelCount);
|
|
66
|
-
|
|
67
|
-
/// !IMPORTANT Workaround
|
|
68
|
-
/// This is required for now because the worklet is run using runGuarded in C++ which does not invoke any interaction with
|
|
69
|
-
/// the event queue which means if no task is being scheduled, the worklet's side effect won't happen.
|
|
70
|
-
/// So worklet will be called but any of its interactions with the UI thread will not be visible.
|
|
71
|
-
|
|
72
|
-
/// This forces to flush queue
|
|
73
|
-
requestAnimationFrame(() => {});
|
|
74
66
|
}
|
|
75
67
|
);
|
|
76
68
|
return new WorkletNode(
|
package/src/interfaces.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { AudioEventCallback, AudioEventName } from './events/types';
|
|
1
2
|
import {
|
|
2
|
-
WindowType,
|
|
3
|
-
ContextState,
|
|
4
|
-
OscillatorType,
|
|
5
3
|
BiquadFilterType,
|
|
6
4
|
ChannelCountMode,
|
|
7
5
|
ChannelInterpretation,
|
|
6
|
+
ContextState,
|
|
7
|
+
OscillatorType,
|
|
8
|
+
WindowType,
|
|
8
9
|
} from './types';
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
export type ShareableWorkletCallback = (
|
|
12
|
+
audioBuffers: Array<ArrayBuffer>,
|
|
13
|
+
channelCount: number
|
|
14
|
+
) => void;
|
|
10
15
|
|
|
11
16
|
export interface IBaseAudioContext {
|
|
12
17
|
readonly destination: IAudioDestinationNode;
|
|
@@ -15,11 +20,11 @@ export interface IBaseAudioContext {
|
|
|
15
20
|
readonly currentTime: number;
|
|
16
21
|
|
|
17
22
|
createRecorderAdapter(): IRecorderAdapterNode;
|
|
18
|
-
createWorkletNode
|
|
19
|
-
shareableWorklet:
|
|
23
|
+
createWorkletNode(
|
|
24
|
+
shareableWorklet: ShareableWorkletCallback,
|
|
20
25
|
bufferLength: number,
|
|
21
26
|
inputChannelCount: number
|
|
22
|
-
)
|
|
27
|
+
): IWorkletNode;
|
|
23
28
|
createOscillator(): IOscillatorNode;
|
|
24
29
|
createGain(): IGainNode;
|
|
25
30
|
createStereoPanner(): IStereoPannerNode;
|
package/src/utils/index.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import type { ShareableWorkletCallback } from '../interfaces';
|
|
2
|
+
|
|
3
|
+
interface SimplifiedWorkletModule {
|
|
4
|
+
makeShareableCloneRecursive: (
|
|
5
|
+
workletCallback: ShareableWorkletCallback
|
|
6
|
+
) => ShareableWorkletCallback;
|
|
7
|
+
}
|
|
8
|
+
|
|
1
9
|
export function clamp(value: number, min: number, max: number): number {
|
|
2
10
|
return Math.min(Math.max(value, min), max);
|
|
3
11
|
}
|
|
4
12
|
|
|
5
13
|
export let isWorkletsAvailable = false;
|
|
6
|
-
export let workletsModule:
|
|
14
|
+
export let workletsModule: SimplifiedWorkletModule;
|
|
7
15
|
|
|
8
16
|
try {
|
|
9
17
|
workletsModule = require('react-native-worklets');
|