Python使用pyttsx3庫(kù)實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音的完整教程
從安裝到實(shí)戰(zhàn),一篇搞定!支持中英文,附完整代碼示例
pyttsx3 是什么
pyttsx3 是 Python 最流行的 離線文本轉(zhuǎn)語(yǔ)音(TTS)庫(kù)。
核心特點(diǎn)
| 特性 | 說(shuō)明 |
|---|---|
| 離線運(yùn)行 | 無(wú)需聯(lián)網(wǎng),無(wú)需API |
| 支持中文 | 完美支持中英文 |
| 跨平臺(tái) | Windows / Mac / Linux |
| 速度快 | 實(shí)時(shí)語(yǔ)音合成 |
| 可定制 | 語(yǔ)速、音量、語(yǔ)音均可調(diào) |
安裝步驟
方式1:pip 安裝(推薦)
# 基礎(chǔ)安裝 pip install pyttsx3 # Windows 用戶額外安裝(必須?。? pip install pypiwin32 # 如果遇到版本問(wèn)題,使用穩(wěn)定版 pip install pyttsx3==2.90
方式2:虛擬環(huán)境安裝(最佳實(shí)踐)
# 創(chuàng)建虛擬環(huán)境 python -m venv tts_env # 激活環(huán)境 # Windows: tts_env\Scripts\activate # Mac/Linux: source tts_env/bin/activate # 安裝 pip install pyttsx3 pypiwin32
驗(yàn)證安裝
import pyttsx3 print(pyttsx3.__version__) # 應(yīng)輸出 2.90 或更高
快速開(kāi)始(3行代碼)
import pyttsx3
engine = pyttsx3.init()
engine.say("Hello, 我是Python!")
engine.runAndWait()
運(yùn)行后,你的電腦就會(huì)說(shuō)話了! ??
核心參數(shù)詳解
參數(shù)1:調(diào)整音量(0.0 ~ 1.0)
import pyttsx3
engine = pyttsx3.init()
# 查看當(dāng)前音量
volume = engine.getProperty('volume')
print(f"當(dāng)前音量: {volume}") # 默認(rèn) 1.0
# 設(shè)置音量(0.0 = 靜音,1.0 = 最大)
engine.setProperty('volume', 0.5) # 50% 音量
engine.say("這是半音量的語(yǔ)音")
engine.runAndWait()
| 音量值 | 效果 |
|---|---|
| 0.0 | ?? 靜音 |
| 0.3 | ?? 小聲 |
| 0.7 | ?? 正常 |
| 1.0 | ?? 最大 |
參數(shù)2:調(diào)整語(yǔ)速(50 ~ 300)
import pyttsx3
engine = pyttsx3.init()
# 查看當(dāng)前語(yǔ)速
rate = engine.getProperty('rate')
print(f"當(dāng)前語(yǔ)速: {rate}") # 默認(rèn) 200
# 設(shè)置語(yǔ)速
engine.setProperty('rate', 150) # 變慢
engine.say("這是慢速語(yǔ)音")
engine.runAndWait()
engine.setProperty('rate', 250) # 變快
engine.say("這是快速語(yǔ)音")
engine.runAndWait()
| 語(yǔ)速值 | 效果 |
|---|---|
| 50 | ?? 極慢(像樹(shù)懶) |
| 150 | ?? 慢速(適合教學(xué)) |
| 200 | ?? 默認(rèn)(正常說(shuō)話) |
| 300 | ?? 極快(像松鼠) |
參數(shù)3:切換語(yǔ)音(中英文)
import pyttsx3
engine = pyttsx3.init()
# 查看所有可用語(yǔ)音
voices = engine.getProperty('voices')
for i, voice in enumerate(voices):
print(f"[{i}] {voice.name}")
print(f" ID: {voice.id}\n")
# 切換到中文語(yǔ)音(通常索引為 1)
engine.setProperty('voice', voices[1].id)
engine.say("你好,這是中文語(yǔ)音")
engine.runAndWait()
# 切換到英文語(yǔ)音(通常索引為 0)
engine.setProperty('voice', voices[0].id)
engine.say("Hello, this is English")
engine.runAndWait()
輸出示例(Windows):
[0] Microsoft David
ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0
[1] Microsoft Huihui
ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0
進(jìn)階功能
功能1:保存為音頻文件
import pyttsx3
engine = pyttsx3.init()
# 保存為 MP3 文件
engine.save_to_file("你好,這是保存的音頻", "output.mp3")
engine.runAndWait()
print("? 音頻已保存到 output.mp3")
功能2:暫停和繼續(xù)
import pyttsx3
engine = pyttsx3.init()
engine.say("這是第一句")
engine.runAndWait()
engine.say("這是第二句")
engine.runAndWait()
# 暫停
engine.stop()
# 繼續(xù)(需要重新初始化)
engine = pyttsx3.init()
engine.say("這是第三句")
engine.runAndWait()
功能3:批量朗讀文本
import pyttsx3
def read_text(text, lang='cn'):
engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id if lang == 'cn' else voices[0].id)
engine.setProperty('rate', 150)
engine.say(text)
engine.runAndWait()
# 批量朗讀
texts = [
"第一句:Python真好用",
"第二句:文本轉(zhuǎn)語(yǔ)音太酷了",
"第三句:Hello World"
]
for text in texts:
read_text(text)
完整實(shí)戰(zhàn)案例
案例1:智能語(yǔ)音助手類(lèi)
import pyttsx3
class VoiceAssistant:
def __init__(self):
self.engine = pyttsx3.init()
self.voices = self.engine.getProperty('voices')
def speak(self, text, lang='cn', rate=150, volume=0.8):
"""通用朗讀方法"""
# 設(shè)置語(yǔ)音
voice_id = self.voices[1].id if lang == 'cn' else self.voices[0].id
self.engine.setProperty('voice', voice_id)
# 設(shè)置參數(shù)
self.engine.setProperty('rate', rate)
self.engine.setProperty('volume', volume)
# 朗讀
self.engine.say(text)
self.engine.runAndWait()
def speak_cn(self, text):
"""中文朗讀"""
self.speak(text, lang='cn')
def speak_en(self, text):
"""英文朗讀"""
self.speak(text, lang='en')
def save_audio(self, text, filename):
"""保存音頻"""
self.engine.save_to_file(text, filename)
self.engine.runAndWait()
# ?? 使用示例
assistant = VoiceAssistant()
assistant.speak_cn("你好,我是你的智能語(yǔ)音助手!")
assistant.speak_en("Hello, I am your voice assistant!")
assistant.save_audio("測(cè)試保存", "test.mp3")
案例2:閱讀器(朗讀文本文件)
import pyttsx3
def read_file(filepath, lang='cn'):
"""朗讀文本文件"""
try:
with open(filepath, 'r', encoding='utf-8') as f:
text = f.read()
engine = pyttsx3.init()
voices = engine.getProperty('voices')
voice_id = voices[1].id if lang == 'cn' else voices[0].id
engine.setProperty('voice', voice_id)
engine.setProperty('rate', 150)
engine.say(text)
engine.runAndWait()
print(f"? 已朗讀文件: {filepath}")
except FileNotFoundError:
print(f"? 文件不存在: {filepath}")
# 使用
read_file("article.txt", lang='cn')
案例3:語(yǔ)音鬧鐘
import pyttsx3
import time
def voice_alarm(hour, minute, message):
"""語(yǔ)音鬧鐘"""
engine = pyttsx3.init()
engine.setProperty('rate', 180)
engine.setProperty('volume', 1.0)
while True:
now = time.localtime()
if now.tm_hour == hour and now.tm_min == minute:
engine.say(f"鬧鐘響了!{message}")
engine.runAndWait()
break
time.sleep(30) # 每30秒檢查一次
# 設(shè)置早上7:30的鬧鐘
voice_alarm(7, 30, "起床啦!新的一天開(kāi)始了!")
常見(jiàn)錯(cuò)誤及解決方案
錯(cuò)誤1:SyntaxError: invalid syntax(海象運(yùn)算符)
原因:Python 版本 < 3.8
解決:
pip install pyttsx3==2.90
錯(cuò)誤2:_ctypes.COMError: (-2147200966, ...)
原因:找不到可用語(yǔ)音
解決:
import pyttsx3
engine = pyttsx3.init()
# ?? 關(guān)鍵:手動(dòng)設(shè)置語(yǔ)音
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)
engine.say("測(cè)試成功")
engine.runAndWait()
錯(cuò)誤3:KeyError: None
原因:驅(qū)動(dòng)初始化失敗
解決:
pip uninstall pyttsx3 -y pip install pyttsx3==2.90 pip install pypiwin32
錯(cuò)誤4:沒(méi)有中文語(yǔ)音
解決:
Win + I→ 時(shí)間和語(yǔ)言 → 語(yǔ)音- 點(diǎn)擊 “添加語(yǔ)音”
- 搜索 “Chinese” 并安裝
- 重啟電腦
總結(jié)速查表
| 操作 | 代碼 |
|---|---|
| 初始化 | engine = pyttsx3.init() |
| 說(shuō)話 | engine.say("文本") |
| 執(zhí)行 | engine.runAndWait() |
| 語(yǔ)速 | engine.setProperty('rate', 150) |
| 音量 | engine.setProperty('volume', 0.8) |
| 切換語(yǔ)音 | engine.setProperty('voice', voices[0].id) |
| 保存文件 | engine.save_to_file("文本", "file.mp3") |
| 查看語(yǔ)音 | voices = engine.getProperty('voices') |
延伸推薦
| 庫(kù) | 特點(diǎn) | 適用場(chǎng)景 |
|---|---|---|
| pyttsx3 | 離線、可定制 | 桌面應(yīng)用、嵌入式 |
| gTTS | 聯(lián)網(wǎng)、音質(zhì)好 | 在線服務(wù)、API |
| edge-tts | 微軟語(yǔ)音、自然 | 高質(zhì)量語(yǔ)音生成 |
| pyttsx4 | pyttsx3 升級(jí)版 | 未來(lái)替代方案 |
到此這篇關(guān)于Python使用pyttsx3庫(kù)實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音的完整教程的文章就介紹到這了,更多相關(guān)Python pyttsx3文本轉(zhuǎn)語(yǔ)音內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python文本轉(zhuǎn)語(yǔ)音引擎pyttsx3的使用完全指南
- Python pyttsx3庫(kù)實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音功能的示例
- Python文本到語(yǔ)音轉(zhuǎn)換庫(kù)pyttsx3的安裝及使用全面指南
- python利用pyttsx3 API實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音處理
- 從入門(mén)到實(shí)戰(zhàn)詳解Python文本轉(zhuǎn)語(yǔ)音的完全指南
- 基于Python和Tkinter實(shí)現(xiàn)文本文件轉(zhuǎn)換為MP3語(yǔ)音文件
- 利用Python開(kāi)發(fā)一個(gè)簡(jiǎn)單實(shí)用的文本轉(zhuǎn)語(yǔ)音工具
相關(guān)文章
Python使用文件操作實(shí)現(xiàn)一個(gè)XX信息管理系統(tǒng)的示例
這篇文章主要介紹了Python使用文件操作實(shí)現(xiàn)一個(gè)XX信息管理系統(tǒng)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Tensorflow實(shí)現(xiàn)部分參數(shù)梯度更新操作
今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)部分參數(shù)梯度更新操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
numpy.sum()坐標(biāo)軸問(wèn)題的解決
本文主要介紹了numpy.sum()坐標(biāo)軸問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
基于pytorch中的Sequential用法說(shuō)明
這篇文章主要介紹了基于pytorch中的Sequential用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python中文分詞工具之結(jié)巴分詞用法實(shí)例總結(jié)【經(jīng)典案例】
這篇文章主要介紹了Python中文分詞工具之結(jié)巴分詞用法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)中文文件的讀取與分詞操作過(guò)程中遇到的問(wèn)題與解決方法,需要的朋友可以參考下2017-04-04
Flask框架學(xué)習(xí)筆記(一)安裝篇(windows安裝與centos安裝)
Flask是一個(gè)輕量級(jí)的Web應(yīng)用框架, 使用Python編寫(xiě)。Flask也被稱為 “microframework” ,因?yàn)樗褂煤?jiǎn)單的核心,用 extension 增加其他功能。2014-06-06
DJANGO-ALLAUTH社交用戶系統(tǒng)的安裝配置
django-allauth是集成了local用戶系統(tǒng)和social用戶系統(tǒng),其social用戶系統(tǒng)可以掛載多個(gè)賬戶。也是一個(gè)流行度非常高的Django user系統(tǒng),我們這里簡(jiǎn)單介紹下,分享下個(gè)人的使用經(jīng)驗(yàn)2014-11-11

