当前位置:首页 > JavaScript

js实现tts

2026-02-01 20:48:25JavaScript

使用Web Speech API实现TTS

Web Speech API提供了浏览器内置的文本转语音(TTS)功能,无需额外依赖库。以下是一个基础实现示例:

// 创建语音合成对象
const synth = window.speechSynthesis;

// 获取浏览器支持的语音列表(可选)
const voices = synth.getVoices();

// 基础TTS函数
function speak(text, lang = 'en-US') {
  if (synth.speaking) synth.cancel(); // 停止当前播放

  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = lang; // 设置语言
  utterance.rate = 1.0;  // 语速(0.1-10)
  utterance.pitch = 1.0; // 音高(0-2)

  // 选择特定语音(可选)
  if (voices.length > 0) {
    const targetVoice = voices.find(voice => 
      voice.lang.includes(lang)
    );
    if (targetVoice) utterance.voice = targetVoice;
  }

  synth.speak(utterance);
}

// 调用示例
speak('Hello world');

语音参数调整

可以修改SpeechSynthesisUtterance对象的属性来控制语音输出:

const utterance = new SpeechSynthesisUtterance();
utterance.text = '可调节参数的语音';
utterance.volume = 0.8;    // 音量(0-1)
utterance.rate = 0.9;      // 慢速
utterance.pitch = 1.5;     // 高音调
utterance.lang = 'zh-CN';  // 中文

// 添加事件监听
utterance.onboundary = (e) => {
  console.log(`到达边界: ${e.charIndex}处`);
};

多语言支持

通过切换lang属性支持不同语言:

// 英语
speak('Good morning', 'en-US');

// 中文
speak('早上好', 'zh-CN');

// 日语
speak('おはようございます', 'ja-JP');

浏览器兼容性处理

添加兼容性检查和错误处理:

function safeSpeak(text) {
  if (!('speechSynthesis' in window)) {
    console.error('浏览器不支持Web Speech API');
    return;
  }

  try {
    const utterance = new SpeechSynthesisUtterance(text);
    window.speechSynthesis.speak(utterance);
  } catch (e) {
    console.error('语音合成失败:', e);
  }
}

高级功能实现

实现队列系统和语音切换:

js实现tts

const speechQueue = [];
let isSpeaking = false;

function queueSpeak(text, options = {}) {
  speechQueue.push({ text, options });
  if (!isSpeaking) processQueue();
}

function processQueue() {
  if (speechQueue.length === 0) {
    isSpeaking = false;
    return;
  }

  isSpeaking = true;
  const { text, options } = speechQueue.shift();
  const utterance = new SpeechSynthesisUtterance(text);

  Object.assign(utterance, options);
  utterance.onend = processQueue;

  speechSynthesis.speak(utterance);
}

注意事项

  1. Chrome需要用户交互(如点击事件)后才能触发语音合成
  2. 移动端浏览器可能存在限制
  3. 语音列表需要等待voiceschanged事件触发后才能获取完整列表
  4. 部分语言/方言需要操作系统支持对应语音包

标签: jstts
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…