一段"古老"的構思;
兩組不難的程序;
三個常見的軟件;
這就請你編出"會報數的計算器"!
一段"古老"的構思:
記得還是在97年春天的時候,老師讓我在電腦上統計全班考試的總成績。我一個人在桌前一邊用Windows附件裡的計算器,一邊手裡那著厚厚的考卷往電腦裡輸入成績。眼睛一會看考卷,一會移向屏幕,一會兒又得盯著鍵盤上右邊的數字鍵。這樣不僅眼睛和脖子累得很,而且很容易把數字錄入錯了。忽然想起宿捨小賣部裡的那台會發音的計算器,它在按數字鍵時它會主動報出數字來。
那時我剛剛成為VisualBasic的狂熱愛好者,馬上就想到用VB必然可以編出這種會語音報數的計算器來,並且讓這個程序僅用一張3寸軟盤就可以裝下。
兩組不難的程序:
用VB實現一個計算器的功能,我想這就不用我多說了吧?VB自帶的范例裡就已經有計算器的程序了(在VB目錄下的samples/calc中)。這是VB教學裡最基本的程序,但是這個自帶的計算器程序只能用鼠標點擊計算器上的數字鍵時才能輸入數字,所以我們還要加上響應數字鍵盤的程序。這一點VB的初學者都可以輕易解決。
另一個技術上的關鍵就是讓計算機發音,這個問題在VB裡同樣可以解決。我們事先錄下一段起名為sound.wav的聲音文件。然後再用VB的多媒體控制接口MMControl控件命令來控制播放這段聲音文件就可以了。你要是在VB的工具箱ToolBox中找不到MCI控件,可以在菜單裡的"Tools"中"CustomControls"選"MicrosoftMultimediaControl"對象就可以在工具箱中增加MMControl對象。
看,"發音計算器"程序主要構成就是這兩組不難的模塊部分。但是構思的最精彩細節還在後面。
三個常見的軟件:
首先我們要錄一段聲音文件。如圖1,對著WINDOWS附件中的錄音機快速而又有停頓地念出1234567890,把他們起名存成sound.wav文件。這個過程不用我細細描述了吧?但要注意錄音的音頻屬性要調整為收音質量品質,用不著象CD一樣的音質,這樣文件就可以少占用空間了。看這段wav文件只有80K大小、3.7秒長,但這還只是開始,我們後面還有絕招。
第二個要用到的軟件就是COOL,這是一個音頻處理軟件。它需要注冊才能同時使用全部功能,但是我們這裡僅用到COOL1.33版的一部分編輯和存盤的功能就足夠了。因為此文是篇"古老"的東西,所以1.33版已是很老的玩意了,現在應該早就有了很多的更新版本。實際剛才錄下的聲音文件在每個數字聲波間隔中還有很大一段沒有有用信息的空間。如圖2,用Zoomin放大聲波文件我們就可以看到數字發音1和2中有0.2秒的無用信息,數字發音1前也有一段無用信息。用鼠標選中它們後刪除,刪除的同時你就可以看到COOL軟件下方隨時都在報這段文件改動後的大小和時間長短。經過簡單的刪除,緊縮的聲音文件一下就變成了42K、2秒大小了。其實要是仔細修飾和調整聲波文件,再用COOL重新選擇編碼方式還就可以把文件作得更小。這就使一張3寸軟盤就可以裝下整個發音計算器軟件的可能變可行。另外還要注意COOL右下角的Time參數,用它和放大波形圖的配合可以精確地標算出每一個數字發音文件的起始位和結束位,一會我們在VB中就要用到它所標出的參數定位。
第三個軟件當然是我們的VB大寶寶。先來個小實驗:如圖3,用上面描述過的方法在窗體加上一個MCI多媒體播放器的控件,再加上一個按鈕,上面標上數字2。加入一下程序代碼:
PrivateSub
Form_Load()
MMControl1.TimeFormat=0
MMControl1.DeviceType="waveaudio"
MMControl1.filename="c:sound.wav"
MMControl1.Command="open"
EndSub
這些代碼告訴了電腦設定計時方式為把1秒分成1000個單位;啟動MCI控件播放聲波.wav的文件;通知電腦要播放的文件所處位置;打開MCI控件作好播放准備。
再在"2"按鈕中加入代碼:
PrivateSub
Command1_Click()
MMControl1.From=180:
MMControl1.To=400
MMControl1.Command="play"
EndSub
一運行按按鈕就會清晰地發出"2"這一發音。現在我們可以說對整個"發音計算器"程序的實現有了一個清楚的認識了吧?通過VB的From和To的控制,我們可以挑選.wav文件的任意一段來播放。我們可以通過COOL軟件精確地知道在sound.wav文件中從0.18秒到0.4秒是"2"這一數字的發音。COOL之類的音頻處理軟件和VB的MCI多媒體控件對聲波文件的播放功能之完美組合就可以化不可能為可能。我們在計算器按那個數字鍵時同時就讓MCI控件播放那個數字的發音片段,比如和SelectCaseIndex語句作簡單配合就可以輕而易舉地實現按數字發音的效果,篇幅有限這裡就不再具體描述了。整個程序的主體用不著半天就可以完成了,而且相當實用。使用計算器時眼睛只用看著紙面,手指就可以在數字小鍵盤上潇灑輕快地點動著。請你快快實現它吧,作為你開發的又一個自由軟件成名於天下。
不過要想讓它可靠實用地工作還有一些工作要做。比如聲音裡還要加入" -*/=.清0"等符號的聲音,還要有除0時的警告,如果我們用API形式來播放聲音文件還要具體考慮聲音的同步異步播放、函數在聲音播放後的返不返回問題,還應該加入對計算結果的逐字讀出的等功能,要開發也得加上科學計算器的形式……好苦呀!所以我把這些工作都留給了你。
^_^後記:也許當時就早有人用到了這個小構思,但我在自己想出這個主意的時候還是很有成就感的,不用為每一個數字鍵都作一段錄音了,節省了大量的空間和簡化了程序的運行過程。最近發現北京114電話查詢台播報號碼時很可能也是利用了播放數字聲音片段的方式,有些發音電子記事本可能也是"抄襲"了我的技術。由此延伸,其實會報時的鬧鐘、計時器、車船飛機的售票處、旅館車站查詢服務台等等很多地方都可以用這樣的方法來完成種種發音功能。->