

摘要:為了實現虛擬儀器的遠程網絡語音通信,依托LabVIEW強大的網絡通信能力,采用NI公司開發的基于TCP/IP協議的DataSocket技術,編程實現遠程語音數據的點對點傳輸。用此技術可以很大程度上簡化甚至免除網絡通訊編程,可以很容易在網絡上實現高速語音數據傳遞。本文網絡版地址:http:∥www.eepw.com.cn/article/276360.htm
關鍵詞:DataSocket;語音通信;LabVIEW
DOI:10.3969/j.issn.1005-5517.2015.6.013
引言
LabVIEW具有強大的信號采集功能和網絡通信功能,這些功能使得LabVIEW的用戶可以很容易編寫出具有強大網絡通訊能力的LabVIEW應用軟件,實現遠程虛擬儀器。為了將人的語音或某個地點現場的聲音信號遠傳,可以依托LabVIEW這些功能,將聯網計算機聲卡上采集的語音信號,進行遠程語音數據的點對點傳輸。應用環境的網絡拓撲圖,如圖1所示。
1 利用DataSocket技術傳輸語音
LabVIEW實現網絡通信有3大類方法:(1)使用網絡通信協議編程實現網絡通信,可以使用的通信協議類型包括TCP/IP協議、UDP、串口通信協議等;(2)使用基于TCP/IP的數據傳輸協議DSTP的JDataSocket技術實現網絡通信;(3)使用共享變量實現網絡通信。由于網絡語音通信要求實時性強。本文采用第二種方法即DataSocket技術實現網絡語音通信。
DataSocket是NI公司提供的一種實時數據傳輸技術,可用于一個計算機內或網絡中多個應用程序之間的數據交換,是專門面向測量和自動化工程的網絡實時高速數據交換的編程技術。DataSocket克服了傳統TCP/IP傳輸協議需要較為復雜的底層編程、傳輸速率較慢(特別是對動態數據)等缺點,大大簡化了實時數據傳輸問題,它提供了一種易用、高效、可編程的軟件接口,能夠很方便地實現網絡上的多臺計算機之間的實時數據交換。
DataSocket包括了DataSocketServer Manager、DataSocket Server和DataSocket函數庫這幾個工具軟件,以及DSTP(DataSocket transferprotocol,DataSocket傳輸協議)、URL(uniform resource locator,通用資源定位符)和文件格式等技術規范。在LabVIEW中,用戶可以很方便地使用這些工具來實現遠程數據采集。
語音傳輸程序用到以下兩個DataSocketⅥ:
(1)讀取DataSocket函數(ReadDataSocket.vi):該節點用于從打開的URL連接中讀取數據。
(2)寫入DataSocket函數(WriteDataSocket.vi):該節點用于向打開的URL連接中寫入數據。這里的數據可以是單個或數組形式的字符串、邏輯(布爾)量和數值量等多種類型。
2 語音采集
利用聲卡采集語音信號實現語音信號雙聲道模擬輸入。將麥克風(話筒)插在聲卡的話筒輸入端口,并將其插入聲卡上的標記為“Mic In”的插孔中。通過該端口可以采集人的語音信號。
語音采集程序用到以下三個聲音處理相關Ⅵ:
(1)配置聲音輸入函數(SoundInput Configure.vi):利用該Ⅵ配置聲卡,并開始進行語音采集。采樣率設置為44.1kHz。通道數為2(即立體聲雙聲道輸入),每采樣比特數(即采樣位數為16位,采樣模式為連續采樣,緩存大小設置為每通道10000個樣本。
(2)讀取聲音輸入函數(SoundInput Read.vi):利用該Ⅵ從緩存中讀取數據。程序中,為了連續采集語音信號,將“讀取聲音輸入Ⅵ”放在了一個While循環中,用于從緩存中連續讀取語音數據,設置每次從每個通道中讀取樣本數為4410個。
(3)聲音輸入清零函數(Sound InputClear.vi):利用該Ⅵ停止采樣,并進行清除緩存和清除占用的內存等操作。
3 語音播放
利用聲卡輸出語音信號實現語音信號雙聲道模擬輸出。將揚聲器(喇叭)插在揚聲器輸出端口,并將其插入聲卡上的標記為“Speaker”或“SPK”的插孔中。通過該端口可以外接音箱的音頻線插頭,從而播放通過網絡傳輸過來的語音信號。
語音播放程序用到以下四個聲音處理相關Ⅵ:
(1)配置聲音輸出函數(SoundOutput Configure.vi):利用該Ⅵ配置聲卡,并開始聲音輸出。采樣率設置為44.1kHz。通道數為2(即立體聲雙聲道輸入),每采樣比特數(即采樣位數為16位,采樣模式為連續采樣,緩存大小設置為每通道10000個樣本。
(2)調用讀取聲音輸入函數(SoundInput Write.vi):該Ⅵ用于向緩存中寫入信號,本項目用來向緩存中寫入由網絡傳輸過來的語音信號。程序中,在其外邊添加一個While循環,實現連續寫入語音數據。
(3)設置聲音輸出音量函數(SoundOutput Set Volume.vi):該Ⅵ使用時串接在“設置聲音輸出音!Ⅵ”上,用于控制輸出音量大小。
(4)聲音輸出清零Ⅵ(sound OutputClear.vi):該Ⅵ用于停止輸出并執行相應的清除操作。
4 程序實現
程序采用C/S(Client/Server)模式,即客戶/服務器模式,包括一個服務器Ⅵ和一個客戶機Ⅵ。這種模型設計人員要做兩方面的開發,一是客戶端采集程序和數據遠程發布的程序的設計,另一個是客戶端數據的接收程序的設計。
程序的URL輸入端口設置數據連接網絡地址,可以使用psp、opc、ftp、http和file等通信協議傳輸數據,本程序根據寫入數據的類型及網絡配置使用dstp協議。dstp協議是LabVIEW專門為測試數據的安全快速的傳輸而設置。
(1)服務器端Ⅵ采集語音信號,并利用寫入DataSocket節點將數據發布到URL“dstp:∥127.0.0.1/TestWave”指定的位置中。服務器Ⅵ的程序框圖如圖2所示。
(2)客戶端Ⅵ,將傳輸過來的語音信號通過聲卡播放出來。客戶機Ⅵ利用讀取DataSocket節點將數據從URL“dstp:∥127.0.0.1/TestWave”捂定的位置讀出,并還原為原來的語音數據送到聲卡中。客戶端Ⅵ的程序框圖如圖3所示。
本程序的URL輸入端口地址配置為:dstp:∥127.0.0.1/TestWave,即只使用一臺電腦模擬網絡傳輸。另外,需要注意的是,在利用上述兩個Ⅵ進行DataSocket通信之前,必須首先運行DataSocket Servertsr。
5 結束語
DataSocket面向測量和網上實時高速數據交換,可用于一個計算機內或者網絡中多個應用程序之間的數據交換。使用DataSocket技術,可以更加方便地編寫出LabVIEW的遠程數據采集應用程序。所以本例利用DataSocket技術開發網絡語音通信模塊既能實現開發快速,又能實現軟件模塊的高效可靠。