react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
56 lines (46 loc) • 1.67 kB
text/typescript
import AudioAPIModule from '../AudioAPIModule';
import { AudioApiError } from '../errors';
export { isFfmpegEnabled } from './flags';
export function assertWorkletsEnabled() {
if (!AudioAPIModule.areWorkletsAvailable) {
throw new AudioApiError(
'[react-native-audio-api]: Worklets are not available. Please install react-native-worklets to use this feature.'
);
}
if (!AudioAPIModule.isWorkletsVersionSupported) {
throw new AudioApiError(
`[react-native-audio-api]: Worklets version ${AudioAPIModule.workletsVersion} is not supported.
Please install react-native-worklets of one of the following versions: [${AudioAPIModule.supportedWorkletsVersion.join(', ')}] to use this feature.`
);
}
}
export function clamp(value: number, min: number, max: number): number {
return Math.min(Math.max(value, min), max);
}
export function base64ToArrayBuffer(base64: string): ArrayBuffer {
const binaryString = globalThis.atob(base64);
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
export function headersFromRequestInit(
fetchOptions?: RequestInit
): Record<string, string> | undefined {
if (!fetchOptions?.headers) {
return undefined;
}
if (fetchOptions.headers instanceof Headers) {
const headers: Record<string, string> = {};
fetchOptions.headers.forEach((value, key) => {
headers[key] = value;
});
return headers;
}
if (Array.isArray(fetchOptions.headers)) {
return Object.fromEntries(fetchOptions.headers);
}
return fetchOptions.headers;
}