react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
50 lines (42 loc) • 1.44 kB
text/typescript
import AudioAPIModule from '../AudioAPIModule';
import { NotSupportedError } from '../errors';
import { AudioTagHandle } from '../Audio/types';
import { IAudioContext } from '../jsi-interfaces';
import AudioManager from '../system';
import { AudioContextOptions } from '../types';
import BaseAudioContext from './BaseAudioContext';
import MediaElementAudioSourceNode from './MediaElementAudioSourceNode';
export default class AudioContext extends BaseAudioContext {
constructor(options?: AudioContextOptions) {
if (
options &&
options.sampleRate &&
(options.sampleRate < 8000 || options.sampleRate > 96000)
) {
throw new NotSupportedError(
`The provided sampleRate is not supported: ${options.sampleRate}`
);
}
const audioRuntime = AudioAPIModule.createAudioRuntime();
super(
globalThis.createAudioContext(
options?.sampleRate || AudioManager.getDevicePreferredSampleRate(),
audioRuntime
)
);
}
async close(): Promise<void> {
return (this.context as IAudioContext).close();
}
async resume(): Promise<void> {
await (this.context as IAudioContext).resume();
}
async suspend(): Promise<void> {
await (this.context as IAudioContext).suspend();
}
createMediaElementSource(
mediaElement: AudioTagHandle
): MediaElementAudioSourceNode {
return new MediaElementAudioSourceNode(this, { mediaElement });
}
}