史澤輝
在之前的基礎(chǔ)篇和常規(guī)篇中,我們已經(jīng)分享了如何用Python驅(qū)動(dòng)Arduino主控板,成功實(shí)現(xiàn)了讀取溫度濕度和光線值,以及點(diǎn)亮LED燈和燈帶。過程中我們發(fā)現(xiàn),數(shù)值的輸出只在串口顯示相關(guān)數(shù)據(jù),要是能聽到語音播報(bào),是不是更方便更生動(dòng)呢?今天我們就來用Python控制計(jì)算機(jī)發(fā)出聲音。
控制計(jì)算機(jī)發(fā)出聲音,需要用到speech庫。首先要安裝一下這個(gè)庫,然后才能調(diào)用。使用win+r調(diào)出運(yùn)行對話框,輸入cmd進(jìn)入控制臺(tái),輸入pip install speech,回車即可。打開編譯器IDLE,用import speech導(dǎo)入。編寫程序代碼speech.say(str),保存,按F5運(yùn)行,計(jì)算機(jī)即可把單引號(hào)里的文字以聲音的方式播報(bào)出來。注意str是字符類型,要播報(bào)的內(nèi)容要放在英文狀態(tài)的單引號(hào)里,如speech.say(‘這里是計(jì)算機(jī)發(fā)出的聲音’)。如圖1:

然而,很多小伙伴兒會(huì)在運(yùn)行過程中出現(xiàn)錯(cuò)誤提示。如圖2:

這個(gè)錯(cuò)誤提示的意思是,安裝的speech庫某一行語句有問題。按提示修改格式后,繼續(xù)保存運(yùn)行,又會(huì)出現(xiàn)新的錯(cuò)誤提示,依然是程序格式問題,叫人頭疼。解決這一問題的簡單方法是,用正確的speech庫文件進(jìn)行替換。操作如下:
按路徑C:\Users\用戶\AppData\Local\Prog rams\Python\Python37\Lib\site-packages打開相應(yīng)文件夾(注意“用戶”是你的計(jì)算機(jī)登錄的用戶名)。找到speech.py文件,用正確的speech文件進(jìn)行替換即可。(可以從正常運(yùn)行的計(jì)算機(jī)上拷貝,也可以直接百度到)
SAPI是微軟Speech API , 是微軟公司推出的語音接口,而細(xì)心的人會(huì)發(fā)現(xiàn)從WinXP開始,系統(tǒng)上就已經(jīng)有語音識(shí)別的功能了,可是用武之地相當(dāng)之少,微軟并沒有給出一些人性化的自定義方案,僅有的語音操控命令顯得相當(dāng)雞肋。 現(xiàn)在,我們的任務(wù)就是利用SAPI進(jìn)行個(gè)性化的語音識(shí)別。
win32com庫的安裝方法一:使用win+r調(diào)出運(yùn)行對話框,輸入cmd進(jìn)入控制臺(tái),輸入pip install pypiwin32或pip3 install pypiwin32 或 Python -m pip install pypiwin32(根據(jù)所安裝的Python版本選擇不同的命令,安裝時(shí)會(huì)有提示)。
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,會(huì)識(shí)別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攝氏度,就播報(bào)str1語句內(nèi)容,否則播報(bào)str2語句內(nèi)容。如圖3:

winsound是Windows的音頻工具接口,可以實(shí)現(xiàn)簡單的音頻播放功能。允許播放WAV文件或發(fā)出嗶嗶聲,但它僅適用于Windows。如圖4:

Playsound是一個(gè)僅用于播放WAV和MP3文件的簡單程序包,它純Python,跨平臺(tái),單一功能模塊,不依賴于播放聲音。使用此模塊,我們可以使用一行代碼播放聲音文件,除簡單播放外,它不提供任何功能。如圖5:

另外,我們還可以利用Python-sounddevice、pydub、pyaudio等方式來播放各種音頻文件,有興趣的讀者可以自行嘗試。
有了以上基礎(chǔ),我們就可以結(jié)合開源硬件Arduino主控板進(jìn)行編寫程序了。我們繼續(xù)使用pinpong庫來驅(qū)動(dòng)Arduino主板,當(dāng)然你也可以試試其他庫。如圖6:

上述程序中,我們導(dǎo)入pinpong庫和speech庫,定義了LED燈為13號(hào)引腳,從A0端口讀取光線傳感器的值。如果光線值大于等于400那么LED燈開始點(diǎn)亮,輸出“LED燈工作中”,同時(shí)音箱播報(bào)聲音。按F5運(yùn)行程序。如圖7:

我們看到,檢測到的光線值為600以上,LED燈處于點(diǎn)亮狀態(tài)。利用這個(gè)功能,我們的創(chuàng)客作品就有聲有色,生動(dò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)行的。
安裝時(shí)需注意的是Add Python3.6 to path此處選項(xiàng)一定要勾選,否則后期還要對環(huán)境進(jìn)行配置,十分麻煩。
使用win+r調(diào)出運(yùn)行對話框,輸入cmd進(jìn)入控制臺(tái),先檢查一下當(dāng)前Python版本(事關(guān)pip和pip3的使用)。
輸入:Python -V? (獲取Python的版本)。本文使用的是Python3.6.1版本,那么我們在安裝pyinstaller時(shí)需要使用pip3。(Python2版本使用pip)
輸入:pip3? install pyinstaller (若是輸入pip會(huì)出現(xiàn)錯(cuò)誤提醒)。如圖8:

安裝成功會(huì)顯示successfully installed……此時(shí)pyinstaller已經(jīng)安裝成功了。
將需要打包的Python文件和圖標(biāo)圖片(ico格式)存放在一個(gè)文件夾中。(若是沒有圖片作為圖標(biāo),則打包時(shí)系統(tǒng)會(huì)自動(dòng)生成默認(rèn)圖標(biāo))
打開控制臺(tái),先將路徑定位至存放目標(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個(gè)文件。生成的exe文件就在dist文件夾中。
我們可以看到在dist文件中生成了一個(gè)exe文件,而且圖標(biāo)也是相應(yīng)的ico圖片。
雙擊生成的exe文件,可正常運(yùn)行。至此,我們就成功地將Python程序打包成exe文件進(jìn)行分享了。