当前位置:首页 > React

react实现语音播报

2026-01-27 03:41:58React

使用 Web Speech API 实现语音播报

React 中可以通过浏览器原生支持的 Web Speech API 实现语音播报功能。该 API 提供了 SpeechSynthesis 接口,允许将文本转换为语音。

安装依赖(可选):

npm install react-speech-kit

基本实现代码:

react实现语音播报

import React, { useState } from 'react';

const SpeechComponent = () => {
  const [text, setText] = useState('');

  const speak = () => {
    const utterance = new SpeechSynthesisUtterance(text);
    window.speechSynthesis.speak(utterance);
  };

  return (
    <div>
      <input 
        type="text" 
        value={text} 
        onChange={(e) => setText(e.target.value)} 
      />
      <button onClick={speak}>播放语音</button>
    </div>
  );
};

export default SpeechComponent;

自定义语音参数

可以调整语音的音调、速率和音量等参数:

const speakWithOptions = () => {
  const utterance = new SpeechSynthesisUtterance(text);
  utterance.rate = 1.2;  // 语速 (0.1-10)
  utterance.pitch = 1;   // 音高 (0-2)
  utterance.volume = 1;  // 音量 (0-1)

  // 获取可用语音列表并选择特定语音
  const voices = window.speechSynthesis.getVoices();
  utterance.voice = voices.find(voice => voice.name.includes('Microsoft'));

  window.speechSynthesis.speak(utterance);
};

使用第三方库 react-speech-kit

如需更简单的实现,可以使用 react-speech-kit 库:

react实现语音播报

import { useSpeechSynthesis } from 'react-speech-kit';

const SpeechComponent = () => {
  const [text, setText] = useState('');
  const { speak } = useSpeechSynthesis();

  return (
    <div>
      <input 
        type="text" 
        value={text} 
        onChange={(e) => setText(e.target.value)} 
      />
      <button onClick={() => speak({ text })}>播放语音</button>
    </div>
  );
};

注意事项

Web Speech API 的兼容性需要考虑:

  • 主流现代浏览器均支持(Chrome、Edge、Firefox、Safari)
  • iOS 上需要用户交互才能触发语音
  • 首次使用时可能需要获取用户权限

语音合成功能在组件卸载时应取消:

useEffect(() => {
  return () => {
    window.speechSynthesis.cancel();
  };
}, []);

高级功能实现

实现语音队列和中断功能:

const [queue, setQueue] = useState([]);

const addToQueue = (newText) => {
  setQueue(prev => [...prev, newText]);
};

useEffect(() => {
  if (queue.length > 0 && !window.speechSynthesis.speaking) {
    const utterance = new SpeechSynthesisUtterance(queue[0]);
    utterance.onend = () => {
      setQueue(prev => prev.slice(1));
    };
    window.speechSynthesis.speak(utterance);
  }
}, [queue]);

标签: 语音react
分享给朋友:

相关文章

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。 /…

react如何重置

react如何重置

重置 React 应用的状态 使用 useState 钩子重新初始化状态变量是最直接的方法。将状态变量重置为初始值或空值即可完成重置。 const [count, setCount] = useSt…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

react如何引入echarts

react如何引入echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库: npm install echarts echarts-for-react 基础引入方式 创建…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom #…

react如何获取光标

react如何获取光标

获取光标位置的方法 在React中获取光标位置通常涉及处理输入框或文本区域的onChange或onSelect事件。以下是几种常见的方法: 通过selectionStart和selectionEnd…