Python實(shí)現(xiàn)朗讀在線音頻和本地音頻
在日常的Python軟件開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到一個(gè)非常重要的功能需求——讓程序能夠讀取并顯示文本內(nèi)容。那么,如何實(shí)現(xiàn)這一功能呢?本文將提供幾種方法供大家參考,其中第二種方法是最推薦的。
一、pyttsx3法
采用這個(gè)第三方模塊,可以實(shí)現(xiàn)python軟件朗讀文本。
首先,需要在cmd下安裝這個(gè)模塊:
pip install pyttsx3
然后,就可以通過(guò)初始化發(fā)聲引擎,然后定義引擎的聲音大小、語(yǔ)速。
engine = pyttsx3.init()
#設(shè)置語(yǔ)速
rate = engine.getProperty('rate')
engine.setProperty('rate', rate - 50)
# 設(shè)置發(fā)音大小,范圍為0.0-1.0
volume = engine.getProperty('volume')
engine.setProperty('volume', 1.2)
# 設(shè)置默認(rèn)的聲音:voices[0].id代表男生,voices[1].id代表女生
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
設(shè)置完成之后,們可以定義一個(gè)函數(shù),當(dāng)需要調(diào)用這個(gè)模型進(jìn)行發(fā)聲時(shí),就可以調(diào)用這個(gè)函數(shù)。
def show_sound(text): engine.say(text)#朗讀當(dāng)前內(nèi)容 engine.runAndWait() #朗讀直到結(jié)束 engine.stop() #停止引擎
上面的示例中,你需要把text換成你要讀取的內(nèi)容就可以了。
這種方法調(diào)用的引擎聲音大小可以調(diào),但是音質(zhì)一般,有點(diǎn)兒僵化,需要我們采用更為好的音頻才可以。
二、轉(zhuǎn)化為語(yǔ)音流的方法
之前,我的思路是,把單詞的音頻下載到本地,然后再調(diào)用。這種方法的優(yōu)點(diǎn)時(shí)音質(zhì)好,缺點(diǎn)是需要一定的下載時(shí)間,有時(shí)我們需要即時(shí)的調(diào)用,就顯得不太方便,因此我就想先通過(guò)requests獲取這個(gè)音頻,然后轉(zhuǎn)化為語(yǔ)音流,再用pygame讀出來(lái),經(jīng)過(guò)與chatgpt對(duì)話,發(fā)現(xiàn)我這種方法果然有效。
使用這種方法需要安裝requests和pygame兩個(gè)第三方模型。
pip install requests, pygame
其中pygame的個(gè)頭較大,如果可以的話用鏡像下載速度會(huì)更快一些。比如:
pip install pygame -i https://mirrors.aliyun.com/pypi/simple/
安裝完后,我們導(dǎo)入模型,初始化pygame, 定義函數(shù)。
import requests
import pygame
from io import BytesIO
pygame.init() #初始化pygame
def show_sound(text):
audio_path = f"https://dict.youdao.com/dictvoice?audio={text}&type=1" #獲取音頻地址
resp = requests.get(audio_path) #獲取二進(jìn)制數(shù)據(jù)
audio_data = BytesIO(resp.content) #轉(zhuǎn)化為音頻流
pygame.mixer.music.load(audio_data) #加載音頻流
pygame.mixer.music.play() #播放音頻
while pygame.mixer.music.get_busy(): #確保完全讀完,不間斷
continue
上面的示例中,你需要把text換成你要讀取的內(nèi)容就可以了。
三、讀取本地mp3法
讀取本地mp3這種方法比較穩(wěn)妥,適用于沒(méi)有網(wǎng)絡(luò)情況下也能朗讀的情況,但是本地得用對(duì)應(yīng)的語(yǔ)音庫(kù)才可以。我們可以使用pygame和pydub這兩個(gè)模型分別來(lái)實(shí)現(xiàn)。
1. pygame法
這種方法和第二種方法差不多,只不過(guò)不用獲取網(wǎng)絡(luò)的音頻了,直接讀取本地音頻就可以了。
import pygame
def play_mp3(file_path):
pygame.mixer.init()
pygame.mixer.music.load(file_path)
pygame.mixer.music.play()
if __name__ == "__main__":
mp3_file = "your_file_path.mp3" # 替換為你的MP3文件路徑
play_mp3(mp3_file)
在上面示例中,你需要將your_file_path.mp3替換為你本地MP3文件的路徑。然后運(yùn)行該腳本,它將會(huì)播放指定的MP3文件。
2. pydub法
pydub可能會(huì)比pygame個(gè)頭小一點(diǎn)兒,打包時(shí)更省力,以下給出一個(gè)樣例代碼,供大家參考。
首先還是需要安裝pygdub這個(gè)第三方模塊:
pip install pydub
然后,利用下面的代碼:
from pydub import AudioSegment
from pydub.playback import play
def play_mp3(file_path):
sound = AudioSegment.from_mp3(file_path)
play(sound)
if __name__ == "__main__":
mp3_file = "your_file_path.mp3" # 替換為你的MP3文件路徑
play_mp3(mp3_file)
在上面的示例中,你需要將your_file_path.mp3替換為你本地MP3文件的路徑。然后運(yùn)行該腳本,它將會(huì)播放指定的MP3文件。
四、學(xué)后反思
學(xué)習(xí)Python要掌握使用chatgpt等人工智能技術(shù),有好的想法就多向它請(qǐng)教,爭(zhēng)取能夠找到更優(yōu)的方案。
優(yōu)質(zhì)的音頻可以通過(guò)在線字典獲取,只要知道它的下載地址就可以通過(guò)requests來(lái)獲取。
到此這篇關(guān)于Python實(shí)現(xiàn)朗讀在線音頻和本地音頻的文章就介紹到這了,更多相關(guān)Python朗讀音頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過(guò)LyScript實(shí)現(xiàn)從文本中讀寫(xiě)ShellCode
LyScript 插件通過(guò)配合內(nèi)存讀寫(xiě),可實(shí)現(xiàn)對(duì)特定位置的ShellCode代碼的導(dǎo)出。本文將利用這一特性實(shí)現(xiàn)從文本中讀寫(xiě)ShellCode,感興趣的可以了解一下2022-08-08
Python 裝飾器實(shí)現(xiàn)DRY(不重復(fù)代碼)原則
python的裝飾器就是一種代碼簡(jiǎn)潔的手段,在函數(shù)和方法有改動(dòng)時(shí),使得改動(dòng)量最小。這篇文章給大家介紹了Python 裝飾器實(shí)現(xiàn)DRY(不重復(fù)代碼)原則,感興趣的朋友一起看看吧2018-03-03
20行Python代碼實(shí)現(xiàn)一款永久免費(fèi)PDF編輯工具的實(shí)現(xiàn)
這篇文章主要介紹了20行Python代碼實(shí)現(xiàn)一款永久免費(fèi)PDF編輯工具的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
使用Python將PDF表格自動(dòng)提取并寫(xiě)入Word文檔表格
在實(shí)際辦公與數(shù)據(jù)處理場(chǎng)景中,PDF 文件里的表格往往無(wú)法直接復(fù)制到 Word 中,本文將介紹如何使用 Python 從 PDF 文件中提取表格數(shù)據(jù),并將其以標(biāo)準(zhǔn)、結(jié)構(gòu)化的表格形式寫(xiě)入 Word 文檔,需要的朋友可以參考下2025-12-12
Python多進(jìn)程并發(fā)與多線程并發(fā)編程實(shí)例總結(jié)
這篇文章主要介紹了Python多進(jìn)程并發(fā)與多線程并發(fā)編程,結(jié)合實(shí)例形式總結(jié)分析了Python編程中的多進(jìn)程并發(fā)與多線程并發(fā)相關(guān)概念、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2018-02-02
Python實(shí)現(xiàn)樹(shù)狀圖性能優(yōu)化的實(shí)戰(zhàn)指南
在數(shù)據(jù)科學(xué)和商業(yè)智能領(lǐng)域,樹(shù)狀圖(Treemap)是一種強(qiáng)大的可視化工具,用于展示分層數(shù)據(jù)的分布與比例關(guān)系,下面我們就來(lái)看看如何使用Python實(shí)現(xiàn)樹(shù)狀圖可視化吧2026-01-01

