利用 Python pyttsx3實現文字轉語音(TTS)

今天,我想跟大家分享如何利用 Python 編程語言,來實現文字轉換為語音的功能,也就是我們常說的 Text-to-Speech (TTS) 技術。

你可能會好奇,為什么學習這個?想象一下,如果你想把書本、文章、雜志的內容轉換為語音來“聽”,而不是單純地“看”,這個技術就能派上用場。或者,如果你正在開發一個跨平臺的系統,需要整合定制化的語音服務,TTS 也能提供強大的支持。甚至,如果你手頭已經有寫好的腳本,想快速轉換為視頻的旁白聲音,TTS 也能大幅加快你的工作速度。

現在市面上其實已經有很多成熟的 TTS 服務了。比如說,Google 就提供相當高質量的 TTS 服務,發音自然,速度也快。不過,一旦超出了免費使用額度,就需要付費。臺灣也有本地化的選擇,像是“雅婷文字轉語音”,它更貼近臺灣口音,對于服務本地用戶非常有幫助。這些商用服務質量通常比較好,處理速度也快。

但是,如果你的需求是比較輕量級的,例如只是想為自己打造一個小工具,或者開發一個不需要大規模部署的小型服務,那么使用 Python 的?pyttsx3?套件就會是一個非常方便且免費的選擇。這個套件提供了相當完整的 API 文檔,我個人覺得用起來非常直觀。你可以去查詢它的官方文檔,我在文末也會提供相關鏈接或搜索提示。

好了,話不多說,我們來看看如何實際使用?pyttsx3?吧。

要使用這個套件,第一步當然是先安裝它。安裝很簡單,通常就是通過 pip 指令。確認安裝好之后,我們就可以在 Python 環境中開始寫代碼了。為了方便演示,我選擇在 Jupyter Notebook 的環境下來進行。

首先,我們需要把?pyttsx3?套件導入到代碼中:

import pyttsx3

接著,我會定義一個變量?txt,把我們想要轉換為語音的文字放在里面。這里先用一個簡單的例子:

txt = "Hello Ryan"

再來,我們需要一個“引擎”來幫我們做轉換的工作。我定義一個變量?engine?來代表這個對象:

engine = pyttsx3.init()

初始化好引擎之后,之后的所有操作,幾乎都是通過這個?engine?變量來進行。

下一步,我們告訴引擎要“說出”什么文字。套件提供了一個很直白的函數叫做?say():

engine.say(txt)

最后,也是關鍵的一步,調用?runAndWait()?函數。這個函數會執行語音轉換的過程,并且會等待聲音播放完畢:

engine.runAndWait()

好,到這里基本的操作就完成了。執行這段代碼,你應該就能聽到你的電腦將 "Hello Ryan" 這幾個字說出來了。

不過,你可能會發現,默認的語音聽起來速度好像有點快,而且語調不一定是最理想的。別擔心,pyttsx3?允許我們進行調整。

前面提到,pyttsx3?的 API 文檔很有用。通過查閱文檔,我們可以找到像?getProperty()?這樣的函數,用來獲取引擎目前的屬性設置。常用的屬性有四種:語速 (rate)、語音 (voice)、可用的語音列表 (voices) 和音量 (volume)。

其中,rate?代表說話的速度。如果沒有特別設置,默認值通常是每分鐘 200 個字。

而?voices?會列出所有我們系統上可用的語音選項。這個列表是會根據你的操作系統而有所不同的。比如說,我目前用的是 Apple 的 macOS 系統,所以在列表中看到的語音 ID 會是?apple?開頭的。

列表里面列出了很多語音選項,它們代表不同的語言和發音人。你可以通過?getProperty('voices')?來查看你系統上提供了哪些語音。每一個語音都有一個獨特的 ID。

假設我在列表中看到一個名字叫做?samantha?的語音,它的語言是英文。我想使用這個語音來發音,并且希望速度慢一點,讓聲音更清晰。我可以這樣設置:

首先,使用?setProperty()?函數來設置屬性值:

voice_id = "你的英文語音ID,例如 apple speect:Samantha" # 替換成你系統上實際的英文語音ID
engine.setProperty('voice', voice_id)

然后,設置語速。因為 "Hello Ryan" 只有兩個單詞,說太快一下就過去了,我把語速調低一點,例如設置為 50:

engine.setProperty('rate', 50) # 設置語速為每分鐘 50 字

設置完成后,再執行?say?和?runAndWait:

engine.say("Hello mike")
engine.runAndWait()

聽起來是不是比剛才好多了?

你也可以嘗試其他的語音設置。像我試過一個 ID 叫做?Fred?的語音設置,據說這是 1984 年喬布斯介紹第一臺 Macintosh 電腦時,第一次使用電腦將文字轉換為語音時的發音。雖然聽起來年代感十足,但還挺清晰的。這就展現了選擇不同語音的多樣性。

除了直接在代碼中寫死文字,很多時候我們需要讀取外部文件中的文字。pyttsx3?也完全支持這一點。

我可以在設置好屬性的代碼下方,加入讀取文件的部分。我使用 Python 常用的?with open()?關鍵字來打開一個已經準備好的文字文件(假設我把文字內容儲存在?my_article.txt?這個文件里)。我給這個打開的文件對象取名為?file。

接著,我使用一個?for?循環,一行一行地讀取文件中的文字。在讓引擎讀出文字之前,我習慣先把它打印出來看看,確保讀取的是正確的內容。

with open('my_article.txt', 'r', encoding='utf-8') as file: # 請注意編碼設置for line in file:print(line.strip()) # 打印出該行文字engine.say(line) # 將該行文字加入待朗讀隊列

讀取完成后,別忘了最后調用?engine.runAndWait()?讓引擎開始讀:

engine.runAndWait()

我前面大部分演示都用了英文,現在來試試看中文的轉換效果如何。要讀中文,最好是將?voice?設置為中文的語音。語速方面,中文的速度感和英文不太一樣,我設置為每分鐘 120 個字試試看。

文字文件的內容,我找了一段中文文章的片段作為范例。這段文字可能來自一篇關于媒體轉型、如何應對社交媒體挑戰的討論。將這段中文貼入文字檔后,運行代碼:

chinese_voice_id = "你的中文語音ID,例如 com.apple.ttsbundle.zh-CN_Yu-Mai" # 替換成你系統上的中文語音ID,注意可能需要找zh-CN開頭的ID
engine.setProperty('voice', chinese_voice_id)
engine.setProperty('rate', 120) # 設置中文語速with open('chinese_article.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())engine.say(line)engine.runAndWait()

聽聽看效果如何。你會發現這組語音設置是我們經常聽到的中文發音。除了我系統上的腔調,通常還會有其他中文發音選項(例如香港的粵語發音等),你可以根據需求自由選擇。

pyttsx3?支持的語音語言非常多樣,像是韓語、德語、日語等等。最好的實踐就是根據你要轉換的文字的語言,設置對應語言的語音,這樣說出來的效果才是最自然的。你可以通過?getProperty('voices')?來探索所有你系統上支持的語言和語音。

我在日本福岡生活和工作了一段時間,我想測試一下日語的 TTS 效果如何,順便分享一個我覺得很漂亮的景點——海中道海浜公園。特別是秋天,那里的花季非常美。這個公園很大,很適合親子或朋友一起去散步。

我在福岡市政府的官網找到一段介紹這個公園的日文文字,將它復制貼到一個文字文件中。然后將語音設置改為日語發音,語速可以適當調整。

japanese_voice_id = "你的日語語音ID,例如 com.apple.ttsbundle.ja_JP_Kyoko" # 替換成你系統上的日語語音ID
engine.setProperty('voice', japanese_voice_id)
engine.setProperty('rate', 150) # 設置日語語速with open('japanese_info.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())engine.say(line)engine.runAndWait()

執行后,你就能聽到這段日文被用日語發音朗讀出來了。

除了直接播放語音,pyttsx3?還能將語音直接制作成文件。官方文檔中有介紹,這也很簡單,只要調用?save_to_file()?函數就行了。你可以指定輸出文件名和文字內容,它會自動幫你保存成像是 mp3 或 wav 格式的音頻文件。

output_file = "hello_ryan.mp3"
text_to_save = "Hello Ryan, this is a test."
engine.save_to_file(text_to_save, output_file)
engine.runAndWait() # 需要調用runAndWait來實際執行保存操作
print(f"語音已保存至 {output_file}")

這樣就能方便地將文字轉換成可重復使用的音頻文件了。

總結來說,pyttsx3?這個套件可以幫助我們快速地實現文字轉語音服務。它的應用場景很廣泛。例如,我們可以結合 Google API,讀取你的日程安排、Email 內容,讓電腦用讀的方式提醒你今天的行程或重要郵件。又或者,如果你有爬取體育數據、股市信息的自動化系統,可以整合?pyttsx3,讓系統具備語音提醒的功能,變成一個帶有語音服務的自動化工具。

如果你對這種整合多種功能、提升效率的自動化系統感興趣,其實有很多資源可以學習 Python 的自動化技巧。例如,學習如何自動化文件管理、Excel、Word 等文檔軟件操作。將重復性的工作自動化,真的可以大幅提高你的工作效率,節省很多寶貴的時間。你可以去搜索相關的 Python 自動化課程或教學資源。

希望這篇文章對你有所幫助和啟發!如果覺得有用,歡迎分享給需要的朋友。有任何問題或想法,也歡迎在評論區留言討論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82232.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue修改了node_modules中的包,打補丁

1、安裝patch npm i patch-package 安裝完成后,會在package.json中顯示版本號 2、在package.json的scripts中增加配置 "postinstall": "patch-package" 3、執行命令 npx patch-package 修改的node_modules中的包的名稱 像這樣 npx patch-packag…

Vue3快速入門/Vue3基礎速通

Vue3 漸進式的javascript框架&#xff0c;我們可以逐步引入vue的功能 官方文檔 Vue.js中文手冊 你可以借助 script 標簽直接通過 CDN 來使用 Vue&#xff1a; <script src"https://unpkg.com/vue3/dist/vue.global.js"></script>通過 CDN 使用 Vue 時…

[人機交互]理解界面對用戶的影響

零.重點 – 什么是情感因素 – 富有表現力的界面 – 用戶的挫敗感 – 擬人化在交互設計中的應用 – 虛擬人物&#xff1a;代理 一.什么是情感方面 情感是指某事物對心理造成的一種狀態 二.計算機科學中存在的兩個相關的研究領域 2.1情感計算 機器如何能感知其他代理的情感&…

Ubuntu22.04及以上版本buildroot SIGSTKSZ 報錯問題

本文提供一種解決 Buildroot SIGSTKSZ 報錯途徑 解決途徑來源參考&#xff1a;Buildroot error when building with Ubuntu 21.10 其出現原因在于 GNU C Library 2.34 release announcement&#xff1a; Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ. When _DYNAMIC_STACK_SIZE_SOU…

Spark處理過程-案例數據清洗

&#xff08;一&#xff09;需求說明 準備十條符合包含用戶信息的文本文件&#xff0c;每行格式為 姓名,年齡,性別&#xff0c;需要清洗掉年齡為空或者非數字的行。 例如&#xff1a; 張三,25,男 李四,,女 王五,30,男 趙六,a,女 孫七,35,男 周八,40,女 吳九,abc,男 鄭十,45,女…

多模態大語言模型arxiv論文略讀(六十五)

VS-Assistant: Versatile Surgery Assistant on the Demand of Surgeons ?? 論文標題&#xff1a;VS-Assistant: Versatile Surgery Assistant on the Demand of Surgeons ?? 論文作者&#xff1a;Zhen Chen, Xingjian Luo, Jinlin Wu, Danny T. M. Chan, Zhen Lei, Jinqi…

五子棋html

<!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1" /> <title>五子棋游戲</title> <style>bo…

算法訓練營第十一天|150. 逆波蘭表達式求值、239. 滑動窗口最大值、347.前 K 個高頻元素

150. 逆波蘭表達式求值 題目 思路與解法 第一思路&#xff1a; 比較簡單 class Solution:def evalRPN(self, tokens: List[str]) -> int:stack []for item in tokens:if item ! and item ! - and item ! * and item ! / :stack.append(item)else:b int(stack.pop())a …

原生 IP(Native IP)

目錄 一、核心特點 二、原生 IP 的常見應用 三、原生 IP vs. 數據中心 IP 四、如何獲取原生 IP&#xff1f; 五、原生 IP 的優缺點 六、實際案例 原生 IP&#xff08;Native IP&#xff09; 是指由互聯網服務提供商&#xff08;ISP&#xff09;直接分配給用戶的 IP 地址&…

k8s的pod掛載共享內存

k8s的pod掛載共享內存&#xff0c;限制不生效問題&#xff1a; 注&#xff1a;/dev/shm 是 Linux 系統中用于共享內存的特殊路徑。通過將 emptyDir 的 medium 設置為 Memory&#xff0c;可以確保 /dev/shm 正確地掛載到一個基于內存的文件系統&#xff0c;從而實現高效的共享內…

DOCX轉PDF怎么操作最簡單?快速將DOCX轉換為專業PDF文檔

在日常辦公或學習中&#xff0c;我們經常需要將 Word 文檔&#xff08;.docx格式&#xff09;轉換為 PDF 文件。這不僅有助于保持文檔格式的一致性&#xff0c;還能確保接收者無需特定軟件即可查看文件內容。本文將詳細介紹幾種常見的方法來實現從 DOCX 到 PDF 的轉換&#xff…

VUE+ElementUI 使用el-input類型type=“number” 時,取消右邊的上下箭頭

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 在項目中有時候需要輸入框的type“number”&#xff0c;這個時候&#xff0c;輸入框的右邊就會出現兩個按鈕&#xff0c;這兩個按鈕可以遞增/遞減&#xff0c;但是這樣輸入框看上去就不太美觀&#x…

深入淺出理解常見的分布式ID解決方案

目錄 UUID 自增ID 數據庫多主模式 號段模式 Redis 雪花算法 百度 UIDgenerator 美團Leaf 滴滴TinyID 實戰中的分布式ID生成器&#xff01;保障數據唯一性的核心組件 怎么編寫Lua腳本是關鍵 怎么執行&#xff1f; 總結 分布式ID在構建大規模分布式系統時扮演著至關…

技術視界 | 青龍機器人訓練地形詳解(一):如何創建一個地形

機器人強化學習中的地形訓練是利用強化學習算法讓機器人在不同地形環境中通過試錯學習最優行為策略的過程&#xff0c;通過環境建模、策略學習與優化等環節&#xff0c;使機器人能夠自主適應復雜多變的地形&#xff0c;提高其移動效率、穩定性和自主性&#xff0c;減少人為干預…

【SGL】Scatter-Gather List內存傳輸技術

文章目錄 1. What is SGL&#xff1f;2. sgl內存傳輸的原理2.1 核心思想2.2 sgl數據結構2.3 摘鏈和掛鏈 3. 零拷貝技術3.1 問題背景3.2 零拷貝的核心思想及實現方式 4. sgl在存儲行業的應用 1. What is SGL&#xff1f; sgl&#xff08;Scatter-Gather List&#xff09;內存傳…

10.idea中創建springboot項目_jdk17

10.idea中創建springboot項目_jdk17 一、前期準備 安裝與配置&#xff1a; 確保已安裝 IntelliJ IDEA配置好 JDK17 二、創建 Maven 項目 新建項目&#xff1a; 點擊 File → New → Project&#xff0c;選擇左側的 Maven。填寫項目名稱&#xff08;如 demo&#xff09;、存…

如何使用極狐GitLab 軟件包倉庫功能托管 ruby?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 軟件包庫中的 Ruby gems (BASIC ALL) WARNING:Ruby gems 軟件包庫正在開發中&#xff0c;由于功能有限&#xff0c;尚未準備好…

LeetCode 熱題 100 131. 分割回文串

LeetCode 熱題 100 | 131. 分割回文串 大家好&#xff0c;今天我們來解決一道經典的回溯算法問題——分割回文串。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求將一個字符串 s 分割成若干個子串&#xff0c;使得每個子串都是回文串&#xff0c;并返回所有可能的分割…

〖 Linux 〗操作系統進程管理精講(2)

文章目錄 1、環境變量基本概念常見環境變量查看環境變量方法測試 PATH測試 HOME和環境變量相關的命令環境變量的組織方式<p align"center">main 函數的三個參數通過代碼獲得環境變量通過系統調用獲取環境變量環境變量通常是具有全局屬性的 2、程序地址空間2.1 …

vite:npm 安裝 pdfjs-dist , PDF.js View 示例

pdfjs-dist 是 Mozilla 的 PDF.js 庫的預構建版本&#xff0c;能讓你在項目里展示 PDF 文件。下面為你介紹如何用 npm 安裝 pdfjs-dist 并應用 pdf.js 和 pdf.worker.js。 為了方便&#xff0c;我將使用 vite 搭建一個原生 js 項目。 1.創建項目 npm create vitelatest pdf-v…