react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
49 lines (39 loc) • 1.38 kB
text/typescript
import AudioNode from './AudioNode.web';
import { EventEmptyType } from '../events/types';
import { RangeError, InvalidStateError } from '../errors';
export default class AudioScheduledSourceNode extends AudioNode {
protected hasBeenStarted: boolean = false;
private onEndedCallback?: (event: EventEmptyType) => void;
public start(when: number = 0): void {
if (when < 0) {
throw new RangeError(
`when must be a finite non-negative number: ${when}`
);
}
if (this.hasBeenStarted) {
throw new InvalidStateError('Cannot call start more than once');
}
this.hasBeenStarted = true;
(this.node as globalThis.AudioScheduledSourceNode).start(when);
}
public stop(when: number = 0): void {
if (when < 0) {
throw new RangeError(
`when must be a finite non-negative number: ${when}`
);
}
if (!this.hasBeenStarted) {
throw new InvalidStateError(
'Cannot call stop without calling start first'
);
}
(this.node as globalThis.AudioScheduledSourceNode).stop(when);
}
public get onEnded(): ((event: EventEmptyType) => void) | undefined {
return this.onEndedCallback;
}
public set onEnded(callback: (event: EventEmptyType) => void | null) {
(this.node as globalThis.AudioScheduledSourceNode).onended = callback;
this.onEndedCallback = callback;
}
}