Hlasový modem je běžný modem, který je navíc schopen přehrávat z počítače zvukové soubory a naopak nahrávat zvuky přicházející
z telefonní linky do souboru na disk počítače. Dále rozpoznává tóny na lince jako oznamovací tón, obsazeno atd. a konečně rozpoznává i tzv. DTMF tóny (Dual Tone Modulation frequency). To jsou zvuky, které jsou vydávány telefoními přístroji při stisku nějaké klávesy.
Hlasový modem může fungovat jako prostý záznamník, ale díky schopnosti rozpoznávat DTMF tóny zvládne náročnejší aplikace.
Nejprve je nutné nainstalovat vgetty. To se pro RedHat nachazí v rpm balíku mgetty-voice-1.1.21-4.i386.rpm. V něm se nachází i utilita vm, která umí mimo jiné přehrávat zaznamenané vzkazy a nové vzkazy nahrávat na disk. Všechny zvukové soubory mají příponu rmd (Raw Modem Data), což není žádný standartní formát, nýbrž nativní formát modemu. Pro konverzi mezi formáty slouží utility pvftools.
Jelikož software prožívá bouřlivý vývoj a autoři nestihli aktualizovat manuálové stránky, neobsahuje tento balik téměř žádnou dokumentaci. O trochu lepší je to s mgetty-1.1.21-4.src.rpm.
Program vgetty je rozšíření programu mgetty. Soubor, ve kterém jsou volby nejen pro vgetty, ale i pro vm a pvftools je implicitně v /etc/mgetty+sendfax a má jméno voice.conf .
Některé volby:
Pokud není uvedeno žádné jméno skriptu v call_program, vgetty přijme hovor, přehraje zprávu ze souboru
$voice_dir / $message_dir / jmeno ,kde jmeno musí být uvedeno v souboru
$voice_dir / $message_dir / Index .
Pak zazní signál a nahrává se vzkaz z tel. linky. Nahraný vzkaz se nachází v adresáři
$voice_dir / $recieve_dira má náhodné jméno. Pokud volající vysílá DTMF tóny, je volán skript uvedený v dfmt_program. Interface viz. voice.conf.
Pokud je uvedeno jméno skriptu v call_program, vgetty spustí tento program v příslušném shellu, nastaví mu roury VOICE_INPUT, VOICE_OUTPUT a další promněné. Skript je tak schopen zjišťovat stav modemu a ovládat ho.
Příklad skriptu: přehraje zprávu a zavěsí
#! /usr/bin/vm shell #vrací stav modemu function receive { read -r INPUT <&$VOICE_INPUT; echo "$INPUT"; } #posílá příkaz voice shellu function send { echo $1 >&$VOICE_OUTPUT; kill -PIPE $VOICE_PID; } ANSWER=`receive` if [ "$ANSWER" != "HELLO SHELL" ]; then exit 1 if send "HELLO VOICE PROGRAM" ANSWER=`receive`; if [ "$ANSWER" != "READY" ]; then exit 1 fi send "PLAY /var/spool/voice/messages/greeting.rmd" ANSWER=`receive` if [ "$ANSWER" != "PLAYING" ]; then exit 1 fi ANSWER=`receive` if [ "$ANSWER" != "READY" ]; then exit 1 fi send "GOODBYE" ANSWER=`receive` if [ "$ANSWER" != "GOODBYE SHELL"]; then exit 1 fi exit 0
Některé příkazy a odpovědi voice shelu
Nejpoužívanější události:
Pro pohodlnější programování než jsou shellovské skripty nabízí Perlové rozhraní Modem::Vgetty. Příklady a popis jsou uvedeny v
mgetty-1.1.21-4.src.rpm v adresáři voice/Perl