taro-hooks
Version:
为 Taro 而设计的 Hooks Library
50 lines • 1.56 kB
JavaScript
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;