Dialer con generación de DTMF

Ernesto Hernandez-Novich emhn at telcel.net.ve
Wed Feb 6 09:59:32 CST 2002


On Wed, 6 Feb 2002, Carlos Guilarte wrote:
> Como tal el modem puede generar el código DTMF, y con hacer un software
> que envie comandos AT al modem ya tienes...
> por ejemplo prueba con minicom :
>  >ATDT 04145555555
> si el altavoz del modem esta encendido escucharas el tono de  marcar y
> los tonos DTMF.

El problema de Alfredo es enviar tonos DTMF _después_ de haber
establecido una conexión. Una vez que estableciste la conexión (que
debe ser de _voz_, no sirve datos ni fax), no tienes acceso a ATDT.

Se requiere generar los tonos adecuados (que a modo de información,
cada "tono" es en realidad un par de tonos con frecuencias particulares
seleccionadas para que la interferencia sea imperceptible) desde
_software_; bien sea porque tienes un generador de tonos (3l33t h4x0r)
o porque los tienes pre-grabados en archivos de sonido.

Aún así, te resta el problema de enviar un archivo de _audio_ para que
sea _reproducido_ por el modem. Los modems con capacidad de voz permiten
enviar un archivo de audio en un formato específico para cada modem,
de modo que éste lo reproduzca sobre la línea [1]; no son archivos WAV,
AU, AIFF, VOC, ni _ninguno_ de los formatos habituales que uno encuentra
con sox.

De modo que tu problema se reduce a tener los tonos pregrabados en el
formato que requiere tu modem, y reproducirlos cuando haga falta durante
la llamada.

Alfredo, puedes comenzar por usar vgetty [2]. Este es un getty especializado
para modems de voz que te va a proveer, entre otras cosas, una
aplicación de nombre vm que permite controlar la reproducción de
archivos de audio hacia el modem y desde el modem (si, puedes recibir
llamadas de voz, capturarla y guardarla en tu disco duro). Forma parte
de la distribución de mgetty+sendfax

apt-get install mgetty mgetty-pvftools mgetty-voice

Ahora bien, _nunca_ me verías haciendo un script de shell que emplee vm.
Estamos en el siglo 21, existe Perl y Modem::Vgetty que hace
_exactamente_ lo que te imaginas en 10 líneas...

#!/usr/bin/perl
# hack.pl
use Modem::Vgetty;
my $p = "800-TOLKIEN";
my $m = "frodowashere.rmd";
my $v = new Modem::Vgetty;
$v->device('DIALUP_LINE');
$v->add_handler('BUSY_TONE', 'finish', sub { $v->stop; exit 0; });
$v->enable_events;
$v->dial($p);
$v->waitfor('READY');
$v->play_and_wait($m);

Prepara el dispositivo, agrego un callback en caso de que la línea esté
ocupada, activo el manejo de eventos de vgetty, marco, espero que el
_modem_ me indique que se estableció la comunicación de voz y luego
reproduce el sonido. Si, es un ejemplo unidireccional; no, no voy a
poner un ejemplo bidireccional porque la documentación del módulo
es extensa al respecto; si estás navegando un menú, evidentemente te
hará falta esperar tonos de control y bla bla bla. Es muy fácil.

frodowashere.rmd es un archivo de _audio_ que contiene una grabación
de voz en el formato particular del modem de voz, y fue capturada
utilizado el comando vm (y un micrófono conectado al _modem_).

vm record -l ttyS0 -m frodowashere.rmd

y para ponerlo todo junto

vm shell -l ttyS0 -S hack.pl

¿Cómo? ¿Qué quieres hacer el voice-mail? Modem::VBox

> Alfredo Rahn wrote:
> > Saludos gente!
> >
> > Tengo el siguiente escenario: un cliete mio utiliza el servicio de
> > Secretaria Virtual de Telcel para enviar correspondencia de voz a sus
> > clientes y proveedores, y refiere molesto el proceso de marcar los
> > numeros celulares de todos ellos cada vez... asi que requiere de un
> > software que le permita discar hacia dicho sistema, navegar hasta la
> > opción de envio de mensajes, marque usando DTMF los numeros
> > correspondientes (hasta 200 por vez), y luego, de ser posible,
> > reproduzca el mensaje de voz (tal vez almacenado en un archivo .wav o
> > ..mp3) hacia el modem.

Puedes hacer una máquina de estados para el envío de los tonos (es
elegante y simple de modificar) o lo puedes programar con ifses (que
funciona, claro, pero te complica implementar otros flujos de tonos).

Puedes sintetizar el mensaje desde "texto" utilizando festival,

apt-get install festival festvox-ellpc11k festvox-kdlpc8k

(voces masculinas en español e inglés, respectivamente)

Puedes preparar los mensajes en cualquier computador y los grabas
en .wav, para luego pasarlo a .rmd puedes usar los comandos de
conversión que incluye vgetty. Siendo inteligente, grabas los mensajes
en mono, 8000, 8 bits y luego los conviertes.

> > Tiene instalado un modem Us-Robotics Sportster interno con voz, y este
> > esta conectado a sendo Motorola FX-2000 (estacion celular base).

Ese modem funciona con vgetty. Actualiza el firmware a la última versión
disponible.

[1] Ciertamente, también se puede conectar la línea de salida de la
    tarjeta de sonido hacia el micrófono del modem, pero el audio que
    se reproduzca debe estar a 8000 u-Law mono, caso contrario el ruido
    y la distorsión son importantes.
-- 
Ernesto Hernández-Novich - Running Linux 2.4.17 i686 - Unix: Live free or die!
Trouble getting proper answers? RTFM and STFW.
Don't like my answers? Keep sending money for faster/longer ones.
Don't get it? FOAD. I mean it. Or procmail me to /dev/null (Ask me how!)
If you can't apt-get it, it isn't useful or doesn't exist.

------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list