史澤輝
在之前的基礎(chǔ)篇和常規(guī)篇中,我們已經(jīng)分享了如何用Python驅(qū)動Arduino主控板,成功實(shí)現(xiàn)了讀取溫度濕度和光線值,以及點(diǎn)亮LED燈和燈帶。過程中我們發(fā)現(xiàn),數(shù)值的輸出只在串口顯示相關(guān)數(shù)據(jù),要是能聽到語音播報,是不是更方便更生動呢?今天我們就來用Python控制計算機(jī)發(fā)出聲音。
控制計算機(jī)發(fā)出聲音,需要用到speech庫。首先要安裝一下這個庫,然后才能調(diào)用。使用win+r調(diào)出運(yùn)行對話框,輸入cmd進(jìn)入控制臺,輸入pip install speech,回車即可。打開編譯器IDLE,用import speech導(dǎo)入。編寫程序代碼speech.say(str),保存,按F5運(yùn)行,計算機(jī)即可把單引號里的文字以聲音的方式播報出來。注意str是字符類型,要播報的內(nèi)容要放在英文狀態(tài)的單引號里,如speech.say(‘這里是計算機(jī)發(fā)出的聲音’)。如圖1:
然而,很多小伙伴兒會在運(yùn)行過程中出現(xiàn)錯誤提示。如圖2:
這個錯誤提示的意思是,安裝的speech庫某一行語句有問題。按提示修改格式后,繼續(xù)保存運(yùn)行,又會出現(xiàn)新的錯誤提示,依然是程序格式問題,叫人頭疼。解決這一問題的簡單方法是,用正確的speech庫文件進(jìn)行替換。操作如下:
按路徑C:\Users\用戶\AppData\Local\Prog rams\Python\Python37\Lib\site-packages打開相應(yīng)文件夾(注意“用戶”是你的計算機(jī)登錄的用戶名)。找到speech.py文件,用正確的speech文件進(jìn)行替換即可。(可以從正常運(yùn)行的計算機(jī)上拷貝,也可以直接百度到)
SAPI是微軟Speech API , 是微軟公司推出的語音接口,而細(xì)心的人會發(fā)現(xiàn)從WinXP開始,系統(tǒng)上就已經(jīng)有語音識別的功能了,可是用武之地相當(dāng)之少,微軟并沒有給出一些人性化的自定義方案,僅有的語音操控命令顯得相當(dāng)雞肋。 現(xiàn)在,我們的任務(wù)就是利用SAPI進(jìn)行個性化的語音識別。
win32com庫的安裝方法一:使用win+r調(diào)出運(yùn)行對話框,輸入cmd進(jìn)入控制臺,輸入pip install pypiwin32或pip3 install pypiwin32 或 Python -m pip install pypiwin32(根據(jù)所安裝的Python版本選擇不同的命令,安裝時會有提示)。
win32com庫的安裝方法二:從https://sourceforge.net/projects/pywin32/files/pywin
32/下載pywin32-221.win-amd64-py3.7.exe文件。選擇Build 221,下載和本機(jī)Python對應(yīng)版本的pywin32的版本。
下載后,雙擊pywin32-221.win-amd64-py3.7.exe,會識別Python的安裝路徑,一路Next安裝即可。
安裝完成后,打開IDLE編譯器,編寫程序。首先用import win32com.client調(diào)用一下系統(tǒng)客戶端包,再用speaker=win32com.client.Dispatch("SAPI.SPVOICE")調(diào)用系統(tǒng)接口。接下來就可以輸入需要文本轉(zhuǎn)語音的字符串了。
我們簡單編寫一下體溫檢測程序,當(dāng)體溫小于37.3攝氏度,就播報str1語句內(nèi)容,否則播報str2語句內(nèi)容。如圖3:
winsound是Windows的音頻工具接口,可以實(shí)現(xiàn)簡單的音頻播放功能。允許播放WAV文件或發(fā)出嗶嗶聲,但它僅適用于Windows。如圖4:
Playsound是一個僅用于播放WAV和MP3文件的簡單程序包,它純Python,跨平臺,單一功能模塊,不依賴于播放聲音。使用此模塊,我們可以使用一行代碼播放聲音文件,除簡單播放外,它不提供任何功能。如圖5:
另外,我們還可以利用Python-sounddevice、pydub、pyaudio等方式來播放各種音頻文件,有興趣的讀者可以自行嘗試。
有了以上基礎(chǔ),我們就可以結(jié)合開源硬件Arduino主控板進(jìn)行編寫程序了。我們繼續(xù)使用pinpong庫來驅(qū)動Arduino主板,當(dāng)然你也可以試試其他庫。如圖6:
上述程序中,我們導(dǎo)入pinpong庫和speech庫,定義了LED燈為13號引腳,從A0端口讀取光線傳感器的值。如果光線值大于等于400那么LED燈開始點(diǎn)亮,輸出“LED燈工作中”,同時音箱播報聲音。按F5運(yùn)行程序。如圖7:
我們看到,檢測到的光線值為600以上,LED燈處于點(diǎn)亮狀態(tài)。利用這個功能,我們的創(chuàng)客作品就有聲有色,生動多了。
作品程序完成后,我們可以將Python文件打包成exe文件分享給他人。本次分享的是利用pyinstaller打包工具對Python打包。操作步驟如下:
安裝pyinstaller之前先安裝Python,建議安裝32位的Python版本,因?yàn)閣in64位系統(tǒng)向下兼容32位程序。如果安裝64位版本Python進(jìn)行打包,只能在win64位系統(tǒng)中運(yùn)行,在win32中是無法運(yùn)行的。
安裝時需注意的是Add Python3.6 to path此處選項(xiàng)一定要勾選,否則后期還要對環(huán)境進(jìn)行配置,十分麻煩。
使用win+r調(diào)出運(yùn)行對話框,輸入cmd進(jìn)入控制臺,先檢查一下當(dāng)前Python版本(事關(guān)pip和pip3的使用)。
輸入:Python -V? (獲取Python的版本)。本文使用的是Python3.6.1版本,那么我們在安裝pyinstaller時需要使用pip3。(Python2版本使用pip)
輸入:pip3? install pyinstaller (若是輸入pip會出現(xiàn)錯誤提醒)。如圖8:
安裝成功會顯示successfully installed……此時pyinstaller已經(jīng)安裝成功了。
將需要打包的Python文件和圖標(biāo)圖片(ico格式)存放在一個文件夾中。(若是沒有圖片作為圖標(biāo),則打包時系統(tǒng)會自動生成默認(rèn)圖標(biāo))
打開控制臺,先將路徑定位至存放目標(biāo)文件的文件夾,本文文件存放路徑為e:\Python。
輸入打包命令:pyinstaller? -F? -i? jisuan.ico? text.py
運(yùn)行后,出現(xiàn)building exe successfully即為打包成功。如圖9、圖10:
返回目標(biāo)文件夾可以發(fā)現(xiàn)重新生成了4個文件。生成的exe文件就在dist文件夾中。
我們可以看到在dist文件中生成了一個exe文件,而且圖標(biāo)也是相應(yīng)的ico圖片。
雙擊生成的exe文件,可正常運(yùn)行。至此,我們就成功地將Python程序打包成exe文件進(jìn)行分享了。