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)文章
python循環(huán)控制之break和continue流程控制語(yǔ)句
這篇文章主要介紹了python循環(huán)控制之break流程控制語(yǔ)句,Python中提供了兩個(gè)關(guān)鍵字用來(lái)控制循環(huán)語(yǔ)句,分別是break和continue,本文都有介紹,需要的朋友可以參考一下2022-03-03Python實(shí)現(xiàn)簡(jiǎn)單的猜單詞
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單的猜單詞,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06pandas中fillna()函數(shù)填充NaN和None的實(shí)現(xiàn)
本文主要介紹了pandas中fillna()函數(shù)填充NaN和None的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01Python實(shí)現(xiàn)最常見(jiàn)加密方式詳解
這篇文章主要介紹了Python實(shí)現(xiàn)最常見(jiàn)加密方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python使用UDP實(shí)現(xiàn)客戶端和服務(wù)器對(duì)話
這篇文章主要為大家介紹了python使用UDP實(shí)現(xiàn)客戶端和服務(wù)器對(duì)話示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03