Python使用pyttsx3实现文本朗读功能的详细教程及避坑指南

 更新时间:2026年03月20日 09:20:38   作者:淡泊if  
今天给大家带来一个非常实用的Python库——pyttsx3,它可以把文字转换成语音,让你的程序开口说话,这篇文章会从零开始,一步步教你搭建环境、编写代码,并分享一些踩坑经验,需要的朋友可以参考下

大家好,今天给大家带来一个非常实用的Python库——pyttsx3。它可以把文字转换成语音,让你的程序“开口说话”。无论是做语音提醒、读新闻、还是给盲人用的辅助工具,都非常方便。

这篇文章会从零开始,一步步教你搭建环境、编写代码,并分享一些踩坑经验,比如服务器上没声音怎么办、相同文字重复合成浪费资源怎么办。

1. pyttsx3 简介

pyttsx3 是一个跨平台的文字转语音(TTS)库,支持 Windows、macOS、Linux。它直接调用系统自带的语音引擎,不需要网络,也不需要申请API密钥,完全离线使用。

特点:

  • 简单易用,几行代码就能朗读文本。
  • 可调节语速、音量,选择不同的语音(比如中文、英文)。
  • 支持将语音保存为音频文件(.wav)。

2. 环境准备

首先确保你的电脑已经安装了 Python(推荐 3.6 及以上版本)。然后用 pip 安装 pyttsx3:

pip install pyttsx3

安装完成后,你就可以开始写代码了。

3. 基础代码:让电脑开口说话

下面是一个最简示例,朗读一句中英文混合的话。

import pyttsx3

def text_to_speech(text, rate=160, volume=1.0):
    # 初始化引擎
    engine = pyttsx3.init()
    
    # 设置语速 (默认200,建议120-180)
    engine.setProperty('rate', rate)  
    
    # 设置音量 (0.0~1.0)
    engine.setProperty('volume', volume)
    
    # 设置中文语音(需要系统已安装中文语音包)
    voices = engine.getProperty('voices')
    for voice in voices:
        if "chinese" in voice.name.lower():  # 根据系统语音名称匹配
            engine.setProperty('voice', voice.id)
            break
    
    # 播报文本
    engine.say(text)
    engine.runAndWait()

# 使用示例
text_to_speech("hello world,欢迎使用pyttsx3!")

运行这段代码,如果你的电脑有扬声器,就能听到语音了。

代码解释

  • pyttsx3.init():初始化语音引擎。
  • setProperty('rate', ...):设置语速,数值越大越快,一般 120~180 比较自然。
  • setProperty('volume', ...):音量,范围 0.0~1.0。
  • getProperty('voices'):获取系统所有可用的语音。我们遍历找到包含“chinese”的语音,设为中文发音。如果找不到,就会用默认语音(通常是英文),读中文会很不自然。
  • engine.say(text):把文本加入朗读队列。
  • engine.runAndWait():开始朗读,并等待朗读结束。

4. 进阶功能:保存为音频文件

有时候我们不需要立即播放,而是想把语音存成文件,比如用在视频配音、自动生成音频内容。pyttsx3 可以轻松做到:

import pyttsx3

def text_to_speech_file(text, filename='output.wav', rate=160, volume=1.0):
    engine = pyttsx3.init()
    engine.setProperty('rate', rate)
    engine.setProperty('volume', volume)
    
    # 设置中文语音
    voices = engine.getProperty('voices')
    for voice in voices:
        if "chinese" in voice.name.lower():
            engine.setProperty('voice', voice.id)
            break
    
    # 保存到文件
    engine.save_to_file(text, filename)
    engine.runAndWait()
    print(f"音频已保存到 {filename}")

# 使用示例
text_to_speech_file("这是一段保存成文件的语音。", "test.wav")

保存后,你就可以用任何播放器播放这个 .wav 文件。

5. 避坑指南(非常重要!)

5.1 必须有扬声器/功放才能听到声音?

不一定。如果只是保存文件,不需要扬声器。但如果直接调用 engine.say(),程序会试图通过系统的音频设备播放,这时必须确保有可用的音频输出设备(比如耳机、音箱)。如果服务器没有声卡(很多云服务器都没有),播放会失败或无声。

解决方案:在服务器环境,始终使用 save_to_file 保存文件,然后把文件传给前端播放,或者用其他工具播放。

5.2 Linux / Windows Server 无法直接播放怎么办?

  • Windows Server:默认可能没有启用音频服务,或者没有声卡驱动。即使安装了语音包,调用 engine.say() 也可能没声音。建议使用 save_to_file 生成文件,然后用浏览器或其它设备播放。
  • Linux:需要安装 espeak 或其他 TTS 后端,并且确保有音频输出(比如 ALSA 配置)。如果只是生成文件,可以不用音频设备,直接用 save_to_file

5.3 相同文字重复合成浪费资源

如果你经常需要朗读相同的文字(比如固定的提示语),每次都重新合成会消耗 CPU 和时间。可以做一个简单的缓存:第一次合成后把音频文件保存下来,下次遇到相同文字直接返回文件。

示例缓存实现:

import os
import hashlib

def text_to_speech_cached(text, cache_dir='tts_cache'):
    # 创建缓存目录
    os.makedirs(cache_dir, exist_ok=True)
    # 根据文本生成文件名(哈希)
    hash_value = hashlib.md5(text.encode('utf-8')).hexdigest()
    filename = os.path.join(cache_dir, f'{hash_value}.wav')
    
    if os.path.exists(filename):
        print("使用缓存的音频文件")
        return filename
    else:
        print("合成新的音频文件")
        text_to_speech_file(text, filename)
        return filename

# 使用示例
file1 = text_to_speech_cached("你好,欢迎光临")
file2 = text_to_speech_cached("你好,欢迎光临")  # 第二次直接返回缓存文件

这样既节省时间,又避免重复合成。

5.4 中文语音包问题

  • Windows:系统自带“Microsoft Huihui”或“Microsoft Xiaoxiao”等中文语音。如果没有,可以进入“语音设置”添加中文语音包。
  • Linux:一般通过 espeak 提供,但 espeak 的中文发音比较机械。可以安装 espeak-ng 并配置中文,或者使用其他 TTS 引擎(如 Festival、Mimic)。
  • macOS:系统自带中文语音(Ting-Ting 等),一般可以直接使用。

如果你运行代码时没有听到中文,可以打印所有可用语音,看看是否有中文:

engine = pyttsx3.init()
voices = engine.getProperty('voices')
for v in voices:
    print(v.name, v.id)

根据打印结果,手动选择一个中文语音的 id 设置。

6. 总结

pyttsx3 是一个简单又强大的离线 TTS 库,非常适合 Python 开发者快速实现语音功能。通过本文,你应该已经掌握了:

  • 基本朗读功能
  • 保存为音频文件
  • 缓存机制避免重复合成
  • 常见问题及解决方法

赶快动手试试吧!如果你在服务器上运行,记得用保存文件的方式;如果希望中文更自然,可以安装更高质量的语音包(比如 Windows 上的自然语音)。欢迎在评论区交流你的应用场景和遇到的坑~

以上就是Python使用pyttsx3实现文本朗读功能的详细教程及避坑指南的详细内容,更多关于Python pyttsx3文本朗读功能的资料请关注脚本之家其它相关文章!

相关文章

  • Jupyter安装nbextensions,启动提示没有nbextensions库

    Jupyter安装nbextensions,启动提示没有nbextensions库

    这篇文章主要介绍了Jupyter安装nbextensions,启动提示没有nbextensions库,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • python批量复制图片到另一个文件夹

    python批量复制图片到另一个文件夹

    这篇文章主要为大家详细介绍了python批量复制图片到另一个文件夹,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Python import自定义模块方法

    Python import自定义模块方法

    python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面给大家介绍python import自定义模块方法,需要的的朋友参考下
    2015-02-02
  • Python实现将DNA序列存储为tfr文件并读取流程介绍

    Python实现将DNA序列存储为tfr文件并读取流程介绍

    为什么要在实验过程中存储文件,因为有些算法的内容存在一些重复计算的步骤,这些步骤往往消耗很大一部分时间,在有大量参数的情况时,需要在多次不同参数的情况下重复试验,因此可以考虑将一些不涉及参数运算的部分结果存入文件中
    2022-09-09
  • Python中使用多进程来实现并行处理的方法小结

    Python中使用多进程来实现并行处理的方法小结

    本篇文章主要介绍了Python中使用多进程来实现并行处理的方法小结,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Python实现文字pdf转换图片pdf效果

    Python实现文字pdf转换图片pdf效果

    当我们把word转化为pdf,wps默认转化为文字pdf,而图片pdf要会员。所以本文将通过Python语言实现文字pdf转换图片pdf,需要的可以参考一下
    2022-04-04
  • PyCharm运行bash脚本的实现

    PyCharm运行bash脚本的实现

    本文主要介绍了PyCharm运行bash脚本的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Python实现寻找回文数字过程解析

    Python实现寻找回文数字过程解析

    这篇文章主要介绍了Python实现寻找回文数字过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python导入SciPy的io模块使用

    python导入SciPy的io模块使用

    SciPy是一个强大的科学计算库,本文就就来介绍了python导入SciPy的io模块使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • python 初始化一个定长的数组实例

    python 初始化一个定长的数组实例

    今天小编就为大家分享一篇python 初始化一个定长的数组实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论