Hlasové modemy

Josef Mariánek, marianek@fi.muni.cz


Obsah


DTMF technologie

DTMF (Dual Tone MultiFrequency) je telefonní technologie, která umožňuje vytvořit 16 různých tónů za použití 8 kmitočtů. Těchto 16 tónů dostačuje k zajištění zvláštního tónu pro každé ze 12 základních tlačítek na tlačítkovém telefonu a pro 4 doplňkové klávesy (DK). Jak jsou tlačítkům kmitočty přiřazeny ukazuje následující "obrázek".

            1209  1336  1477  1633

     697     1     2	 3     DK1
       
     770     4     5     6     DK2 
      
     852     7     8     9     DK3 
       
     941     *     0     #     DK4 


Vgetty

Úvod

Vgetty je nástroj, který umožňuje využít schopností hlasového modemu. Je dobře konfigurovatelný, vytvoření systému na přání není problém. Vgetty umožňuje detekovat DTMF tóny, dále zvukové signály pro vytvoření faxového/datového spojení a umožňuje nahrávat a přehrávat hlasové zprávy. Vgetty vznikl jako rozšíření programu mgetty (obsluha modemové linky) a pro datové/faxové přenosy ho využívá.

Princip fungování

Vgetty čeká na přiděleném zařízení (zpravidla ttyxx) na zazvonění. Poté odpoví uvítací zprávou (konfigurace viz níže) během jejího přehrávání detekuje DTMF tóny. Pokud přijde sekvence alespoň 2 DTMF tónů, pak spustí odpovídající dtmf_program. Pokud je tón jen jeden, zkouší navázat datové/faxové spojení. Pokud je ustaveno, pak zavolá mgetty. Dalším možným případem je detekce znaku #, v tom případě vgetty zavěsí.

Pokud nenastane žádný z předchozích případů (tj. žádný DTMF tón), pak vgetty provede provede příkaz beep a přepne se do záznamového režimu. Záznam (hlasu) končí po překročení record_max_len (viz konfigurace) nebo po příchodu nějakého DTMF tónu - v tom případě se provede příslušný dtmf_command. Nakonec může vgetty spustit program specifikovaný v konf. souboru jako message_program s parametrem právě nahrané zprávy.

Instalace a jednoduchá konfigurace

Jak již bylo řečeno, vgetty je součástí balíku mgetty+sendfax , který je součástí standartní distribuce Linuxu. Po nainstalování by měl být konfigurační soubor pro voice rozšíření mgetty "voice.conf" ve stejném adresáři, jako konfigurační soubory mgetty+sendfax (zpravidla /etc/mgetty+sendfax/).

Konfiguraci lze provést dvěma způsoby. Nyní se zaměříme na jednodušší verzi konfigurace vgetty, tj. ve voice.conf nebudeme specifikovat call_program pro obsluhu jednotlivých událostí (použije se defaultní nastavení). Pozornost je třeba zaměřit zejména na následující řádky:

voice_log_level x
port_speed xxxxx
rec_silence_len xx
rec_silence_treeshold xx
rec_remove_silence (false/true)
rec_min_len x
rings x
voice_dir
receive_dir
message_list
record_max_len
message_program
 

Konfigurační soubor je dobře komentovaný, takže nastavení správných hodnot by nemělo být problematické. Pozn.: x ve výše uvedeném výpisu znamená dekadickou číslici.

V dalším kroku je třeba upravit soubor /etc/inittab. Pokud už je v provozu mgetty, pak ho stačí nahradit vgetty, např.:

s1:345:respawn:/sbin/mgetty ttyS2 --> s1:345:respawn:/sbin/vgetty ttyS2

V tomto případě bude modem připojený k ttyS2 obsluhován vgetty. Je třeba dát pozor na správnost absolutní cesty k vgetty a dále na uvedení respawn (automatické restartování po ukončení činnosti).

Dále je třeba do adresáře specifikovaného ve voice.conf jako voice_dir zapsat soubor s uvítací zprávou specifikovanou v message_list (dále budu předpokládat, že voice_dir je nastaveno na standartní /var/spool/voice/message/ a message_list obsahuje jeden soubor standard.rmd). K tomu je možné použít např. program vm:

vm record standard.rmd

Posledním krokem uvedené rychlé instalace je restart inittab:

init q

Pokud by nastaly nějaké problémy, je dobré se podívat do log souboru pro vgetty. Standartně je nastaven na /var/log/vgetty.ttyxx.log. Log soubor pro program vm je standartně v /var/log/vm.log.

Konfigurace s uvedením call_program ve voice.conf, skriptování

Kromě standartní obsluhy událostí lze napsat i skript specifikovaný v call_program, který bude zpracovávat jednotlivé DTMF číselné kombinace (viz dále). Po skončení call_program vgetty zpracuje jeho návratový kód a provede pokus o navázání datového (návr. kód 0), faxového (návr. kód 1) nebo postupně obou spojení. Pokud není požadavek (DTMF tón) na takové spojení, pak vgetty skončí.

Program (skript) uvedený v call_program se opírá o tzv. voice library. Voice library používá dva unikátní souborové dekriptory ($VOICE_INPUT a $VOICE_OUTPUT) a umožňuje k nim skriptům přístup prostřednictvím dvou základních funkcí "send" a "receive". Send posílá voice library zprávu (příkaz) a receive naopak zprávu přijímá. Vše je lépe pochopitelné na konkrétním příkladu (část skriptu používajícího voice library):

ANSWER=`receive`
if [ "$ANSWER" != "HELLO SHELL" ]; then
    echo "$0: voice library not answering" >&2
    exit 1
fi
send "HELLO VOICE PROGRAM"
if [ "$ANSWER" != "READY" ]; then
    echo "$0: initialisation failed" >&2
    exit 1
fi
....... atd.

Podrobný popis příkazů, odpovědí, událostí a detekovaných tónů při komunikaci s voice library je možné nalézt na adrese [1].


Záznam, přehrávání, konverze a komprese zvukových dat - vm, *pvf*

Příchozí zprávy lze jednoduše přehrát pomocí programu vm:

vm play file_name

Pokud máte zvukovou kartu, je možné pro přehrávání použít například programy z "pvf tools":

rmdtopvf file.rmd | pvfspeed -s 8000 | pvftobasic > /dev/audio

Pro záznam lze použít již dříve zmíněný program vm:

vm record standart.rmd

Pro konverzi již nahraného VOC souboru lze použít "pvf tools". Následující příklad převede soubor file.voc do formátu Rockwell s kompresí typu 4 (je to jeden z formátů podporovaných hlasovými modemy):

voctopvf file.voc | pvftormd Rockwell 4 > file.rmd


Další programy pro hlasové modemy

Další programy pro využití možností hlasových modemů je možné nalézt na adrese [2] uvedené v referencích. Zde je možné nalézt několik programů pro IP telefonii, které bez problémů fungují pod Linuxem (pod grafickým rozhraním X i pod konzolou).


Reference

[1] Dokumentace k vgetty: http://alpha.greenie.net/vgetty/
[2] Voice-Over-IP SW: http://www.linux.com/multimedia/