当前位置:首页 > JavaScript

js实现听书

2026-01-31 16:46:19JavaScript

实现思路

通过Web Speech API中的SpeechSynthesis接口可以实现文本转语音功能。该API允许浏览器将文本内容转换为语音播放,适合实现听书功能。

基础代码实现

// 获取语音合成对象
const synth = window.speechSynthesis;

// 创建语音实例
function speak(text) {
    if (synth.speaking) {
        synth.cancel();
    }

    const utterance = new SpeechSynthesisUtterance(text);
    utterance.rate = 1; // 语速 (0.1-10)
    utterance.pitch = 1; // 音高 (0-2)
    utterance.lang = 'zh-CN'; // 中文普通话

    synth.speak(utterance);
}

// 调用示例
speak("这是一段测试文本");

功能扩展

添加暂停/继续控制功能

let isPaused = false;

function togglePlayback() {
    if (isPaused) {
        synth.resume();
        isPaused = false;
    } else {
        synth.pause();
        isPaused = true;
    }
}

语音选择

获取并切换可用语音

js实现听书

function populateVoices() {
    const voices = synth.getVoices();
    const voiceSelect = document.getElementById('voice-select');

    voices.forEach(voice => {
        const option = document.createElement('option');
        option.textContent = `${voice.name} (${voice.lang})`;
        option.setAttribute('data-name', voice.name);
        voiceSelect.appendChild(option);
    });
}

// 需要等待语音列表加载
synth.onvoiceschanged = populateVoices;

注意事项

  1. 部分浏览器需要用户交互(如点击事件)后才能触发语音播放
  2. 移动端可能存在自动暂停限制,需要保持屏幕常亮
  3. 不同浏览器支持的语音质量和语言可能有差异

完整示例

<!DOCTYPE html>
<html>
<body>
    <textarea id="text-input" rows="10"></textarea>
    <button id="play-btn">播放</button>
    <button id="pause-btn">暂停/继续</button>
    <select id="voice-select"></select>

    <script>
        document.getElementById('play-btn').addEventListener('click', () => {
            const text = document.getElementById('text-input').value;
            speak(text);
        });

        // 其他功能实现代码...
    </script>
</body>
</html>

该实现方案主要依赖浏览器原生API,无需额外库,兼容现代浏览器。对于更复杂的需求,可以考虑结合Web Audio API进行音频处理,或使用第三方TTS服务获得更高质量的语音合成效果。

标签: js
分享给朋友:

相关文章

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…