diff --git a/src/apis/index.js b/src/apis/index.js index cf3795f..8961934 100644 --- a/src/apis/index.js +++ b/src/apis/index.js @@ -105,7 +105,9 @@ export const apiBaiduSuggest = async (text) => { */ export const apiBaiduTTS = (text, lan = "uk", spd = 3) => { const url = `${URL_BAIDU_TTS}?${queryString.stringify({ lan, text, spd })}`; - return fetchPolyfill(url); + return fetchPolyfill(url, { + useCache: false, // 为避免缓存过快增长,禁用缓存语音数据 + }); }; /** diff --git a/src/hooks/Audio.js b/src/hooks/Audio.js index f9f2587..c3c9a1d 100644 --- a/src/hooks/Audio.js +++ b/src/hooks/Audio.js @@ -1,5 +1,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { apiBaiduTTS } from "../apis"; +import { kissLog } from "../libs/log"; /** * 声音播放hook @@ -7,13 +8,12 @@ import { apiBaiduTTS } from "../apis"; * @returns */ export function useAudio(src) { - // const audioRef = useRef(new Audio(src)); const audioRef = useRef(null); const [error, setError] = useState(null); const [ready, setReady] = useState(false); const [playing, setPlaying] = useState(false); - const play = useCallback(() => { + const onPlay = useCallback(() => { audioRef.current?.play(); }, []); @@ -33,17 +33,27 @@ export function useAudio(src) { error, ready, playing, - play, + onPlay, }; } +/** + * 获取语音hook + * @param {*} text + * @param {*} lan + * @param {*} spd + * @returns + */ export function useTextAudio(text, lan = "uk", spd = 3) { const [src, setSrc] = useState(""); useEffect(() => { (async () => { - const res = await apiBaiduTTS(text, lan, spd); - setSrc(res); + try { + setSrc(await apiBaiduTTS(text, lan, spd)); + } catch (err) { + kissLog(err, "baidu tts"); + } })(); }, [text, lan, spd]); diff --git a/src/views/Selection/AudioBtn.js b/src/views/Selection/AudioBtn.js index 510aaeb..1002178 100644 --- a/src/views/Selection/AudioBtn.js +++ b/src/views/Selection/AudioBtn.js @@ -3,13 +3,9 @@ import VolumeUpIcon from "@mui/icons-material/VolumeUp"; import { useTextAudio } from "../../hooks/Audio"; export default function AudioBtn({ text, lan = "uk" }) { - const { error, ready, playing, play } = useTextAudio(text, lan); + const { error, ready, playing, onPlay } = useTextAudio(text, lan); - if (error) { - return; - } - - if (!ready) { + if (error || !ready) { return ( @@ -26,11 +22,7 @@ export default function AudioBtn({ text, lan = "uk" }) { } return ( - { - play(); - }} - > + );