linux用modem打電話、傳送語音

要用modem來打電話,該如何作呢? 可能要知道如何和modem作溝通吧!

目前有做過的三種方式有: minicom、kermit、及使用c直接編寫程式。

minicom:

下載安裝minicom
#apt-get install minicom

設定minicom
#minicom //叫出minicom的終端視窗

//出現視窗後,按一下 「Control+A」,兩鍵放開後再單按 「Z」 鍵。

//出現minicom命令選單按下「O」鍵後,進minicom設定選單之後再選擇設定 serial port setup 。

//要能讓minicom可以正常的操作modem必需要指定正確的modem位置。
//我電腦上的modem是接在/dev/ttyS0。所以就指定serial device : /dev/ttyS0
//還有如果可以的話,請盡可能使用Hardware Flow Control 。在撥放聲音檔案時,才不會有問題!

設定完成後,就可以操作modem了。
要能傳送語音資料,我們必需要知道modem所支援的壓縮方式和取樣規範。
at+vsm=? 這個指命可以列出modem所支援的哪些模式。

at+vsm=?
128,"8-BIT LINEAR",(8000)
OK

上面告訢我們modem支持8bits線性的壓縮方式而取樣頻率為8000。

接著準備所要撥放的音源檔案,可以找個MP3的檔案來轉檔就可以了。
可以利用sox的這個聲音格式的轉換工具來完成。

安裝sox:
#apt-get install sox libsox-fmt-all

轉成所需要的格式(8bits線性,取樣頻率8000hz)
#sox input.mp3 -b8 -u -r8000 -c1 output.wav

可以用soxi確認是否輸出格式如我們所預期
#soxi output.wav

Input File     : 'output.wav'
Channels       : 1
Sample Rate    : 8000
Precision      : 8-bit
Duration       : 00:04:52.15 = 2337228 samples ~ 21911.5 CDDA sectors
File Size      : 2.34M
Bit Rate       : 64.0k
Sample Encoding: 8-bit Unsigned Integer PCM

有了聲音檔,我們在進來minicom來實際操作一次如格傳送語音
#minicom

歡迎使用 minicom 2.4

選項: I18n
編譯於 Jan 25 2010, 07:02:36.
Port /dev/ttyS0

按 CTRL-A Z 說明特殊鍵

AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0                                     機   |
OK
at z h +fclass=8
OK
atdt2800;
OK
at+vls=1
OK
at+vtx
CONNECT

出現連線CONNECT時,我們可以開始傳送語音檔。

開啟另一個終端介面,對modem輸出語音檔
#cat output.wav > /dev/ttyS0 &
但是我們無法得知對方是否已接聽話機,所以撥放語音時就等於自已對話機自言自語。對方接起話機時,可能語音檔已播一半了。
播完語音檔要關閉VTX語音傳送模式,我們就要對modem送出控制字元「DLE」「ETX」。

#echo -e '/0x10/0x03' > /dev/ttyS0
#至於為什麼要送出 /0x10/0x03 則是參考 ASCII

回到minicom的操作介面,此時CONNECT下面已接著OK的字樣了。
接著我們掛斷modem並離開minicom
ath
ctrl+a -> z -> q >確定離開

以上是minicom手動發送語音的方式。
minicom 要完成播出的語音自動化可能比較困難,如果半自動可以用runscript來達成

而至於 kermit和c語言要如何編譯和撰寫呢?
這就要參考kermit’s modem script 的範例,C 要如何寫呢?可參參考這篇 Serial Programming HOWTO,這篇可以說是serial programming 的標準範例。
至於AT 指令不知道要哪查的話,可以參考這幾個地方:
Modem AT Command SetVoice Operation

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s