摘要:利用VB能夠方便地設(shè)計出友好的應用軟件界面,而利用Matlab能夠簡易地進行語音信號的采集和數(shù)值處理。借助MATLAB的COM生成器生成COM組件供VB應用程序調(diào)用,實現(xiàn)了在脫離MATLAB環(huán)境下VB應用程序與MATLAB的無縫集成。從而使利用VB開發(fā)語音采集相關(guān)應用軟件變得簡單。
關(guān)鍵詞:VB;Matlab COM;MatrixVB;語音采集與處理
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)29-0468-02
Implementing Acquisition and Processing of the Speech Signal Based on VB and Matlab COM
ZHAO Wei, XIONG Xiao-dong,WEI Yong
(Electronics Information college,Yangtze University,Jingzhou 434023,China)
Abstract: Designing a friendly interface of applications easily with using VB,and making acquisition and processing of the speech signal easy with using Matlab.Applications developed by VB calls the COM which was generated by COM generator of Matlab to realize the integration of VB and Matlab. Consequently,the development of applications related to acquisition of speech signal with using VB become easy.
Key words: VB;Matlab COM; MatrixVB; acquisition and processing of the speech signal
1 引言
Visual Basic是由微軟公司開發(fā)的在Windows95/98/NT平臺上的一種十分強大和有生命力的Windows編程語言之一,具有簡單易學、編程簡單、程序集成化程度高及界面可視化等優(yōu)點。然而VB在語音信號采集、數(shù)值處理和圖形繪制方面顯得力不從心。Matlab是Math Works公司開發(fā)的一種工程計算語言,利用Matlab能夠比較方便地進行語音信號的采集與處理并能夠即時快速地將結(jié)果以圖形的方式顯示。顯然,將兩者結(jié)合起來,能實現(xiàn)在VB可視化界面下運用Matlab的語音信號采集、數(shù)值處理以及圖像顯示功能來使VB編程更加方便和完美。
2Matlab語音采集介紹
如圖1所示,語音采集子系統(tǒng)是通過Realtek AC’97型聲卡和Matlab的數(shù)據(jù)采集工具箱實現(xiàn)的。其中Realtek AC’97型聲卡的采樣位數(shù)為16位,支持8~44.1kHz的采樣速率,可以滿足語音采集的硬件要求[1]。Matlab自帶的數(shù)據(jù)采集工具箱里面,提供了專門用于語音采集的命令和函數(shù)。數(shù)據(jù)采集的硬件設(shè)備的內(nèi)部特性對Matlab的接口完全是透明的,通過調(diào)用Matlab提供的語音采集函數(shù)和命令可以對其進行訪問。而且,Matlab可以對其采集的數(shù)據(jù)進行實時的分析,也可在存儲后再進行處理。
3 VB和Matlab COM接口以及數(shù)據(jù)傳輸方法
VB雖然具有友好的界面設(shè)計優(yōu)點,然而它在語音采集以及數(shù)值處理方面遠遠不如Matlab。因此,VB調(diào)用Matlab語音采集命令和函數(shù)進行語音采集方面的應用軟件開發(fā)將使得VB的編程更加完美。
3.1 VB和Matlab COM接口
Matlab的COM生成器是Matlab編譯器的擴展功能,它能夠?qū)atlab編寫的M文件轉(zhuǎn)化為COM組件的形式。開發(fā)者在Matlab中進行建模和分析,然后將模塊轉(zhuǎn)換為COM組件形式。這些組件馬上可以集成進任何基于COM組件的計算機語言中,如VB,VC等[2]。
COM組件的創(chuàng)建分為四個步驟:
1) 載入Matlab COM生成器。
在Matlab提示行輸入comtool,COM生成器將被載入。
2) 創(chuàng)建一個新的工程。
選擇File->New Project,出現(xiàn)工程屬性設(shè)置對話框。添加組件名、類名、版本號、和選擇是否連接圖形庫。
3) 管理M文件。
添加編寫好的M文件,M文件中的函數(shù)名和類中的方法名一致。
4) 編譯一個工程。
選擇Build->COM Object,生成COM組件(.dll文件)。
VB中編程調(diào)用生成的.dll文件即可實現(xiàn)M文件中函數(shù)的功能。
3.2 Matlab與VB數(shù)據(jù)交換
MatrixVB是Mathworks公司針對VB提供的一個Matlab組件庫,它具有Matlab繪圖的強大功能,讓VB能很輕易地繪制圖形[3]。由于VB不能將采樣率高的數(shù)據(jù)即時快速的繪制出來,借助Matrix VB中提供的plot繪圖函數(shù)能夠很好地實現(xiàn)這一點。為了能夠?qū)D形繪制在VB指定的窗口內(nèi),我們將matlab函數(shù)采集的語音數(shù)據(jù)保存在一個文本文件中,然后在VB中利用MatrixVB中的讀文件函數(shù)讀取該文件內(nèi)的數(shù)據(jù),最后利用Matrix VB插件里面的繪圖函數(shù)將這些數(shù)據(jù)繪制成圖形顯示在VB指定的窗口內(nèi)。
4 VB和Matlab混合編程進行語音采集與處理實例
4.1 系統(tǒng)要求
實現(xiàn)這種方法PC機上必須具備以下一些軟件:1) MATLAB 6.5版本以上;2) MATLAB Compiler 3.0;3) MATLAB COM Builder 1.0 ;4) Microsoft Visual Basic 6.0;(5) Microsoft
4.2 具體的實現(xiàn)過程
1) 利用于Matlab編寫進行語音采集與處理的M文件。
function recordfre()
duration=5; %設(shè)置采樣時間為5s
rate=44100; %設(shè)置采樣頻率為44100hz
ai = analoginput('winsound');
addchannel(ai, 1);
set(ai,'samplerate',rate);
set(ai,'samplespertrigger',duration*rate);
start(ai); %開始對語音數(shù)據(jù)進行采集
[data,time]=getdata(ai); %獲取采樣的時間和數(shù)據(jù)(幅值)
fy=fopen('c:\\strt.txt','wt');
fprintf(fy,'%d\',data) ; %將采集的數(shù)據(jù)保存在c:\\strt.txt中
fclose(fy);
2) 將編寫的M文件生成COM組件(recordfre.dll)。
3) 在VB中新建一工程,在菜單工具條中選擇工程->引用,添加生成的動態(tài)鏈接庫以及Mmtrix組件。
4) 在VB界面上添加一個圖形框,兩個按鈕,分別用于語音采集和繪制曲線。VB部分程序編寫如下:
Private Sub record_Click() ’調(diào)用語音采集程序生成的COM組件
Set importwav = New wavfile.wavfileclass
Command2.Enabled = False
Call importwav. recordfre
Command2.Enabled = True
End Sub
Private Sub plot_Click() ‘繪制曲線在picture1窗口中
ax = vbaxes(Picture1.hWnd)
soundfile = vbload(\"c:\\strt.txt\") ‘讀取采集的語音數(shù)據(jù)
plot (soundfile)
End Sub
5) 運行結(jié)果如圖2所示。
5 結(jié)束語
利用COM組件實現(xiàn)了VB和Matlab的完美結(jié)合,從而充分發(fā)揮VB和Matlab各自的優(yōu)點實現(xiàn)了語音信號的采集和曲線的顯示。解決了VB采集語音信號方面的弱點,并能夠?qū)⒄Z音信號以曲線的形式顯示在VB指定的窗口內(nèi),有利于利用VB開發(fā)有關(guān)語音采集方面的應用軟件。
參考文獻:
[1] 易克初.語音信號處理[M].北京:國防工業(yè)出版社,2002.
[2] 楊秀章.COM技術(shù)內(nèi)幕[M].北京:清華大學出版社,1999.
[3] 左黎明,蔣先剛,胡梅.Matrix VB在信號處理與數(shù)據(jù)可視化系統(tǒng)設(shè)計中的應用[J].計算機與現(xiàn)代化,2004(3):100-102.
[4] Matlab Builder for COM Documention[Z].Mathworks,2004.