UNPKG

taro-hooks

Version:
50 lines 1.56 kB
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } import { createInnerAudioContext, getAvailableAudioSources } from '@tarojs/taro'; import { useRef, useEffect } from '@taro-hooks/core'; import { setInnerAudioOption } from './utils'; import usePromise from '../usePromise'; export var INITOPTION = { autoplay: false, loop: false, obeyMuteSwitch: true, playbackRate: 1, volume: 1, startTime: 0 }; function useAudio(initOption) { if (initOption === void 0) { initOption = INITOPTION; } var audioContext = useRef(createInnerAudioContext()); var sources = useRef(); var setOption = usePromise(setInnerAudioOption); var getSourceAsync = usePromise(getAvailableAudioSources); var getSources = function getSources() { return getSourceAsync().then(function (res) { sources.current = res.audioSources; return res; }); }; useEffect(function () { setOption(_extends({}, initOption, { context: audioContext.current })); getSources(); }, [initOption]); var play = function play(src) { if (audioContext.current) { if (src) { setOption({ src: src }); } audioContext.current.play(); } }; return [audioContext.current, { sources: sources.current, setOption: setOption, play: play }]; } export default useAudio;