UNPKG

react-native-audio-api

Version:

react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification

116 lines (114 loc) 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSourceHeaders = getSourceHeaders; exports.resolveSourcePath = resolveSourcePath; exports.useStableAudioProps = useStableAudioProps; exports.withPropsDefaults = withPropsDefaults; var _react = require("react"); var _reactNative = require("react-native"); var _AudioContext = _interopRequireDefault(require("../core/AudioContext")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const noop = () => {}; const noopError = _error => {}; const noopNumber = _number => {}; /** * Merge props with defaults. `resolvedContext` must be stable when using the * implicit default (see `useStableAudioProps` — one `AudioContext` per hook * mount). */ function withPropsDefaults(props, resolvedContext) { return { ...props, autoPlay: props.autoPlay ?? false, controls: props.controls ?? false, loop: props.loop ?? false, muted: props.muted ?? false, preload: props.preload || 'auto', forceDownload: props.forceDownload ?? false, source: props.source ?? [], playbackRate: props.playbackRate ?? 1.0, preservesPitch: props.preservesPitch ?? true, volume: props.volume ?? 1.0, context: resolvedContext, onLoadStart: props.onLoadStart ?? noop, onLoad: props.onLoad ?? noop, onError: props.onError ?? noopError, onPositionChange: props.onPositionChange ?? noopNumber, onEnded: props.onEnded ?? noop, onPlay: props.onPlay ?? noop, onPause: props.onPause ?? noop, onVolumeChange: props.onVolumeChange ?? noopNumber }; } function useStableAudioProps(props) { const resolvedContext = (0, _react.useMemo)(() => { if (_reactNative.Platform.OS === 'web') { return undefined; } return props.context ?? new _AudioContext.default(); }, [props.context]); const { // Control Props autoPlay, controls, loop, muted, preload, forceDownload, source, playbackRate, preservesPitch, volume, context, // Event Props onLoadStart, onLoad, onError, onPositionChange, onEnded, onPlay, onPause, onVolumeChange } = withPropsDefaults(props, resolvedContext); return (0, _react.useMemo)(() => ({ // Control Props autoPlay, controls, loop, muted, preload, forceDownload, source, playbackRate, preservesPitch, volume, context, // Event Props onLoadStart, onLoad, onError, onPositionChange, onEnded, onPlay, onPause, onVolumeChange }), [autoPlay, controls, loop, muted, preload, forceDownload, source, playbackRate, preservesPitch, volume, context, onLoadStart, onLoad, onError, onPositionChange, onEnded, onPlay, onPause, onVolumeChange]); } function resolveSourcePath(source) { if (typeof source === 'string') { return source; } if (typeof source === 'number') { return _reactNative.Image.resolveAssetSource(source).uri; } return source.uri ?? ''; } function getSourceHeaders(source) { if (typeof source === 'object' && source && 'headers' in source) { return source.headers; } return undefined; } //# sourceMappingURL=utils.js.map