浏览器自带 TTS 能力。
:::info SpeechSynthesis 是一个 JavaScript API 的名称,用于合成语音。它是 Web Audio API 的一部分,允许开发者在网页上实时合成语音。SpeechSynthesis 使用 Text-to-Speech 技术来将文本转换为语音,可以将文本转换为不同的语言和声音。
SpeechSynthesis 的主要方法有以下几种:
- speak() - 用于合成语音。可以提供一段文本,以及一些 Optional 的参数,如语言、声音、音速、音高等。
- pause() - 用于暂停语音合成。
- resume() - 用于继续语音合成。
- cancel() - 用于取消语音合成。
例如,以下代码使用 SpeechSynthesis 合成了一段文本的语音:
:::
const synth = window.speechSynthesis;
synth.speak('Hello, world!', {
language: 'en-US',
voice: 'slt_kevin',
speed: 1,
pitch: 1
});
:::info 在上面的代码中,我们使用 speak() 方法将文本「Hello, world!」进行合成,并指定了语言、声音、音速和音高。
需要注意的是,SpeechSynthesis 的支持度不 uniform,不同的浏览器和操作系统可能支持不同的语言和声音。同时,SpeechSynthesis 也可能会受到用户的语言和地区设置的影响。
:::
示例 Hook
import { useCallback,useState } from "react";
export const useSpeachSynthesisApi = () => {
const [text, setText] = useState<string>("");
const [isSpeaking, setIsSpeaking] = useState<boolean>(false);
const [isPaused, setIsPaused] = useState<boolean>(false);
const [isResumed, setIsResumed] = useState<boolean>(false);
const [isEnded, setIsEnded] = useState<boolean>(false);
const speak = useCallback(() => {
var msg = new SpeechSynthesisUtterance();
msg.text = <string>text;
function speak() {
window.speechSynthesis.speak(msg);
}
speak();
setIsSpeaking(true);
setIsEnded(false);
}, [text]);
const pause = useCallback(() => {
function pause() {
window.speechSynthesis.pause();
}
pause();
setIsPaused(true);
setIsSpeaking(false);
setIsEnded(false);
setIsResumed(false);
}, []);
const resume = useCallback(() => {
function resume() {
window.speechSynthesis.resume();
}
resume();
setIsPaused(false);
setIsSpeaking(false);
setIsEnded(false);
setIsResumed(true);
}, []);
const cancel = useCallback(() => {
function cancel() {
window.speechSynthesis.cancel();
}
cancel();
setIsPaused(false);
setIsResumed(false);
setIsSpeaking(false);
setIsEnded(true);
}, []);
return {
text,
setText,
isSpeaking,
isPaused,
isResumed,
isEnded,
speak,
pause,
resume,
cancel
}
}