明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

“會報數(shù)的計算器”的基本完成

[摘要]兩組不難的程序; 三個常見的軟件; 這就請你編出"會報數(shù)的計算器"!   一段"古老"的構思:   記得還是在97年春天的時候,老師讓我在電腦上統(tǒng)計全班考試的總成績。我一個人在桌前一邊用Windows附件里的計算器,一邊手里那著厚厚的考卷往電腦里輸入成績。眼...
兩組不難的程序;

三個常見的軟件;

這就請你編出"會報數(shù)的計算器"!


  一段"古老"的構思:


  記得還是在97年春天的時候,老師讓我在電腦上統(tǒng)計全班考試的總成績。我一個人在桌前一邊用Windows附件里的計算器,一邊手里那著厚厚的考卷往電腦里輸入成績。眼睛一會看考卷,一會移向屏幕,一會兒又得盯著鍵盤上右邊的數(shù)字鍵。這樣不僅眼睛和脖子累得很,而且很容易把數(shù)字錄入錯了。忽然想起宿舍小賣部里的那臺會發(fā)音的計算器,它在按數(shù)字鍵時它會主動報出數(shù)字來。


   那時我剛剛成為Visual Basic的狂熱愛好者,馬上就想到用VB必然可以編出這種會語音報數(shù)的計算器來,并且讓這個程序僅用一張3寸軟盤就可以裝下。


  兩組不難的程序:


  用VB實現(xiàn)一個計算器的功能,我想這就不用我多說了吧?VB自帶的范例里就已經(jīng)有計算器的程序了(在VB目錄下的samples/calc中)。這是VB教學里最基本的程序,但是這個自帶的計算器程序只能用鼠標點擊計算器上的數(shù)字鍵時才能輸入數(shù)字,所以我們還要加上響應數(shù)字鍵盤的程序。這一點VB的初學者都可以輕易解決。


  另一個技術上的關鍵就是讓計算機發(fā)音,這個問題在VB里同樣可以解決。我們事先錄下一段起名為sound.wav的聲音文件。然后再用VB的多媒體控制接口MMControl控件命令來控制播放這段聲音文件就可以了。你要是在VB的工具箱ToolBox中找不到MCI控件,可以在菜單里的"Tools"中"CustomControls"選"Microsoft Multimedia Control"對象就可以在工具箱中增加MMControl對象。


  看,"發(fā)音計算器"程序主要構成就是這兩組不難的模塊部分。 但是構思的最精彩細節(jié)還在后面。


  三個常見的軟件:


  首先我們要錄一段聲音文件。如圖1,對著WINDOWS附件中的錄音機快速而又有停頓地念出1234567890,把他們起名存成sound.wav文件。這個過程不用我細細描述了吧?但要注意錄音的音頻屬性要調整為收音質量品質,用不著象CD一樣的音質,這樣文件就可以少占用空間了?催@段wav文件只有80K大小、3.7秒長,但這還只是開始,我們后面還有絕招。


  第二個要用到的軟件就是COOL,這是一個音頻處理軟件。它需要注冊才能同時使用全部功能,但是我們這里僅用到COOL1.33版的一部分編輯和存盤的功能就足夠了。因為此文是篇"古老"的東西,所以1.33版已是很老的玩意了,現(xiàn)在應該早就有了很多的更新版本。實際剛才錄下的聲音文件在每個數(shù)字聲波間隔中還有很大一段沒有有用信息的空間。如圖2,用Zoom in放大聲波文件我們就可以看到數(shù)字發(fā)音1和2中有0.2秒的無用信息,數(shù)字發(fā)音1前也有一段無用信息。用鼠標選中它們后刪除,刪除的同時你就可以看到COOL軟件下方隨時都在報這段文件改動后的大小和時間長短。經(jīng)過簡單的刪除,緊縮的聲音文件一下就變成了42K、2秒大小了。其實要是仔細修飾和調整聲波文件,再用COOL重新選擇編碼方式還就可以把文件作得更小。這就使一張3寸軟盤就可以裝下整個發(fā)音計算器軟件的可能變可行。另外還要注意COOL右下角的Time參數(shù),用它和放大波形圖的配合可以精確地標算出每一個數(shù)字發(fā)音文件的起始位和結束位,一會我們在VB中就要用到它所標出的參數(shù)定位。


  第三個軟件當然是我們的VB大寶寶。先來個小實驗:如圖3,用上面描述過的方法在窗體加上一個MCI多媒體播放器的控件,再加上一個按鈕,上面標上數(shù)字2。加入一下程序代碼:


Private Sub


Form_Load()

MMControl1.TimeFormat = 0

MMControl1.DeviceType = "waveaudio"

MMControl1.filename = "c:\sound.wav"

MMControl1.Command = "open"


End Sub


  這些代碼告訴了電腦設定計時方式為把1秒分成1000個單位;啟動MCI控件播放聲波.wav的文件;通知電腦要播放的文件所處位置;打開MCI控件作好播放準備。


  再在"2"按鈕中加入代碼:


Private Sub


Command1_Click()

MMControl1.From = 180:

MMControl1.To = 400

MMControl1.Command = "play"

End Sub

  一運行按按鈕就會清晰地發(fā)出"2"這一發(fā)音。現(xiàn)在我們可以說對整個"發(fā)音計算器"程序的實現(xiàn)有了一個清楚的認識了吧?通過VB的From和To的控制,我們可以挑選.wav文件的任意一段來播放。我們可以通過COOL軟件精確地知道在sound.wav文件中從0.18秒到0.4秒是"2"這一數(shù)字的發(fā)音。COOL之類的音頻處理軟件和VB的MCI多媒體控件對聲波文件的播放功能之完美組合就可以化不可能為可能。我們在計算器按那個數(shù)字鍵時同時就讓MCI控件播放那個數(shù)字的發(fā)音片段,比如和Select Case Index語句作簡單配合就可以輕而易舉地實現(xiàn)按數(shù)字發(fā)音的效果,篇幅有限這里就不再具體描述了。整個程序的主體用不著半天就可以完成了,而且相當實用。使用計算器時眼睛只用看著紙面,手指就可以在數(shù)字小鍵盤上瀟灑輕快地點動著。請你快快實現(xiàn)它吧,作為你開發(fā)的又一個自由軟件成名于天下。


  不過要想讓它可靠實用地工作還有一些工作要做。比如聲音里還要加入"+-*/= . 清0"等符號的聲音,還要有除0時的警告,如果我們用API形式來播放聲音文件還要具體考慮聲音的同步異步播放、函數(shù)在聲音播放后的返不返回問題,還應該加入對計算結果的逐字讀出的等功能,要開發(fā)也得加上科學計算器的形式……好苦呀!所以我把這些工作都留給了你。


  ^_^ 后記:也許當時就早有人用到了這個小構思,但我在自己想出這個主意的時候還是很有成就感的,不用為每一個數(shù)字鍵都作一段錄音了,節(jié)省了大量的空間和簡化了程序的運行過程。最近發(fā)現(xiàn)北京114電話查詢臺播報號碼時很可能也是利用了播放數(shù)字聲音片段的方式,有些發(fā)音電子記事本可能也是"抄襲"了我的技術。由此延伸,其實會報時的鬧鐘、計時器、車船飛機的售票處、旅館車站查詢服務臺等等很多地方都可以用這樣的方法來完成種種發(fā)音功能。