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