Hlasový modem


Obsah


Úvod

Hlasový modem je běžný modem, který navíc umí přehrávat do telefonní linky digitální zvukový signál a také opačně předávat počítači digitalizovaný zvuk z telefonní linky. Dále umožňuje zvuky z linky rozpoznávat (ticho, vyzváněcí a obsazovací tóny, DTMF tóny). Používá se především jako telefonní záznamník. Při příchozím hovoru software rozpozná, jde-li o datové, faxové nebo hlasové volání. V posledně jmenovaném případě pak do telefonu přehraje zprávu pro volající a umožní zanechat hlasový vzkaz. Mezi nejznámější oblužné programy patří vgetty (jako součást mgetty) nebo mvm.


Instalace vgetty

Po rozbalení balíku změnit policy.h-dist na policy.h a podle potřeb jej nakonfigurovat a spustit make. Poté se přepnout do adresáře voice a opět spustit make. Nakonec spustit make install. Pokud instalujete z RPM-ka, naistalujte balíky mgetty-x.x.xx.rpm a mgetty-voice-x.x.xx.rpm.


Konfigurace

Voice.conf najdete buď v /etc/mgetty nebo /etc/mgetty+sendfax. Pokud jste vgetty kompilovali, může se konfigurační soubor nacházet v /usr/local/lib nebo /usr/local/etc. Nejdůležitější řádky jsou


Hlasový shell (vgetty)

Vgetty naváže spojení s volající stranou po $rings zazvoněních a začne přehrávat uvítací zprávu ($message_list ve voice.conf). Při přehrávání modem předává příchozí DTMF tóny vgetty. Pokud vgetty dostane sekvenci *čísla#, jedná se o DTMF příkaz. V takovém případě přestane přehrávat úvodní vzkaz a spustí $dtmf_program s parametrem čísla (pokud je ve voice.conf specifikován). Dostane-li vgetty na vstup od modemu pouze číslo, opět přestane přehrávat a snaží se navázat datové spojení a když neuspěje, pokusí se ješte o faxové spojení. Přijde-li pouze znak "#", vgetty jednoduše zavěsí. Pokud během přehrávání nepřijde žádný DTMF tón, vyšle vgetty pípnutí a začne nahrávat vzkaz volajícího. Náhrávání končí, přijde-li DTMF tón (jak je popsáno výše, v takovém případě se nahráná zpráva maže), pokud je překročeno $record_max_len nebo když volající zavěsí. Po ukončení této procedury vgetty spustí $message_program (pokud je definován ve voice.conf) s názvem nahrané zprávy jako parametrem. Vgetty pojmenovává každou nahranou zprávu jinak.


Hlasový shell (vgetty)

Vgetty naváže spojení po $rings a spustí skript $call_program. Po ukončení tohoto skriptu vgetty pokračuje podle návratového kódu skriptu: Při spuštění skriptu mu vgetty předá své PID (používá se pro komunikaci) a dále čísla dvou deskriptorů, které ukazují na dvě roury, sloužící ke komunikaci mezi vgetty a shellem. Shell pak může vgetty předávat své příkazy pomocí jednoduchého znakového protokolu a naopak vgetty předává shellu informace stavu linky. Při psaní takového skriptu si dejte pozor, aby každá nahraná zpráva dostala jiné jméno.


Uvítací zpráva

Uvítací zpráva musí být ve formátu, kterému rozumí váš modem. Takže ji můžete nahrát buď pomocí mikrofonu příkazem vm record -m soubor.rmdn nebo převést již existující zprávu do formátu .rmd (pomocí pvf tools).


Zdroje




Příklad hlasového shellu (skriptu)

send "ENABLE EVENTS" ANSWER=`receive` if [ "$ANSWER" != "READY" ]; then echo "$0: something's wrong" >&2 exit 1 fi if [ -f demo.rmd ]; then send "PLAY demo.rmd" fi while true; do ANSWER=`receive` case $ANSWER in PLAYING) ANSWER=`receive` case $ANSWER in READY) send "PLAY demo.rmd";; RECEIVED_DTMF) send "STOP"; proc_dtmf;; BUSY_TONE) send "STOP"; receive; send "GOODBYE"; receive; exit 0;; FAX_CALLING_TONE) send "STOP"; receive; send "GOODBYE"; receive; exit 2;; esac;; esac done