diff --git a/apps/common-app/src/demos/PedalBoard/PedalBoard.tsx b/apps/common-app/src/demos/PedalBoard/PedalBoard.tsx index 05f38aeca..c58ca3db3 100644 --- a/apps/common-app/src/demos/PedalBoard/PedalBoard.tsx +++ b/apps/common-app/src/demos/PedalBoard/PedalBoard.tsx @@ -119,10 +119,7 @@ export default function PedalBoard() { } else { if (!permissionsGranted) { const recPerm = await AudioManager.requestRecordingPermissions(); - const notPerm = await AudioManager.requestNotificationPermissions(); - console.log('Recording permission:', recPerm); - // @ts-ignore - permissionsGranted = recPerm === 'Granted' && notPerm === 'granted'; + permissionsGranted = recPerm === 'Granted'; } if (permissionsGranted) { const recorder = new AudioRecorder(); diff --git a/apps/common-app/src/examples/AudioFile/AudioFile.tsx b/apps/common-app/src/examples/AudioFile/AudioFile.tsx index f7ded2f7f..b2afd9840 100644 --- a/apps/common-app/src/examples/AudioFile/AudioFile.tsx +++ b/apps/common-app/src/examples/AudioFile/AudioFile.tsx @@ -77,9 +77,9 @@ const AudioFile: FC = () => { elapsedTime: 0, }); await PlaybackNotificationManager.enableControl('skipBackward', true); - await PlaybackNotificationManager.enableControl('next', true); + await PlaybackNotificationManager.enableControl('nextTrack', true); await PlaybackNotificationManager.enableControl('skipForward', true); - await PlaybackNotificationManager.enableControl('previous', true); + await PlaybackNotificationManager.enableControl('previousTrack', true); await PlaybackNotificationManager.enableControl('pause', true); await PlaybackNotificationManager.enableControl('play', true); await PlaybackNotificationManager.enableControl('seekTo', true); diff --git a/apps/common-app/src/examples/AudioFile/AudioPlayer.ts b/apps/common-app/src/examples/AudioFile/AudioPlayer.ts index 018e78139..0c357d3c9 100644 --- a/apps/common-app/src/examples/AudioFile/AudioPlayer.ts +++ b/apps/common-app/src/examples/AudioFile/AudioPlayer.ts @@ -52,7 +52,7 @@ class AudioPlayer { this.volumeNode = this.audioContext.createGain(); this.volumeNode.gain.value = this.volume; - this.sourceNode.connect(this.audioContext.destination); + this.sourceNode.connect(this.volumeNode).connect(this.audioContext.destination); this.sourceNode.onPositionChangedInterval = 1000; this.sourceNode.onPositionChanged = (event) => { PlaybackNotificationManager.show({ @@ -108,12 +108,7 @@ class AudioPlayer { }; loadBuffer = async (asset: string | number) => { - const buffer = await decodeAudioData(asset, 0, { - headers: { - 'User-Agent': - 'Mozilla/5.0 (Android; Mobile; rv:122.0) Gecko/122.0 Firefox/122.0', - }, - }); + const buffer = await this.audioContext.decodeAudioData(asset); if (buffer) { this.audioBuffer = buffer; diff --git a/packages/audiodocs/docs/core/base-audio-context.mdx b/packages/audiodocs/docs/core/base-audio-context.mdx index 1455002c5..08905ba56 100644 --- a/packages/audiodocs/docs/core/base-audio-context.mdx +++ b/packages/audiodocs/docs/core/base-audio-context.mdx @@ -275,33 +275,11 @@ If not provided, the audio will be automatically resampled to match the audio co #### Returns `Promise`.
-Example decoding with memory block +Example decoding ```tsx const url = ... // url to an audio -const buffer = await fetch(url) - .then((response) => response.arrayBuffer()) - .then((arrayBuffer) => this.audioContext.decodeAudioData(arrayBuffer)) - .catch((error) => { - console.error('Error decoding audio data source:', error); - return null; - }); -``` -
- -
-Example using expo-asset library -```tsx -import { Asset } from 'expo-asset'; - -const buffer = await Asset.fromModule(require('@/assets/music/example.mp3')) - .downloadAsync() - .then((asset) => { - if (!asset.localUri) { - throw new Error('Failed to load audio asset'); - } - return this.audioContext.decodeAudioData(asset.localUri); - }) +const buffer = await audioContext.decodeAudioData(url); ```
diff --git a/packages/audiodocs/docs/utils/decoding.mdx b/packages/audiodocs/docs/utils/decoding.mdx index e06a62392..e518cb7f3 100644 --- a/packages/audiodocs/docs/utils/decoding.mdx +++ b/packages/audiodocs/docs/utils/decoding.mdx @@ -89,33 +89,6 @@ const buffer = await decodeAudioData(url); ``` -:::caution -Internally decoding local files uses Image component to retrieve asset uri, but it does not work on the web platform. -You can use expo-asset library for this purpose or retrieve ArrayBuffer on your own and pass it to decoding function. -::: -
-Example using expo-asset library -```tsx -import { Asset } from 'expo-asset'; -import { AudioContext } from 'react-native-audio-api'; - -const uri = await Asset.fromModule(require('@/assets/music/example.mp3')) - .downloadAsync() - .then((asset) => { - if (!asset.localUri) { - console.error('Failed to load audio asset'); - } - return asset.localUri; - }) - -const context = new AudioContext(); -if (uri) { - const buffer = await context.decodeAudioData(uri); -} - -``` -
- ### `decodePCMInBase64` Decodes base64-encoded PCM audio data. diff --git a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp index b2e785530..9ed40f703 100644 --- a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +++ b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp @@ -66,7 +66,8 @@ JSI_HOST_FUNCTION_IMPL(BiquadFilterNodeHostObject, getFrequencyResponse) { auto arrayBufferFrequency = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime); auto frequencyArray = reinterpret_cast(arrayBufferFrequency.data(runtime)); - auto length = static_cast(arrayBufferFrequency.size(runtime)); + // arrayBufferFrequency is Float32Array from JS and size is in bytes thus hardcoded division by 4 + auto length = static_cast(arrayBufferFrequency.size(runtime) / 4); auto arrayBufferMag = args[1].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime); diff --git a/packages/react-native-audio-api/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp b/packages/react-native-audio-api/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp index a2a9ba4c0..9788dd2f7 100644 --- a/packages/react-native-audio-api/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +++ b/packages/react-native-audio-api/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp @@ -21,9 +21,7 @@ AudioBufferSourceNode::AudioBufferSourceNode( loopSkip_(false), loopStart_(options.loopStart), loopEnd_(options.loopEnd) { - buffer_ = std::shared_ptr(options.buffer); - alignedBuffer_ = std::shared_ptr(nullptr); - + setBuffer(options.buffer); isInitialized_ = true; } diff --git a/packages/react-native-audio-api/src/core/AnalyserNode.ts b/packages/react-native-audio-api/src/core/AnalyserNode.ts index f2ac9ecfd..f8f0558e9 100644 --- a/packages/react-native-audio-api/src/core/AnalyserNode.ts +++ b/packages/react-native-audio-api/src/core/AnalyserNode.ts @@ -1,7 +1,7 @@ import BaseAudioContext from './BaseAudioContext'; import { IndexSizeError } from '../errors'; import { IAnalyserNode } from '../interfaces'; -import { WindowType, TAnalyserOptions } from '../types'; +import { WindowType, AnalyserOptions } from '../types'; import AudioNode from './AudioNode'; import { AnalyserOptionsValidator } from '../options-validators'; @@ -10,7 +10,7 @@ export default class AnalyserNode extends AudioNode { 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, ]; - constructor(context: BaseAudioContext, options?: TAnalyserOptions) { + constructor(context: BaseAudioContext, options?: AnalyserOptions) { AnalyserOptionsValidator.validate(options); const analyserNode: IAnalyserNode = context.context.createAnalyser( options || {} diff --git a/packages/react-native-audio-api/src/core/AudioBuffer.ts b/packages/react-native-audio-api/src/core/AudioBuffer.ts index 719ad94d8..631b4ae11 100644 --- a/packages/react-native-audio-api/src/core/AudioBuffer.ts +++ b/packages/react-native-audio-api/src/core/AudioBuffer.ts @@ -1,6 +1,6 @@ import { IAudioBuffer } from '../interfaces'; import { IndexSizeError, NotSupportedError } from '../errors'; -import { TAudioBufferOptions } from '../types'; +import { AudioBufferOptions } from '../types'; export default class AudioBuffer { readonly length: number; @@ -10,13 +10,13 @@ export default class AudioBuffer { /** @internal */ public readonly buffer: IAudioBuffer; - constructor(options: TAudioBufferOptions); + constructor(options: AudioBufferOptions); /** @internal */ constructor(buffer: IAudioBuffer); /** @internal */ - constructor(arg: TAudioBufferOptions | IAudioBuffer) { + constructor(arg: AudioBufferOptions | IAudioBuffer) { this.buffer = this.isAudioBuffer(arg) ? arg : AudioBuffer.createBufferFromOptions(arg); @@ -76,7 +76,7 @@ export default class AudioBuffer { } private static createBufferFromOptions( - options: TAudioBufferOptions + options: AudioBufferOptions ): IAudioBuffer { const { numberOfChannels = 1, length, sampleRate } = options; if (numberOfChannels < 1 || numberOfChannels >= 32) { diff --git a/packages/react-native-audio-api/src/core/AudioBufferQueueSourceNode.ts b/packages/react-native-audio-api/src/core/AudioBufferQueueSourceNode.ts index 78492ad62..e81e4768c 100644 --- a/packages/react-native-audio-api/src/core/AudioBufferQueueSourceNode.ts +++ b/packages/react-native-audio-api/src/core/AudioBufferQueueSourceNode.ts @@ -3,7 +3,7 @@ import AudioBufferBaseSourceNode from './AudioBufferBaseSourceNode'; import AudioBuffer from './AudioBuffer'; import { RangeError } from '../errors'; import BaseAudioContext from './BaseAudioContext'; -import { TBaseAudioBufferSourceOptions } from '../types'; +import { BaseAudioBufferSourceOptions } from '../types'; import { AudioEventSubscription } from '../events'; import { OnBufferEndEventType } from '../events/types'; @@ -13,7 +13,7 @@ export default class AudioBufferQueueSourceNode extends AudioBufferBaseSourceNod constructor( context: BaseAudioContext, - options?: TBaseAudioBufferSourceOptions + options?: BaseAudioBufferSourceOptions ) { const node = context.context.createBufferQueueSource(options || {}); super(context, node); diff --git a/packages/react-native-audio-api/src/core/AudioBufferSourceNode.ts b/packages/react-native-audio-api/src/core/AudioBufferSourceNode.ts index 594ef77c4..e00175ccd 100644 --- a/packages/react-native-audio-api/src/core/AudioBufferSourceNode.ts +++ b/packages/react-native-audio-api/src/core/AudioBufferSourceNode.ts @@ -4,15 +4,18 @@ import AudioBuffer from './AudioBuffer'; import { InvalidStateError, RangeError } from '../errors'; import { EventEmptyType } from '../events/types'; import { AudioEventSubscription } from '../events'; -import { TAudioBufferSourceOptions } from '../types'; +import { AudioBufferSourceOptions } from '../types'; import BaseAudioContext from './BaseAudioContext'; export default class AudioBufferSourceNode extends AudioBufferBaseSourceNode { private onLoopEndedSubscription?: AudioEventSubscription; private onLoopEndedCallback?: (event: EventEmptyType) => void; - constructor(context: BaseAudioContext, options?: TAudioBufferSourceOptions) { - const node = context.context.createBufferSource(options || {}); + constructor(context: BaseAudioContext, options?: AudioBufferSourceOptions) { + const node = context.context.createBufferSource({ + ...options, + ...(options?.buffer ? { buffer: options.buffer.buffer } : {}), + }); super(context, node); } diff --git a/packages/react-native-audio-api/src/core/BiquadFilterNode.ts b/packages/react-native-audio-api/src/core/BiquadFilterNode.ts index ddc8a3069..dbad4da44 100644 --- a/packages/react-native-audio-api/src/core/BiquadFilterNode.ts +++ b/packages/react-native-audio-api/src/core/BiquadFilterNode.ts @@ -3,7 +3,7 @@ import { IBiquadFilterNode } from '../interfaces'; import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; import BaseAudioContext from './BaseAudioContext'; -import { TBiquadFilterOptions } from '../types'; +import { BiquadFilterOptions } from '../types'; export default class BiquadFilterNode extends AudioNode { readonly frequency: AudioParam; @@ -11,7 +11,7 @@ export default class BiquadFilterNode extends AudioNode { readonly Q: AudioParam; readonly gain: AudioParam; - constructor(context: BaseAudioContext, options?: TBiquadFilterOptions) { + constructor(context: BaseAudioContext, options?: BiquadFilterOptions) { const biquadFilter: IBiquadFilterNode = context.context.createBiquadFilter( options || {} ); diff --git a/packages/react-native-audio-api/src/core/ConstantSourceNode.ts b/packages/react-native-audio-api/src/core/ConstantSourceNode.ts index af32e71e6..3a92a27af 100644 --- a/packages/react-native-audio-api/src/core/ConstantSourceNode.ts +++ b/packages/react-native-audio-api/src/core/ConstantSourceNode.ts @@ -1,5 +1,5 @@ import { IConstantSourceNode } from '../interfaces'; -import { TConstantSourceOptions } from '../types'; +import { ConstantSourceOptions } from '../types'; import AudioParam from './AudioParam'; import AudioScheduledSourceNode from './AudioScheduledSourceNode'; import BaseAudioContext from './BaseAudioContext'; @@ -7,7 +7,7 @@ import BaseAudioContext from './BaseAudioContext'; export default class ConstantSourceNode extends AudioScheduledSourceNode { readonly offset: AudioParam; - constructor(context: BaseAudioContext, options?: TConstantSourceOptions) { + constructor(context: BaseAudioContext, options?: ConstantSourceOptions) { const node: IConstantSourceNode = context.context.createConstantSource( options || {} ); diff --git a/packages/react-native-audio-api/src/core/ConvolverNode.ts b/packages/react-native-audio-api/src/core/ConvolverNode.ts index 50d4982e0..c79f7e57d 100644 --- a/packages/react-native-audio-api/src/core/ConvolverNode.ts +++ b/packages/react-native-audio-api/src/core/ConvolverNode.ts @@ -1,14 +1,15 @@ import { IConvolverNode } from '../interfaces'; -import { TConvolverOptions } from '../types'; +import { ConvolverOptions } from '../types'; import BaseAudioContext from './BaseAudioContext'; import AudioNode from './AudioNode'; import AudioBuffer from './AudioBuffer'; export default class ConvolverNode extends AudioNode { - constructor(context: BaseAudioContext, options?: TConvolverOptions) { - const convolverNode: IConvolverNode = context.context.createConvolver( - options || {} - ); + constructor(context: BaseAudioContext, options?: ConvolverOptions) { + const convolverNode: IConvolverNode = context.context.createConvolver({ + ...options, + ...(options?.buffer ? { buffer: options.buffer.buffer } : {}), + }); super(context, convolverNode); this.normalize = convolverNode.normalize; } diff --git a/packages/react-native-audio-api/src/core/DelayNode.ts b/packages/react-native-audio-api/src/core/DelayNode.ts index b71b2cb96..d4ee33300 100644 --- a/packages/react-native-audio-api/src/core/DelayNode.ts +++ b/packages/react-native-audio-api/src/core/DelayNode.ts @@ -1,12 +1,12 @@ import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; import BaseAudioContext from './BaseAudioContext'; -import { TDelayOptions } from '../types'; +import { DelayOptions } from '../types'; export default class DelayNode extends AudioNode { readonly delayTime: AudioParam; - constructor(context: BaseAudioContext, options?: TDelayOptions) { + constructor(context: BaseAudioContext, options?: DelayOptions) { const delay = context.context.createDelay(options || {}); super(context, delay); this.delayTime = new AudioParam(delay.delayTime, context); diff --git a/packages/react-native-audio-api/src/core/GainNode.ts b/packages/react-native-audio-api/src/core/GainNode.ts index 50b42b003..21f35b416 100644 --- a/packages/react-native-audio-api/src/core/GainNode.ts +++ b/packages/react-native-audio-api/src/core/GainNode.ts @@ -1,5 +1,5 @@ import { IGainNode } from '../interfaces'; -import { TGainOptions } from '../types'; +import { GainOptions } from '../types'; import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; import BaseAudioContext from './BaseAudioContext'; @@ -7,7 +7,7 @@ import BaseAudioContext from './BaseAudioContext'; export default class GainNode extends AudioNode { readonly gain: AudioParam; - constructor(context: BaseAudioContext, options?: TGainOptions) { + constructor(context: BaseAudioContext, options?: GainOptions) { const gainNode: IGainNode = context.context.createGain(options || {}); super(context, gainNode); this.gain = new AudioParam(gainNode.gain, context); diff --git a/packages/react-native-audio-api/src/core/IIRFilterNode.ts b/packages/react-native-audio-api/src/core/IIRFilterNode.ts index 94ab1a334..94ef7541b 100644 --- a/packages/react-native-audio-api/src/core/IIRFilterNode.ts +++ b/packages/react-native-audio-api/src/core/IIRFilterNode.ts @@ -1,11 +1,11 @@ import { NotSupportedError } from '../errors'; import { IIIRFilterNode } from '../interfaces'; import AudioNode from './AudioNode'; -import { TIIRFilterOptions } from '../types'; +import { IIRFilterOptions } from '../types'; import BaseAudioContext from './BaseAudioContext'; export default class IIRFilterNode extends AudioNode { - constructor(context: BaseAudioContext, options: TIIRFilterOptions) { + constructor(context: BaseAudioContext, options: IIRFilterOptions) { const iirFilterNode = context.context.createIIRFilter(options || {}); super(context, iirFilterNode); } diff --git a/packages/react-native-audio-api/src/core/OscillatorNode.ts b/packages/react-native-audio-api/src/core/OscillatorNode.ts index 0b124074a..db5e80182 100644 --- a/packages/react-native-audio-api/src/core/OscillatorNode.ts +++ b/packages/react-native-audio-api/src/core/OscillatorNode.ts @@ -4,13 +4,13 @@ import AudioParam from './AudioParam'; import BaseAudioContext from './BaseAudioContext'; import PeriodicWave from './PeriodicWave'; import { InvalidStateError } from '../errors'; -import { TOscillatorOptions } from '../types'; +import { OscillatorOptions } from '../types'; export default class OscillatorNode extends AudioScheduledSourceNode { readonly frequency: AudioParam; readonly detune: AudioParam; - constructor(context: BaseAudioContext, options?: TOscillatorOptions) { + constructor(context: BaseAudioContext, options?: OscillatorOptions) { if (options?.periodicWave) { options.type = 'custom'; } diff --git a/packages/react-native-audio-api/src/core/PeriodicWave.ts b/packages/react-native-audio-api/src/core/PeriodicWave.ts index cbcc4da86..ad23a4d07 100644 --- a/packages/react-native-audio-api/src/core/PeriodicWave.ts +++ b/packages/react-native-audio-api/src/core/PeriodicWave.ts @@ -1,11 +1,11 @@ import { IPeriodicWave } from '../interfaces'; import BaseAudioContext from './BaseAudioContext'; -import { TPeriodicWaveOptions } from '../types'; +import { PeriodicWaveOptions } from '../types'; import { PeriodicWaveOptionsValidator } from '../options-validators'; export function generateRealAndImag( - options?: TPeriodicWaveOptions -): TPeriodicWaveOptions { + options?: PeriodicWaveOptions +): PeriodicWaveOptions { let real: Float32Array | undefined; let imag: Float32Array | undefined; if (!options || (!options.real && !options.imag)) { @@ -32,7 +32,7 @@ export default class PeriodicWave { /** @internal */ public readonly periodicWave: IPeriodicWave; - constructor(context: BaseAudioContext, options?: TPeriodicWaveOptions) { + constructor(context: BaseAudioContext, options?: PeriodicWaveOptions) { const finalOptions = generateRealAndImag(options); this.periodicWave = context.context.createPeriodicWave( finalOptions.real!, diff --git a/packages/react-native-audio-api/src/core/StereoPannerNode.ts b/packages/react-native-audio-api/src/core/StereoPannerNode.ts index f77b27411..c66faef53 100644 --- a/packages/react-native-audio-api/src/core/StereoPannerNode.ts +++ b/packages/react-native-audio-api/src/core/StereoPannerNode.ts @@ -1,5 +1,5 @@ import { IStereoPannerNode } from '../interfaces'; -import { TStereoPannerOptions } from '../types'; +import { StereoPannerOptions } from '../types'; import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; import BaseAudioContext from './BaseAudioContext'; @@ -7,7 +7,7 @@ import BaseAudioContext from './BaseAudioContext'; export default class StereoPannerNode extends AudioNode { readonly pan: AudioParam; - constructor(context: BaseAudioContext, options?: TStereoPannerOptions) { + constructor(context: BaseAudioContext, options?: StereoPannerOptions) { const pan: IStereoPannerNode = context.context.createStereoPanner( options || {} ); diff --git a/packages/react-native-audio-api/src/core/StreamerNode.ts b/packages/react-native-audio-api/src/core/StreamerNode.ts index 8e82d0ee7..adf58c4ed 100644 --- a/packages/react-native-audio-api/src/core/StreamerNode.ts +++ b/packages/react-native-audio-api/src/core/StreamerNode.ts @@ -1,12 +1,12 @@ import { IStreamerNode } from '../interfaces'; import AudioScheduledSourceNode from './AudioScheduledSourceNode'; -import { TStreamerOptions } from '../types'; +import { StreamerOptions } from '../types'; import { InvalidStateError, NotSupportedError } from '../errors'; import BaseAudioContext from './BaseAudioContext'; export default class StreamerNode extends AudioScheduledSourceNode { private hasBeenSetup: boolean = false; - constructor(context: BaseAudioContext, options?: TStreamerOptions) { + constructor(context: BaseAudioContext, options?: StreamerOptions) { const node = context.context.createStreamer(options || {}); if (!node) { throw new NotSupportedError('StreamerNode requires FFmpeg build'); diff --git a/packages/react-native-audio-api/src/core/WaveShaperNode.ts b/packages/react-native-audio-api/src/core/WaveShaperNode.ts index ed0670f37..3de2f5c41 100644 --- a/packages/react-native-audio-api/src/core/WaveShaperNode.ts +++ b/packages/react-native-audio-api/src/core/WaveShaperNode.ts @@ -2,12 +2,12 @@ import AudioNode from './AudioNode'; import BaseAudioContext from './BaseAudioContext'; import { InvalidStateError } from '../errors'; import { IWaveShaperNode } from '../interfaces'; -import { TWaveShaperOptions } from '../types'; +import { WaveShaperOptions } from '../types'; export default class WaveShaperNode extends AudioNode { private isCurveSet: boolean = false; - constructor(context: BaseAudioContext, options?: TWaveShaperOptions) { + constructor(context: BaseAudioContext, options?: WaveShaperOptions) { const node = context.context.createWaveShaper(options || {}); super(context, node); if (options?.curve) { diff --git a/packages/react-native-audio-api/src/interfaces.ts b/packages/react-native-audio-api/src/interfaces.ts index 6c8b49b1d..b4f1b431e 100644 --- a/packages/react-native-audio-api/src/interfaces.ts +++ b/packages/react-native-audio-api/src/interfaces.ts @@ -10,19 +10,19 @@ import type { OscillatorType, OverSampleType, Result, - TAnalyserOptions, - TAudioBufferSourceOptions, - TBaseAudioBufferSourceOptions, - TBiquadFilterOptions, - TConstantSourceOptions, - TConvolverOptions, - TDelayOptions, - TGainOptions, - TIIRFilterOptions, - TOscillatorOptions, - TStereoPannerOptions, - TStreamerOptions, - TWaveShaperOptions, + AnalyserOptions, + BaseAudioBufferSourceOptions, + BiquadFilterOptions, + ConstantSourceOptions, + DelayOptions, + GainOptions, + IAudioBufferSourceOptions, + IConvolverOptions, + IIRFilterOptions, + OscillatorOptions, + StereoPannerOptions, + StreamerOptions, + WaveShaperOptions, WindowType, } from './types'; @@ -75,34 +75,34 @@ export interface IBaseAudioContext { shareableWorklet: ShareableWorkletCallback, shouldUseUiRuntime: boolean ): IWorkletProcessingNode; - createOscillator(oscillatorOptions: TOscillatorOptions): IOscillatorNode; + createOscillator(oscillatorOptions: OscillatorOptions): IOscillatorNode; createConstantSource( - constantSourceOptions: TConstantSourceOptions + constantSourceOptions: ConstantSourceOptions ): IConstantSourceNode; - createGain(gainOptions: TGainOptions): IGainNode; + createGain(gainOptions: GainOptions): IGainNode; createStereoPanner( - stereoPannerOptions: TStereoPannerOptions + stereoPannerOptions: StereoPannerOptions ): IStereoPannerNode; createBiquadFilter: ( - biquadFilterOptions: TBiquadFilterOptions + biquadFilterOptions: BiquadFilterOptions ) => IBiquadFilterNode; createBufferSource: ( - audioBufferSourceOptions: TAudioBufferSourceOptions + audioBufferSourceOptions: IAudioBufferSourceOptions ) => IAudioBufferSourceNode; - createDelay(delayOptions: TDelayOptions): IDelayNode; - createIIRFilter: (IIRFilterOptions: TIIRFilterOptions) => IIIRFilterNode; + createDelay(delayOptions: DelayOptions): IDelayNode; + createIIRFilter: (IIRFilterOptions: IIRFilterOptions) => IIIRFilterNode; createBufferQueueSource: ( - audioBufferQueueSourceOptions: TBaseAudioBufferSourceOptions + audioBufferQueueSourceOptions: BaseAudioBufferSourceOptions ) => IAudioBufferQueueSourceNode; createPeriodicWave: ( real: Float32Array, imag: Float32Array, disableNormalization: boolean ) => IPeriodicWave; - createAnalyser: (analyserOptions: TAnalyserOptions) => IAnalyserNode; - createConvolver: (convolverOptions?: TConvolverOptions) => IConvolverNode; - createStreamer: (streamerOptions?: TStreamerOptions) => IStreamerNode | null; // null when FFmpeg is not enabled - createWaveShaper: (waveShaperOptions?: TWaveShaperOptions) => IWaveShaperNode; + createAnalyser: (analyserOptions: AnalyserOptions) => IAnalyserNode; + createConvolver: (convolverOptions?: IConvolverOptions) => IConvolverNode; + createStreamer: (streamerOptions?: StreamerOptions) => IStreamerNode | null; // null when FFmpeg is not enabled + createWaveShaper: (waveShaperOptions?: WaveShaperOptions) => IWaveShaperNode; } export interface IAudioContext extends IBaseAudioContext { diff --git a/packages/react-native-audio-api/src/mock/index.ts b/packages/react-native-audio-api/src/mock/index.ts index 62554fdd9..dcfcfa344 100644 --- a/packages/react-native-audio-api/src/mock/index.ts +++ b/packages/react-native-audio-api/src/mock/index.ts @@ -16,19 +16,19 @@ import { OscillatorType, OverSampleType, Result, - TAnalyserOptions, - TAudioBufferSourceOptions, - TBaseAudioBufferSourceOptions, - TBiquadFilterOptions, - TConstantSourceOptions, - TConvolverOptions, - TDelayOptions, - TGainOptions, - TOscillatorOptions, - TPeriodicWaveOptions, - TStereoPannerOptions, - TStreamerOptions, - TWaveShaperOptions, + AnalyserOptions, + AudioBufferSourceOptions, + BaseAudioBufferSourceOptions, + BiquadFilterOptions, + ConstantSourceOptions, + ConvolverOptions, + DelayOptions, + GainOptions, + OscillatorOptions, + PeriodicWaveOptions, + StereoPannerOptions, + StreamerOptions, + WaveShaperOptions, } from '../types'; /* eslint-disable no-useless-constructor */ @@ -220,7 +220,7 @@ class AnalyserNodeMock extends AudioNodeMock { public maxDecibels: number = -30; public smoothingTimeConstant: number = 0.8; - constructor(context: BaseAudioContextMock, _options?: TAnalyserOptions) { + constructor(context: BaseAudioContextMock, _options?: AnalyserOptions) { super(context, {}); } @@ -233,7 +233,7 @@ class AnalyserNodeMock extends AudioNodeMock { class GainNodeMock extends AudioNodeMock { readonly gain: AudioParamMock; - constructor(context: BaseAudioContextMock, _options?: TGainOptions) { + constructor(context: BaseAudioContextMock, _options?: GainOptions) { super(context, {}); this.gain = new AudioParamMock({}, context); this.gain.value = 1; @@ -243,7 +243,7 @@ class GainNodeMock extends AudioNodeMock { class DelayNodeMock extends AudioNodeMock { readonly delayTime: AudioParamMock; - constructor(context: BaseAudioContextMock, _options?: TDelayOptions) { + constructor(context: BaseAudioContextMock, _options?: DelayOptions) { super(context, {}); this.delayTime = new AudioParamMock({}, context); this.delayTime.maxValue = 1; @@ -257,7 +257,7 @@ class BiquadFilterNodeMock extends AudioNodeMock { readonly Q: AudioParamMock; readonly gain: AudioParamMock; - constructor(context: BaseAudioContextMock, _options?: TBiquadFilterOptions) { + constructor(context: BaseAudioContextMock, _options?: BiquadFilterOptions) { super(context, {}); this.frequency = new AudioParamMock({}, context); this.detune = new AudioParamMock({}, context); @@ -288,7 +288,7 @@ class ConvolverNodeMock extends AudioNodeMock { private _buffer: AudioBufferMock | null = null; public normalize: boolean = true; - constructor(context: BaseAudioContextMock, _options?: TConvolverOptions) { + constructor(context: BaseAudioContextMock, _options?: ConvolverOptions) { super(context, {}); } @@ -305,7 +305,7 @@ class WaveShaperNodeMock extends AudioNodeMock { private _curve: Float32Array | null = null; private _oversample: OverSampleType = 'none'; - constructor(context: BaseAudioContextMock, _options?: TWaveShaperOptions) { + constructor(context: BaseAudioContextMock, _options?: WaveShaperOptions) { super(context, {}); } @@ -329,7 +329,7 @@ class WaveShaperNodeMock extends AudioNodeMock { class StereoPannerNodeMock extends AudioNodeMock { readonly pan: AudioParamMock; - constructor(context: BaseAudioContextMock, _options?: TStereoPannerOptions) { + constructor(context: BaseAudioContextMock, _options?: StereoPannerOptions) { super(context, {}); this.pan = new AudioParamMock({}, context); } @@ -340,7 +340,7 @@ class OscillatorNodeMock extends AudioScheduledSourceNodeMock { readonly frequency: AudioParamMock; readonly detune: AudioParamMock; - constructor(context: BaseAudioContextMock, _options?: TOscillatorOptions) { + constructor(context: BaseAudioContextMock, _options?: OscillatorOptions) { super(context, {}); this.frequency = new AudioParamMock({}, context); this.detune = new AudioParamMock({}, context); @@ -361,10 +361,7 @@ class OscillatorNodeMock extends AudioScheduledSourceNodeMock { class ConstantSourceNodeMock extends AudioScheduledSourceNodeMock { readonly offset: AudioParamMock; - constructor( - context: BaseAudioContextMock, - _options?: TConstantSourceOptions - ) { + constructor(context: BaseAudioContextMock, _options?: ConstantSourceOptions) { super(context, {}); this.offset = new AudioParamMock({}, context); this.offset.value = 1; @@ -380,7 +377,7 @@ class AudioBufferSourceNodeMock extends AudioScheduledSourceNodeMock { constructor( context: BaseAudioContextMock, - _options?: TAudioBufferSourceOptions + _options?: AudioBufferSourceOptions ) { super(context, {}); this.playbackRate = new AudioParamMock({}, context); @@ -438,7 +435,7 @@ class AudioBufferQueueSourceNodeMock extends AudioScheduledSourceNodeMock { constructor( context: BaseAudioContextMock, - _options?: TBaseAudioBufferSourceOptions + _options?: BaseAudioBufferSourceOptions ) { super(context, {}); } @@ -464,7 +461,7 @@ class StreamerNodeMock extends AudioScheduledSourceNodeMock { private hasBeenSetup: boolean = false; private _streamPath: string = ''; - constructor(context: BaseAudioContextMock, options?: TStreamerOptions) { + constructor(context: BaseAudioContextMock, options?: StreamerOptions) { super(context, {}); if (options?.streamPath) { this.initialize(options.streamPath); @@ -531,10 +528,7 @@ class WorkletSourceNodeMock extends AudioScheduledSourceNodeMock { } class PeriodicWaveMock { - constructor( - _context: BaseAudioContextMock, - _options?: TPeriodicWaveOptions - ) {} + constructor(_context: BaseAudioContextMock, _options?: PeriodicWaveOptions) {} } class AudioDestinationNodeMock extends AudioNodeMock { @@ -597,16 +591,16 @@ class BaseAudioContextMock { ); } - createAnalyser(options?: TAnalyserOptions): AnalyserNodeMock { + createAnalyser(options?: AnalyserOptions): AnalyserNodeMock { return new AnalyserNodeMock(this, options); } - createBiquadFilter(options?: TBiquadFilterOptions): BiquadFilterNodeMock { + createBiquadFilter(options?: BiquadFilterOptions): BiquadFilterNodeMock { return new BiquadFilterNodeMock(this, options); } createBufferSource( - options?: TAudioBufferSourceOptions + options?: AudioBufferSourceOptions ): AudioBufferSourceNodeMock { return new AudioBufferSourceNodeMock(this, options); } @@ -620,32 +614,32 @@ class BaseAudioContextMock { } createConstantSource( - options?: TConstantSourceOptions + options?: ConstantSourceOptions ): ConstantSourceNodeMock { return new ConstantSourceNodeMock(this, options); } - createConvolver(options?: TConvolverOptions): ConvolverNodeMock { + createConvolver(options?: ConvolverOptions): ConvolverNodeMock { return new ConvolverNodeMock(this, options); } - createDelay(options?: TDelayOptions): DelayNodeMock { + createDelay(options?: DelayOptions): DelayNodeMock { return new DelayNodeMock(this, options); } - createGain(options?: TGainOptions): GainNodeMock { + createGain(options?: GainOptions): GainNodeMock { return new GainNodeMock(this, options); } - createOscillator(options?: TOscillatorOptions): OscillatorNodeMock { + createOscillator(options?: OscillatorOptions): OscillatorNodeMock { return new OscillatorNodeMock(this, options); } - createStereoPanner(options?: TStereoPannerOptions): StereoPannerNodeMock { + createStereoPanner(options?: StereoPannerOptions): StereoPannerNodeMock { return new StereoPannerNodeMock(this, options); } - createWaveShaper(options?: TWaveShaperOptions): WaveShaperNodeMock { + createWaveShaper(options?: WaveShaperOptions): WaveShaperNodeMock { return new WaveShaperNodeMock(this, options); } @@ -654,12 +648,12 @@ class BaseAudioContextMock { } createBufferQueueSource( - options?: TBaseAudioBufferSourceOptions + options?: BaseAudioBufferSourceOptions ): AudioBufferQueueSourceNodeMock { return new AudioBufferQueueSourceNodeMock(this, options); } - createStreamer(options?: TStreamerOptions): StreamerNodeMock { + createStreamer(options?: StreamerOptions): StreamerNodeMock { return new StreamerNodeMock(this, options); } @@ -1092,19 +1086,19 @@ export { OscillatorType, OverSampleType, Result, - TAnalyserOptions, - TAudioBufferSourceOptions, - TBaseAudioBufferSourceOptions, - TBiquadFilterOptions, - TConstantSourceOptions, - TConvolverOptions, - TDelayOptions, - TGainOptions, - TOscillatorOptions, - TPeriodicWaveOptions, - TStereoPannerOptions, - TStreamerOptions, - TWaveShaperOptions, + AnalyserOptions, + AudioBufferSourceOptions, + BaseAudioBufferSourceOptions, + BiquadFilterOptions, + ConstantSourceOptions, + ConvolverOptions, + DelayOptions, + GainOptions, + OscillatorOptions, + PeriodicWaveOptions, + StereoPannerOptions, + StreamerOptions, + WaveShaperOptions, }; export default { diff --git a/packages/react-native-audio-api/src/options-validators.ts b/packages/react-native-audio-api/src/options-validators.ts index cda1a6462..de63a8b37 100644 --- a/packages/react-native-audio-api/src/options-validators.ts +++ b/packages/react-native-audio-api/src/options-validators.ts @@ -1,14 +1,14 @@ import { IndexSizeError, NotSupportedError } from './errors'; import { OptionsValidator, - TAnalyserOptions, - TConvolverOptions, - TOscillatorOptions, - TPeriodicWaveOptions, + AnalyserOptions, + ConvolverOptions, + OscillatorOptions, + PeriodicWaveOptions, } from './types'; -export const AnalyserOptionsValidator: OptionsValidator = { - validate(options?: TAnalyserOptions): void { +export const AnalyserOptionsValidator: OptionsValidator = { + validate(options?: AnalyserOptions): void { if (!options) { return; } @@ -25,8 +25,8 @@ export const AnalyserOptionsValidator: OptionsValidator = { }, }; -export const ConvolverOptionsValidator: OptionsValidator = { - validate(options?: TConvolverOptions): void { +export const ConvolverOptionsValidator: OptionsValidator = { + validate(options?: ConvolverOptions): void { if (!options) { return; } @@ -45,23 +45,22 @@ export const ConvolverOptionsValidator: OptionsValidator = { }, }; -export const OscillatorOptionsValidator: OptionsValidator = - { - validate(options?: TOscillatorOptions): void { - if (!options) { - return; - } - if (options.type === 'custom' && !options.periodicWave) { - throw new NotSupportedError( - "'type' cannot be set to 'custom' without providing a 'periodicWave'." - ); - } - }, - }; +export const OscillatorOptionsValidator: OptionsValidator = { + validate(options?: OscillatorOptions): void { + if (!options) { + return; + } + if (options.type === 'custom' && !options.periodicWave) { + throw new NotSupportedError( + "'type' cannot be set to 'custom' without providing a 'periodicWave'." + ); + } + }, +}; -export const PeriodicWaveOptionsValidator: OptionsValidator = +export const PeriodicWaveOptionsValidator: OptionsValidator = { - validate(options?: TPeriodicWaveOptions): void { + validate(options?: PeriodicWaveOptions): void { if (!options) { return; } diff --git a/packages/react-native-audio-api/src/types.ts b/packages/react-native-audio-api/src/types.ts index 3383c32e7..5e933f2be 100644 --- a/packages/react-native-audio-api/src/types.ts +++ b/packages/react-native-audio-api/src/types.ts @@ -1,5 +1,6 @@ import AudioBuffer from './core/AudioBuffer'; import PeriodicWave from './core/PeriodicWave'; +import { IAudioBuffer } from './interfaces'; export type Result = | ({ status: 'success' } & T) @@ -109,21 +110,21 @@ export type WindowType = 'blackman' | 'hann'; export type ProcessorMode = 'processInPlace' | 'processThrough'; -export interface TAudioNodeOptions { +export interface AudioNodeOptions { channelCount?: number; channelCountMode?: ChannelCountMode; channelInterpretation?: ChannelInterpretation; } -export interface TGainOptions extends TAudioNodeOptions { +export interface GainOptions extends AudioNodeOptions { gain?: number; } -export interface TStereoPannerOptions extends TAudioNodeOptions { +export interface StereoPannerOptions extends AudioNodeOptions { pan?: number; } -export interface TAnalyserOptions extends TAudioNodeOptions { +export interface AnalyserOptions extends AudioNodeOptions { fftSize?: number; minDecibels?: number; maxDecibels?: number; @@ -134,7 +135,7 @@ export interface OptionsValidator { validate(options?: T): void; } -export interface TBiquadFilterOptions extends TAudioNodeOptions { +export interface BiquadFilterOptions extends AudioNodeOptions { type?: BiquadFilterType; frequency?: number; detune?: number; @@ -142,61 +143,70 @@ export interface TBiquadFilterOptions extends TAudioNodeOptions { gain?: number; } -export interface TOscillatorOptions { +export interface OscillatorOptions { type?: OscillatorType; frequency?: number; detune?: number; periodicWave?: PeriodicWave; } -export interface TBaseAudioBufferSourceOptions { +export interface BaseAudioBufferSourceOptions { detune?: number; playbackRate?: number; pitchCorrection?: boolean; } -export interface TAudioBufferSourceOptions - extends TBaseAudioBufferSourceOptions { +export interface AudioBufferSourceOptions extends BaseAudioBufferSourceOptions { buffer?: AudioBuffer; loop?: boolean; loopStart?: number; loopEnd?: number; } -export interface TConvolverOptions extends TAudioNodeOptions { +// options that are passed to c++ layer +export interface IAudioBufferSourceOptions + extends BaseAudioBufferSourceOptions { + buffer?: IAudioBuffer; + loop?: boolean; + loopStart?: number; + loopEnd?: number; +} + +export interface ConvolverOptions extends AudioNodeOptions { buffer?: AudioBuffer; disableNormalization?: boolean; } -export interface TWebConvolverOptions { - buffer?: globalThis.AudioBuffer | null; - normalize?: boolean; +// options that are passed to c++ layer +export interface IConvolverOptions extends AudioNodeOptions { + buffer?: IAudioBuffer; + disableNormalization?: boolean; } -export interface TConstantSourceOptions { +export interface ConstantSourceOptions { offset?: number; } -export interface TStreamerOptions { +export interface StreamerOptions { streamPath?: string; } -export interface TPeriodicWaveConstraints { +export interface PeriodicWaveConstraints { disableNormalization?: boolean; } -export interface TPeriodicWaveOptions extends TPeriodicWaveConstraints { +export interface PeriodicWaveOptions extends PeriodicWaveConstraints { real?: Float32Array; imag?: Float32Array; } -export interface TAudioBufferOptions { +export interface AudioBufferOptions { length: number; numberOfChannels?: number; sampleRate: number; } -export interface TIIRFilterOptions extends TAudioNodeOptions { +export interface IIRFilterOptions extends AudioNodeOptions { feedforward: number[]; feedback: number[]; } @@ -224,12 +234,12 @@ export interface AudioRecorderCallbackOptions { channelCount: number; } -export interface TDelayOptions extends TAudioNodeOptions { +export interface DelayOptions extends AudioNodeOptions { maxDelayTime?: number; delayTime?: number; } -export interface TWaveShaperOptions extends TAudioNodeOptions { +export interface WaveShaperOptions extends AudioNodeOptions { curve?: Float32Array; oversample?: OverSampleType; } diff --git a/packages/react-native-audio-api/src/web-core/AnalyserNode.tsx b/packages/react-native-audio-api/src/web-core/AnalyserNode.tsx index e8a360163..44da78800 100644 --- a/packages/react-native-audio-api/src/web-core/AnalyserNode.tsx +++ b/packages/react-native-audio-api/src/web-core/AnalyserNode.tsx @@ -1,5 +1,5 @@ import AudioNode from './AudioNode'; -import { WindowType, TAnalyserOptions } from '../types'; +import { WindowType, AnalyserOptions } from '../types'; import BaseAudioContext from './BaseAudioContext'; export default class AnalyserNode extends AudioNode { @@ -9,7 +9,7 @@ export default class AnalyserNode extends AudioNode { maxDecibels: number; smoothingTimeConstant: number; - constructor(context: BaseAudioContext, analyserOptions?: TAnalyserOptions) { + constructor(context: BaseAudioContext, analyserOptions?: AnalyserOptions) { const node = new globalThis.AnalyserNode(context.context, analyserOptions); super(context, node); diff --git a/packages/react-native-audio-api/src/web-core/AudioBuffer.tsx b/packages/react-native-audio-api/src/web-core/AudioBuffer.tsx index b841e928f..332c97a39 100644 --- a/packages/react-native-audio-api/src/web-core/AudioBuffer.tsx +++ b/packages/react-native-audio-api/src/web-core/AudioBuffer.tsx @@ -1,5 +1,5 @@ import { IndexSizeError, NotSupportedError } from '../errors'; -import { TAudioBufferOptions } from '../types'; +import { AudioBufferOptions } from '../types'; export default class AudioBuffer { readonly length: number; @@ -10,13 +10,13 @@ export default class AudioBuffer { /** @internal */ public readonly buffer: globalThis.AudioBuffer; - constructor(options: TAudioBufferOptions); + constructor(options: AudioBufferOptions); /** @internal */ constructor(buffer: globalThis.AudioBuffer); /** @internal */ - constructor(arg: TAudioBufferOptions | globalThis.AudioBuffer) { + constructor(arg: AudioBufferOptions | globalThis.AudioBuffer) { this.buffer = this.isAudioBuffer(arg) ? arg : AudioBuffer.createBufferFromOptions(arg); @@ -85,7 +85,7 @@ export default class AudioBuffer { } private static createBufferFromOptions( - options: TAudioBufferOptions + options: AudioBufferOptions ): globalThis.AudioBuffer { const { numberOfChannels = 1, length, sampleRate } = options; if (numberOfChannels < 1 || numberOfChannels >= 32) { diff --git a/packages/react-native-audio-api/src/web-core/AudioBufferSourceNode.tsx b/packages/react-native-audio-api/src/web-core/AudioBufferSourceNode.tsx index 5bca7effd..b921c211c 100644 --- a/packages/react-native-audio-api/src/web-core/AudioBufferSourceNode.tsx +++ b/packages/react-native-audio-api/src/web-core/AudioBufferSourceNode.tsx @@ -6,7 +6,7 @@ import BaseAudioContext from './BaseAudioContext'; import AudioNode from './AudioNode'; import { clamp } from '../utils'; -import { TAudioBufferSourceOptions } from '../types'; +import { AudioBufferSourceOptions } from '../types'; import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm'; interface ScheduleOptions { @@ -479,8 +479,11 @@ class AudioBufferSourceNodeWeb implements IAudioAPIBufferSourceNodeWeb { readonly playbackRate: AudioParam; readonly detune: AudioParam; - constructor(context: BaseAudioContext, options?: TAudioBufferSourceOptions) { - this.node = new globalThis.AudioBufferSourceNode(context.context, options); + constructor(context: BaseAudioContext, options?: AudioBufferSourceOptions) { + this.node = new globalThis.AudioBufferSourceNode(context.context, { + ...options, + ...(options?.buffer ? { buffer: options.buffer.buffer } : {}), + }); this.detune = new AudioParam(this.node.detune, context); this.playbackRate = new AudioParam(this.node.playbackRate, context); } @@ -608,7 +611,7 @@ export default class AudioBufferSourceNode implements IAudioAPIBufferSourceNodeWeb { private node: AudioBufferSourceNodeStretcher | AudioBufferSourceNodeWeb; - constructor(context: BaseAudioContext, options?: TAudioBufferSourceOptions) { + constructor(context: BaseAudioContext, options?: AudioBufferSourceOptions) { this.node = options?.pitchCorrection ? new AudioBufferSourceNodeStretcher(context) : new AudioBufferSourceNodeWeb(context, options); diff --git a/packages/react-native-audio-api/src/web-core/BiquadFilterNode.tsx b/packages/react-native-audio-api/src/web-core/BiquadFilterNode.tsx index dd540369a..4f2fa73cb 100644 --- a/packages/react-native-audio-api/src/web-core/BiquadFilterNode.tsx +++ b/packages/react-native-audio-api/src/web-core/BiquadFilterNode.tsx @@ -2,7 +2,7 @@ import AudioParam from './AudioParam'; import AudioNode from './AudioNode'; import BaseAudioContext from './BaseAudioContext'; import { InvalidAccessError } from '../errors'; -import { TBiquadFilterOptions } from '../types'; +import { BiquadFilterOptions } from '../types'; export default class BiquadFilterNode extends AudioNode { readonly frequency: AudioParam; @@ -12,7 +12,7 @@ export default class BiquadFilterNode extends AudioNode { constructor( context: BaseAudioContext, - biquadFilterOptions?: TBiquadFilterOptions + biquadFilterOptions?: BiquadFilterOptions ) { const biquadFilter = new globalThis.BiquadFilterNode( context.context, diff --git a/packages/react-native-audio-api/src/web-core/ConstantSourceNode.tsx b/packages/react-native-audio-api/src/web-core/ConstantSourceNode.tsx index 9d8e745c1..91aad30cd 100644 --- a/packages/react-native-audio-api/src/web-core/ConstantSourceNode.tsx +++ b/packages/react-native-audio-api/src/web-core/ConstantSourceNode.tsx @@ -1,12 +1,12 @@ import AudioParam from './AudioParam'; import AudioScheduledSourceNode from './AudioScheduledSourceNode'; import BaseAudioContext from './BaseAudioContext'; -import { TConstantSourceOptions } from '../types'; +import { ConstantSourceOptions } from '../types'; export default class ConstantSourceNode extends AudioScheduledSourceNode { readonly offset: AudioParam; - constructor(context: BaseAudioContext, options?: TConstantSourceOptions) { + constructor(context: BaseAudioContext, options?: ConstantSourceOptions) { const node = new globalThis.ConstantSourceNode(context.context, options); super(context, node); this.offset = new AudioParam(node.offset, context); diff --git a/packages/react-native-audio-api/src/web-core/ConvolverNode.tsx b/packages/react-native-audio-api/src/web-core/ConvolverNode.tsx index 8a9488ed1..b39da887f 100644 --- a/packages/react-native-audio-api/src/web-core/ConvolverNode.tsx +++ b/packages/react-native-audio-api/src/web-core/ConvolverNode.tsx @@ -1,17 +1,16 @@ import BaseAudioContext from './BaseAudioContext'; import AudioNode from './AudioNode'; import AudioBuffer from './AudioBuffer'; -import { TWebConvolverOptions } from '../types'; +import { ConvolverOptions } from '../types'; export default class ConvolverNode extends AudioNode { - constructor( - context: BaseAudioContext, - convolverOptions?: TWebConvolverOptions - ) { - const convolver = new globalThis.ConvolverNode( - context.context, - convolverOptions - ); + constructor(context: BaseAudioContext, convolverOptions?: ConvolverOptions) { + const convolver = new globalThis.ConvolverNode(context.context, { + ...convolverOptions, + ...(convolverOptions?.buffer + ? { buffer: convolverOptions.buffer.buffer } + : {}), + }); const node = convolver; super(context, node); diff --git a/packages/react-native-audio-api/src/web-core/DelayNode.tsx b/packages/react-native-audio-api/src/web-core/DelayNode.tsx index b0d5ad23b..60f1e2c20 100644 --- a/packages/react-native-audio-api/src/web-core/DelayNode.tsx +++ b/packages/react-native-audio-api/src/web-core/DelayNode.tsx @@ -1,12 +1,12 @@ import BaseAudioContext from './BaseAudioContext'; import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; -import { TDelayOptions } from '../types'; +import { DelayOptions } from '../types'; export default class DelayNode extends AudioNode { readonly delayTime: AudioParam; - constructor(context: BaseAudioContext, options?: TDelayOptions) { + constructor(context: BaseAudioContext, options?: DelayOptions) { const delay = new globalThis.DelayNode(context.context, options); super(context, delay); this.delayTime = new AudioParam(delay.delayTime, context); diff --git a/packages/react-native-audio-api/src/web-core/GainNode.tsx b/packages/react-native-audio-api/src/web-core/GainNode.tsx index 4f8c98a79..9ab53534b 100644 --- a/packages/react-native-audio-api/src/web-core/GainNode.tsx +++ b/packages/react-native-audio-api/src/web-core/GainNode.tsx @@ -1,12 +1,12 @@ import BaseAudioContext from './BaseAudioContext'; import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; -import { TGainOptions } from '../types'; +import { GainOptions } from '../types'; export default class GainNode extends AudioNode { readonly gain: AudioParam; - constructor(context: BaseAudioContext, gainOptions?: TGainOptions) { + constructor(context: BaseAudioContext, gainOptions?: GainOptions) { const gain = new globalThis.GainNode(context.context, gainOptions); super(context, gain); this.gain = new AudioParam(gain.gain, context); diff --git a/packages/react-native-audio-api/src/web-core/IIRFilterNode.tsx b/packages/react-native-audio-api/src/web-core/IIRFilterNode.tsx index d31c0e3d9..8efc92d40 100644 --- a/packages/react-native-audio-api/src/web-core/IIRFilterNode.tsx +++ b/packages/react-native-audio-api/src/web-core/IIRFilterNode.tsx @@ -1,10 +1,10 @@ import { NotSupportedError } from '../errors'; import AudioNode from './AudioNode'; -import { TIIRFilterOptions } from '../types'; +import { IIRFilterOptions } from '../types'; import BaseAudioContext from './BaseAudioContext'; export default class IIRFilterNode extends AudioNode { - constructor(context: BaseAudioContext, options: TIIRFilterOptions) { + constructor(context: BaseAudioContext, options: IIRFilterOptions) { const iirFilterNode = new globalThis.IIRFilterNode( context.context, options diff --git a/packages/react-native-audio-api/src/web-core/OscillatorNode.tsx b/packages/react-native-audio-api/src/web-core/OscillatorNode.tsx index d180aa596..a8325ecff 100644 --- a/packages/react-native-audio-api/src/web-core/OscillatorNode.tsx +++ b/packages/react-native-audio-api/src/web-core/OscillatorNode.tsx @@ -1,4 +1,4 @@ -import { OscillatorType, TOscillatorOptions } from '../types'; +import { OscillatorType, OscillatorOptions } from '../types'; import { InvalidStateError } from '../errors'; import AudioScheduledSourceNode from './AudioScheduledSourceNode'; import BaseAudioContext from './BaseAudioContext'; @@ -9,7 +9,7 @@ export default class OscillatorNode extends AudioScheduledSourceNode { readonly frequency: AudioParam; readonly detune: AudioParam; - constructor(context: BaseAudioContext, options?: TOscillatorOptions) { + constructor(context: BaseAudioContext, options?: OscillatorOptions) { const node = new globalThis.OscillatorNode(context.context, options); super(context, node); diff --git a/packages/react-native-audio-api/src/web-core/PeriodicWave.tsx b/packages/react-native-audio-api/src/web-core/PeriodicWave.tsx index 471d77c6e..ce02fad5d 100644 --- a/packages/react-native-audio-api/src/web-core/PeriodicWave.tsx +++ b/packages/react-native-audio-api/src/web-core/PeriodicWave.tsx @@ -1,12 +1,12 @@ import BaseAudioContext from './BaseAudioContext'; -import { TPeriodicWaveOptions } from '../types'; +import { PeriodicWaveOptions } from '../types'; import { generateRealAndImag } from '../core/PeriodicWave'; export default class PeriodicWave { /** @internal */ readonly periodicWave: globalThis.PeriodicWave; - constructor(context: BaseAudioContext, options?: TPeriodicWaveOptions) { + constructor(context: BaseAudioContext, options?: PeriodicWaveOptions) { const finalOptions = generateRealAndImag(options); const periodicWave = context.context.createPeriodicWave( finalOptions.real!, diff --git a/packages/react-native-audio-api/src/web-core/StereoPannerNode.tsx b/packages/react-native-audio-api/src/web-core/StereoPannerNode.tsx index b163ff191..327698600 100644 --- a/packages/react-native-audio-api/src/web-core/StereoPannerNode.tsx +++ b/packages/react-native-audio-api/src/web-core/StereoPannerNode.tsx @@ -1,4 +1,4 @@ -import { TStereoPannerOptions } from '../types'; +import { StereoPannerOptions } from '../types'; import AudioNode from './AudioNode'; import AudioParam from './AudioParam'; import BaseAudioContext from './BaseAudioContext'; @@ -8,7 +8,7 @@ export default class StereoPannerNode extends AudioNode { constructor( context: BaseAudioContext, - stereoPannerOptions?: TStereoPannerOptions + stereoPannerOptions?: StereoPannerOptions ) { const pan = new globalThis.StereoPannerNode( context.context,