当前位置:首页 > 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实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现tab选项卡切换

js实现tab选项卡切换

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

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…