首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 实现文本转语音超详细教程!一键生成 MP3 文件!

Python 实现文本转语音超详细教程!一键生成 MP3 文件!

原创
作者头像
小白的大数据之旅
发布2025-12-02 16:27:24
发布2025-12-02 16:27:24
5280
举报

Python 实现文本转语音超详细教程!一键生成 MP3 文件!

不管你是想做个 “听书工具”,还是给程序加个语音提醒功能,Python 的文本转语音(TTS)都能帮你搞定。今天咱们就用 pyttsx3 这个库,从零开始实现 “文字变声音”,还能直接存成 MP3 文件。全程大白话,代码复制就能跑,新手也能学会!

一、先搞懂基础:为什么选 pyttsx3?

在开始之前,先跟你说下为啥选这个库 —— 毕竟 Python 做 TTS 的库不止一个:

  • 有的库(比如 gTTS)需要联网才能用,断网就歇菜;
  • 有的库依赖太多,装起来麻烦;
  • pyttsx3 是 “离线选手”,不用联网,还能自由调语速、音量,支持 Windows/macOS/Linux,最关键的是:能直接保存成 MP3!

对新手来说,这简直是 “傻瓜级工具”,所以咱们就认准它了。

二、准备工作:先把环境搭好

要干活,得先把 “工具” 装到位。就两步:装 Python、装 pyttsx3。

1. 装 Python(已装的跳过)

  • 去 Python 官网(https://www.python.org/ )下载,选 3.7 以上版本(太老的版本可能有兼容问题);
  • 安装时一定要勾上 “Add Python to PATH”(不然后续命令行找不到 Python);
  • 装完后验证:打开命令提示符(Win+R 输入 cmd 回车),输入python --version,能显示版本号就说明装好了。

2. 装 pyttsx3 库

还是在命令提示符里,输入下面这句命令,按回车等着就行:

代码语言:python
复制
pip install pyttsx3

正常情况下,几十秒就装完了。但 Windows 系统可能会出 “小插曲”—— 往下看,专门解决!

三、Windows 专属:解决依赖问题

很多人装完 pyttsx3 后,一运行就报错,比如 “找不到 pywin32”“com_error” 之类的。这是因为 Windows 需要一个额外的依赖库:pywin32(用来调用系统的语音引擎)。

解决办法:手动装 pywin32

  1. 先查自己的 Python 版本和系统位数:
  • 命令提示符输入python --version,比如显示 “Python 3.10.11”,就是 3.10 版本;
  • 看系统是 32 位还是 64 位:桌面 “此电脑” 右键→属性,就能看到。
  1. 下载对应版本的 pywin32:
  • 去这个网站下载(别担心,是官方可靠源):https://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32
  • 找到 “pywin32” 开头的文件,比如你的 Python 是 3.10、64 位系统,就选 “pywin32-227-cp310-none-win_amd64.whl”(cp310 对应 Python3.10,win_amd64 对应 64 位)。
  1. 安装下载好的文件:
  • 打开命令提示符,先切换到下载文件的文件夹(比如下载到桌面,就输入cd Desktop);
  • 输入安装命令,格式是pip install 文件名,比如:
代码语言:python
复制
pip install pywin32-227-cp310-none-win_amd64.whl
  • 装完再运行 pyttsx3,就不会报错了。

四、入门:先跑通一个简单示例

环境搭好后,咱们先写个 “Hello World” 级别的代码,感受下文本转语音的效果。

代码示例(复制就能跑)

代码语言:python
复制
# 1. 导入pyttsx3库

import pyttsx3

# 2. 初始化语音引擎(核心工具,所有操作都靠它)

engine = pyttsx3.init()

# 3. 让引擎“说”指定的文字

engine.say("大家好!我是用Python的pyttsx3库做的语音,是不是很神奇?")

# 4. 等待语音说完(如果没有这句,程序会直接结束,听不到声音)

engine.runAndWait()

# 5. 关闭引擎(可选,不写也能运行,但养成好习惯)

engine.stop()

逐行解释:

  • 第 1 行:把 pyttsx3 库引进来,不然没法用它的功能;
  • 第 2 行:init()就是 “启动引擎”,你可以理解成 “打开语音工具的开关”;
  • 第 3 行:say()里写要转语音的文字,支持中文哦;
  • 第 4 行:runAndWait()是 “等语音说完再往下走”,没这句的话,程序一闪而过,声音还没出来就结束了;
  • 第 5 行:stop()关闭引擎,释放资源,不写也能跑,但大型程序里建议加上。

运行后,你就能听到电脑在念你写的文字了!是不是很简单?

五、进阶:创建 TextToSpeech 工具类(自由调参数)

刚才的简单示例只能 “固定语音、固定语速”,不够灵活。咱们现在创建一个 TextToSpeech 类,把 “列语音、调语速、改音量、存 MP3” 这些功能都封装进去,以后想用直接调用就行。

完整工具类代码

代码语言:python
复制
import pyttsx3

class TextToSpeech:

   def __init__(self):

       """初始化语音引擎,默认设置"""

       # 启动引擎

       self.engine = pyttsx3.init()

       # 默认语速(范围:100-300,越大越快,默认200)

       self.default_rate = 200

       # 默认音量(范围:0.0-1.0,越大越响,默认1.0)

       self.default_volume = 1.0

       # 初始化时设置默认语速和音量

       self.set_rate(self.default_rate)

       self.set_volume(self.default_volume)

   def list_available_voices(self):

       """列出电脑里所有可用的语音类型(比如中文、英文)"""

       # 获取所有语音列表

       voices = self.engine.getProperty('voices')

       # 用表格形式打印,清晰

       print("="*80)

       print(f"{'序号':<5} {'语音ID':<20} {'语音名称':<30} {'支持语言':<10}")

       print("="*80)

       for index, voice in enumerate(voices):

           # 语音ID:系统识别用的标识

           voice_id = voice.id

           # 语音名称:比如“Microsoft 慧涛”(中文)、“Microsoft David”(英文)

           voice_name = voice.name

           # 支持语言:比如zh-CN(中文)、en-US(英文)

           voice_lang = voice.language

           print(f"{index:<5} {voice_id:<20} {voice_name:<30} {voice_lang:<10}")

       print("="*80)

       print("提示:设置语音时,用上面的“序号”即可")

   def set_voice(self, voice_index):

       """

       设置语音类型

       :param voice_index: 语音序号(从list_available_voices()里看)

       """

       voices = self.engine.getProperty('voices')

       # 先判断序号是否合法

       if 0 <= voice_index < len(voices):

           self.engine.setProperty('voice', voices[voice_index].id)

           print(f"已设置语音:{voices[voice_index].name}({voices[voice_index].language})")

       else:

           print(f"序号不合法!可用序号范围:0-{len(voices)-1}")

   def set_rate(self, rate):

       """

       设置语速

       :param rate: 语速值(范围100-300,默认200,建议别超过300,不然听不懂)

       """

       if 100 <= rate <= 300:

           self.engine.setProperty('rate', rate)

           print(f"已设置语速:{rate}(正常语速建议200)")

       else:

           print("语速值不合法!请设置100-300之间的数")

   def set_volume(self, volume):

       """

       设置音量

       :param volume: 音量值(范围0.0-1.0,比如0.5是一半音量,1.0是最大)

       """

       if 0.0 <= volume <= 1.0:

           self.engine.setProperty('volume', volume)

           print(f"已设置音量:{volume}(0.0最小,1.0最大)")

       else:

           print("音量值不合法!请设置0.0-1.0之间的数")

   def speak_text(self, text):

       """

       朗读文本

       :param text: 要朗读的文字(支持中文、英文)

       """

       if not text:

           print("请输入要朗读的文字!")

           return

       print(f"正在朗读:{text}")

       self.engine.say(text)

       self.engine.runAndWait()

   def save_text_to_mp3(self, text, save_path):

       """

       把文本转成MP3文件保存

       :param text: 要转换的文字

       :param save_path: 保存路径(比如"D:/test.mp3")

       """

       if not text:

           print("请输入要转换的文字!")

           return

       if not save_path.endswith(".mp3"):

           print("保存路径必须以.mp3结尾!比如"D:/audio.mp3"")

           return

      

       print(f"正在保存MP3:{save_path}")

       # 1. 设置要保存的文本

       self.engine.save_to_file(text, save_path)

       # 2. 等待保存完成(必须加这句,不然文件是空的)

       self.engine.runAndWait()

       print(f"MP3保存成功!路径:{save_path}")

工具类功能汇总(表格更清晰)

方法名

功能描述

关键参数

注意事项

list_available_voices()

列出电脑所有可用语音(中文 / 英文等)

用 “序号” 来选择语音

set_voice(voice_index)

设置语音类型

voice_index:语音序号

序号要从列表里找,不能乱输

set_rate(rate)

设置语速

rate:100-300(默认 200)

超过 300 会太快,低于 100 会太慢

set_volume(volume)

设置音量

volume:0.0-1.0(默认 1.0)

0.0 是静音,1.0 是最大声

speak_text(text)

直接朗读文本

text:要朗读的文字

支持中文、英文混合

save_text_to_mp3(text, save_path)

保存文本为 MP3 文件

text:文字;save_path:保存路径

路径必须以.mp3 结尾,要等保存完成

六、实战:用工具类实现 “朗读 + 保存 MP3”

光有类不行,咱们得实际用一下,比如 “用中文语音、中等语速、一半音量,朗读一段文字并保存成 MP3”。

实战代码示例

代码语言:python
复制
# 1. 导入咱们刚才写的TextToSpeech类(如果在同一个文件里,直接用就行)

# from 你的文件名 import TextToSpeech (如果类在其他文件,要这么导入)

# 2. 创建工具类实例

tts = TextToSpeech()

# 3. 第一步:先看电脑里有哪些语音(找中文语音的序号)

print("=== 电脑可用语音列表 ===")

tts.list_available_voices()

# 4. 第二步:设置参数(比如选中文语音,序号假设是1,具体看你电脑的列表)

tts.set_voice(1)  # 这里的1要换成你电脑里中文语音的实际序号

tts.set_rate(180)  # 语速180,比默认慢一点,更清晰

tts.set_volume(0.7)  # 音量0.7,不吵人

# 5. 第三步:朗读一段文字

print("n=== 开始朗读 ===")

test_text = "Python文本转语音教程:今天我们用pyttsx3库实现了文字转语音,还能保存成MP3文件。这个工具类真好用,以后再也不用手动录音了!"

tts.speak_text(test_text)

# 6. 第四步:把这段文字保存成MP3(保存到D盘根目录)

print("n=== 开始保存MP3 ===")

save_path = "D:/python_tts_demo.mp3"  # 注意:路径里的斜杠是"/",不是""

tts.save_text_to_mp3(test_text, save_path)

# 7. 结束后关闭引擎

tts.engine.stop()

print("n操作完成!")

运行步骤和效果:

  1. 运行代码后,先会打印出你电脑的语音列表,比如:
代码语言:python
复制
================================

序号   语音ID                语音名称                      支持语言 

================================

0     HKEY_LOCAL_MACHINE...  Microsoft David Desktop     en-US    

1     HKEY_LOCAL_MACHINE...  Microsoft 慧涛               zh-CN    

================================

提示:设置语音时,用上面的“序号”即可

这时你就知道中文语音的序号是 1,所以set_voice(1)就对了。

  1. 然后会朗读那段文字,语速 180,音量 0.7。
  2. 最后会在 D 盘根目录生成一个叫 “python_tts_demo.mp3” 的文件,打开就能听。

七、常见问题和错误(避坑指南)

刚用的时候肯定会遇到问题,我把最常见的列出来,教你怎么解决:

1. 运行报错:ModuleNotFoundError: No module named 'pyttsx3'

  • 原因:没装 pyttsx3 库,或者装了但 Python 没找到。
  • 解决:
  1. 打开命令提示符,输入pip install pyttsx3重新安装;
  2. 如果还报错,检查是不是用了多个 Python 版本(比如装了 Python3.8 和 3.10),要给对应版本装:
  • 比如用 Python3.10 的 pip,命令是pip3.10 install pyttsx3

2. Windows 报错:pywintypes.com_error: (-2147352567, ' 发生意外。', ...)

  • 原因:要么是没装 pywin32 依赖,要么是系统语音引擎损坏了。
  • 解决:
  1. 先按前面的方法装 pywin32;
  2. 如果还报错,修复系统语音引擎:
  • 打开 “控制面板”→“时钟和区域”→“区域”→“管理”→“更改系统区域设置”,选 “中国(中文,中国)”,重启电脑;
  • 重启后再试试,一般就能好。

3. 保存的 MP3 文件没声音,或者文件大小只有几 KB

  • 原因:没调用engine.runAndWait(),保存操作没执行完。
  • 解决:保存 MP3 时,一定要在save_to_file()后面加runAndWait(),就像咱们工具类里那样:
代码语言:python
复制
self.engine.save_to_file(text, save_path)

self.engine.runAndWait()  # 这句不能少!

4. 语速太快 / 太慢,听不懂

  • 原因:语速值设得太极端了。
  • 解决:把set_rate()的参数设在 150-250 之间,比如 180、200,这个范围最舒服。

5. 找不到中文语音,列表里只有英文

  • 原因:Windows 系统默认可能没装中文语音包。
  • 解决:给 Windows 装中文语音:
  1. 打开 “设置”→“时间和语言”→“语音”;
  2. 在 “语音选择” 里,如果没有中文,点 “添加语音”;
  3. 选择 “中文(中国)” 的语音包(比如 “Microsoft 慧涛”),下载安装;
  4. 重启 Python,再运行list_available_voices(),就能看到中文语音了。

八、面试会问到的问题(加分答案)

如果面试时被问到 “Python 怎么实现文本转语音”,别只说 “用 pyttsx3”,要把细节说清楚,才能加分。我整理了常考的问题和回答思路:

1. 面试官:Python 实现文本转语音有哪些库?pyttsx3 相比其他库有什么优势?

  • 回答:

常见的库有 3 个:pyttsx3、gTTS、TTS。

pyttsx3 的优势主要是 3 点:

  1. 离线可用:不用联网,gTTS 必须联网才能生成语音,断网就用不了;
  2. 支持多平台:Windows、macOS、Linux 都能用,而且能调用系统自带的语音引擎,不用额外装其他东西;
  3. 灵活可调:能直接设置语速、音量、语音类型,还能保存成 MP3,其他库要么调不了参数,要么保存麻烦。

2. 面试官:pyttsx3 怎么把文本保存成 MP3?需要注意什么?

  • 回答:

分两步:

  1. 先用engine.save_to_file(text, save_path)设置要保存的文本和路径;
  2. 再调用engine.runAndWait(),等待保存完成。

注意事项有 2 个:

  • 保存路径必须以.mp3 结尾,不然会报错;
  • 一定要加runAndWait(),因为 pyttsx3 的操作是 “异步” 的,没这句的话,保存操作不会执行,文件就会是空的。

3. 面试官:如何获取电脑中所有可用的语音类型?用代码举例说明。

  • 回答:

用 pyttsx3 的engine.getProperty('voices')就能获取所有语音列表,然后循环遍历打印出来。比如:

代码语言:python
复制
import pyttsx3

engine = pyttsx3.init()

voices = engine.getProperty('voices')

for index, voice in enumerate(voices):

   print(f"序号:{index},名称:{voice.name},语言:{voice.language}")

这样就能看到每个语音的序号、名称和支持的语言,然后用engine.setProperty('voice', voices[序号].id)来选择语音。

4. 面试官:pyttsx3 中语速和音量的调整范围是多少?怎么设置?

  • 回答:

语速范围是 100-300,默认是 200;音量范围是 0.0-1.0,默认是 1.0。

设置方法用setProperty()

代码语言:python
复制
import pyttsx3

engine = pyttsx3.init()

# 设置语速为180(比默认慢一点)

engine.setProperty('rate', 180)

# 设置音量为0.7(70%音量)

engine.setProperty('volume', 0.7)

语速建议设 150-250,音量设 0.5-0.8,这样听着最舒服。

5. 面试官:Windows 下用 pyttsx3 报错,可能的原因有哪些?怎么解决?

  • 回答:

最常见的原因有 2 个:

  1. 缺少 pywin32 依赖:解决方法是下载对应 Python 版本的 pywin32 wheel 文件,用 pip 安装;
  2. 系统语音引擎损坏或区域设置不对:解决方法是在控制面板里把系统区域设置成中文,重启电脑,修复语音引擎;
  3. 没有对应语言的语音包:解决方法是在 Windows 设置里添加对应的语音包(比如中文语音),然后重启 Python 再用。

九、总结

到这里,整个教程就结束了。咱们从环境搭建、基础示例,到创建灵活的工具类,再到解决常见问题和面试题,把 pyttsx3 实现文本转语音的知识点都讲透了。

核心要点就 3 个:

  1. 环境搭好:Python+pyttsx3+Windows 的 pywin32;
  2. 工具类封装:把列语音、调参数、存 MP3 都封装好,复用方便;
  3. 避坑:保存 MP3 要加 runAndWait (),报错先查依赖和语音引擎。

现在你可以自己动手试试,比如把小说片段转成 MP3 听,或者给你的 Python 程序加个语音提醒(比如 “程序运行完成啦!”)。有问题的话,回头看看常见问题部分,基本都能解决!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 实现文本转语音超详细教程!一键生成 MP3 文件!
    • 一、先搞懂基础:为什么选 pyttsx3?
    • 二、准备工作:先把环境搭好
      • 1. 装 Python(已装的跳过)
      • 2. 装 pyttsx3 库
    • 三、Windows 专属:解决依赖问题
      • 解决办法:手动装 pywin32
    • 四、入门:先跑通一个简单示例
      • 代码示例(复制就能跑)
      • 逐行解释:
    • 五、进阶:创建 TextToSpeech 工具类(自由调参数)
      • 完整工具类代码
      • 工具类功能汇总(表格更清晰)
    • 六、实战:用工具类实现 “朗读 + 保存 MP3”
      • 实战代码示例
      • 运行步骤和效果:
    • 七、常见问题和错误(避坑指南)
      • 1. 运行报错:ModuleNotFoundError: No module named 'pyttsx3'
      • 2. Windows 报错:pywintypes.com_error: (-2147352567, ' 发生意外。', ...)
      • 3. 保存的 MP3 文件没声音,或者文件大小只有几 KB
      • 4. 语速太快 / 太慢,听不懂
      • 5. 找不到中文语音,列表里只有英文
    • 八、面试会问到的问题(加分答案)
      • 1. 面试官:Python 实现文本转语音有哪些库?pyttsx3 相比其他库有什么优势?
      • 2. 面试官:pyttsx3 怎么把文本保存成 MP3?需要注意什么?
      • 3. 面试官:如何获取电脑中所有可用的语音类型?用代码举例说明。
      • 4. 面试官:pyttsx3 中语速和音量的调整范围是多少?怎么设置?
      • 5. 面试官:Windows 下用 pyttsx3 报错,可能的原因有哪些?怎么解决?
    • 九、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档