Un módem de voz es un módem de datos telefónico analógico con capacidad integrada para transmitir y recibir grabaciones de voz a través de la línea telefónica. Los módems de voz se utilizan para telefonía y contestadores automáticos . De forma similar al conjunto de comandos Hayes utilizado para módems de datos, en el que el ordenador anfitrión controla el módem mediante una serie de comandos conocidos como comandos AT , existe un conjunto bien definido de comandos AT de voz comunes que son bastante uniformes en toda la industria.
Problemas de implementación
Más versus Hash
Cada plataforma de módem de voz suele admitir uno de dos conjuntos de comandos de voz; en particular, una variante del conjunto de comandos contiene un signo más (+) y la otra contiene un signo de almohadilla (#).
Detección del modo de voz
La compatibilidad con el modo de voz se puede detectar en un módem mediante el siguiente comando: AT+FCLASS=?
Este comando suele ser compatible con el signo más, independientemente de si el módem admite el comando "plus" o el conjunto de comandos "hash", porque el comando (que significa "clase de fax") forma parte de los comandos de fax estándar de la industria , que siempre utilizan el signo más.
Un módem compatible con voz responderá con una lista de números separados por comas que incluye el número 8. Un módem que no es compatible con voz responderá con ERROR o con una lista de números que no incluye el 8. (Muchos módems mostrarán 0, 1, 2, lo que indica compatibilidad con datos (0) y faxes de clase 1 y 2; esto indica que no es compatible con voz).
Los módems que admiten el conjunto de comandos "hash" también suelen responder a AT#CLS=?.
Entrando en modo de voz
El comando AT+FCLASS=8 o AT#CLS=8 activará el modo de voz del módem. La mayoría de los módems permanecen colgados y responden con OK . Una vez aceptado este comando, la mayoría de los módems responderán con mensajes de escape de enlace de datos (DLE) en lugar de, o además de, las respuestas normales del módem. Por ejemplo, en lugar de informar que una línea telefónica está sonando con el mensaje RING , muchos módems enviarán el carácter ASCII DLE , seguido de la letra R. El conjunto específico de eventos DLE que informa cada módem depende de su chipset y está documentado en su guía de referencia.
Consultar las capacidades del módem
El comando AT+VLS=? o AT#VLS=? generalmente devuelve una lista de modos de funcionamiento específicos para cada módem. Cada uno de estos modos numerados determina el estado de la línea telefónica (colgado o descolgado), así como el enrutamiento del sonido entre cada uno de los siguientes:
- Grabación/reproducción
- Auricular telefónico
- Conector para altavoz (que podría simplemente conectarse mediante cable como entrada de audio en la tarjeta de sonido del PC en lugar de ser un conector independiente).
- Conector para micrófono (disponible en algunos módems de voz)
Muchos conjuntos de chips ofrecen una lista de todas las combinaciones posibles de modos, incluso si la placa del módem específica no las admite todas. Esto se debe a que el fabricante de la placa es casi siempre diferente del fabricante del conjunto de chips, y este último viene preconfigurado para admitir todo el hardware posible, aunque no esté implementado en la placa de circuito.
Ejemplo de respuesta a AT+VLS=? de un módem disponible en el mercado en 2006:
AT+VLS=? 0,"",0000000000,0000000000,B084008000 1,"T",0B8418E000,0FE418E000,0B8419E000 2,"L",0884008000,0CE4008000,0884018000 3,"LT",0B8418E000,0FE418E000,0B8419E000 4,"S",0084008000,0484008000,3084018000 5,"ST",0B8418E000,0FE418E000,0B8419E000 6,"M",0084008000,04E4008000,3084008000 7,"MST",0B8418E000,0FE418E000,0B8419E000 8, "S1", 0084008000,0484008000,3084018000 9,"S1T",0B8418E000,0FE418E000,0B8419E000 10,"MS1T",0B8418E000,0FE418E000,0B8419E000 11, "M1", 0084008000,04E4008000,3084008000 13,"M1S1T",0B8418E000,0FE418E000,0B8419E000 14,"H",0084008000,04E4008000,3084018000 15,"HT",0B8418E000,0FE418E000,0B8419E000 16,"MS",0084008000,04E4008000,3084018000 17,"MS1",0084008000,04E4008000,3084018000 19,"M1S1",0084008000,04E4008000,3084018000 20,"t",0B8418E000,0FE418E000,BB8419E000
Si bien cada módem es diferente, por lo general el modo 0 significa que el teléfono está colgado y el modo 1 es suficiente para descolgar, grabar/reproducir audio y detectar tonos DTMF (tonos de marcación).
El comando AT+VSM=? o AT#VSM=? generalmente devuelve una lista de formatos de datos de audio compatibles con el módem. Cada formato incluye un nombre (como PCM , ADPCM , μ-law , A-law ), un número de bits por muestra (normalmente 2, 3, 4, 8 o 16) y una frecuencia de muestreo de audio (normalmente 7200, 8000 o 11025 Hertz ). Estos son códecs de audio estándar de la industria cuyas implementaciones están ampliamente documentadas. El estándar ADPCM es una excepción. Los módems que afirman ser compatibles con ADPCM casi siempre son compatibles con Dialogic ADPCM , también conocido como "VOX", que es similar pero no compatible con otras implementaciones de ADPCM, incluyendo Interactive Multimedia Association (IMA) ADPCM y MS ADPCM (una implementación de Microsoft utilizada en archivos WAV ). Los módems también pueden ser compatibles con estos formatos si se especifica un calificador; de lo contrario, por defecto, ADPCM significa Dialogic.
Ejemplo de respuesta a AT+VSM=? de un módem disponible en el mercado en 2006:
AT+VSM=? 1,"PCM SIN FIRMAR",8,0,8000,0,0 129,"IMA ADPCM",4,0,8000,0,0 130,"PCM SIN FIRMAR",8,0,8000,0,0 140,"ADPCM de 2 bits",2,0,8000, 141,"ADPCM de 4 bits",4,0,8000,0,0
El formato de datos de audio deseado se selecciona con el mismo comando, pero utilizando un número en lugar de un signo de interrogación. Se utiliza tanto para enviar como para recibir.
Responder llamadas
Las llamadas se suelen contestar con los comandos AT+VLS=n o AT#VLS=n , donde n es un número que indica el modo del módem. En la gran mayoría de los módems, este número será 1 para contestar una llamada y 0 para colgar; otros números activan otras funciones, como el altavoz. Algunos módems responden a ATA (el comando estándar de respuesta en modo de datos), pero otros lo interpretan como una orden para contestar en modo de datos y no de voz.
Transmisión de datos de audio
Para comenzar a transmitir datos de audio, el host envía el comando AT+VTX o AT#VTX . Esto genera una respuesta del módem de CONNECT o VCON . (Los módems que usan el conjunto de comandos "+" suelen responder CONNECT, mientras que los que usan el conjunto "#" responden VCON, que significa conexión de voz).
A partir de ese momento, el módem interpreta cualquier dato enviado desde el ordenador como datos de audio en formato de onda, utilizando el códec seleccionado mediante el comando AT+VSM o AT#VSM.
Los datos de audio siempre se envían al módem un poco más rápido de lo que este puede reproducirlos, por lo que el módem puede almacenar en búfer una pequeña parte y reproducirlos sin problemas, sin chasquidos ni crujidos causados por retrasos en el sistema operativo del ordenador. Por ejemplo, durante la reproducción de un archivo de audio de 8 kHz con una resolución de 8 bits (que genera 8000 bytes, u 80 000 bits si se incluyen los bits de inicio/parada, por segundo), los datos deben viajar por el puerto serie a un mínimo de 115 200 bits por segundo. (115 200 bits/s es la primera configuración de un puerto serie típico de ordenador que supera los 80 000). Además, debido a la sobrecarga adicional que supone duplicar los bytes DLE en el flujo (que se menciona más adelante), es necesario un pequeño ancho de banda adicional para permitirlo.
Cuando el módem necesita que el ordenador haga una pausa temporal para que la reproducción se sincronice, reduce temporalmente la señal CTS (Clear to Send) en el puerto serie RS-232. El módem vuelve a aumentar la señal a tiempo para que el ordenador reanude el envío de datos de audio antes de que el búfer de reproducción se vacíe por completo.
Cuando el ordenador quiere indicar el final de los datos de audio, la mayoría de los módems esperan ver un carácter ASCII DLE (0x10), seguido del carácter !.
Dado que el byte DLE puede aparecer, y de hecho suele aparecer, en los datos de audio normales, debe enviarse dos veces al módem cuando se pretende que se interprete como un byte de datos de audio.
La mayoría de los módems también aceptan la secuencia DLE + CAN (cancelar) como señal para cancelar la reproducción de audio. La diferencia radica en que el módem debe entender que debe interrumpir la reproducción de inmediato, en lugar de permitir que los datos restantes en el búfer de reproducción se completen.
Cuando el módem termina la reproducción, responde OK .
Reproducción con limitación de velocidad
Durante la reproducción, es necesario enviar los datos de audio a una velocidad que permita una reproducción fluida, pero sin superar la capacidad del módem. También es conveniente asegurarse de que el módem pueda interrumpir la reproducción y descartar el audio almacenado en búfer en caso de que se cancele un mensaje. La cancelación de mensajes es esperada por quienes ya conocen las respuestas a las indicaciones de voz y las proporcionan con antelación (y que se irritarían al tener que escuchar una indicación a la que ya han respondido).
Existen varias maneras de lograr que el ordenador envíe datos de audio al módem a una velocidad que permita mantener el ritmo de la reproducción sin saturar el búfer de audio.
La opción más sencilla es utilizar el control de flujo CTS. Existen las siguientes advertencias.
- Algunos módems de voz presentan fallos en la implementación del control de flujo. En particular, un gran número de chipsets Conexant a veces desconectan la línea CTS y no la restablecen durante la reproducción. Conexant es un chipset muy popular en los módems de voz actuales y, por lo general, implementa bien los comandos de voz, por lo que vale la pena considerar una solución alternativa para este fallo. Algunos chipsets Conexant tampoco restablecen la línea CTS si el módem envía o procesa el comando de "abortar reproducción" mientras la línea CTS está desconectada.
- Algunos módems de voz ofrecen un búfer de transmisión muy grande (por ejemplo, 4 segundos de audio) junto con un error que impide que el host solicite la interrupción de la reproducción. El resultado es que si una persona que llama presiona un tono que debería interrumpir un mensaje, y el host proporciona datos de audio ilimitados solo mediante CTS, el mensaje no se puede interrumpir durante al menos 4 segundos.
Una segunda forma de controlar la reproducción consiste en consultar un temporizador de pulsos proporcionado por el sistema operativo del ordenador anfitrión, basado en un reloj de hardware independiente de la carga de la CPU. Esta función puede estar disponible o no, y depende totalmente del sistema operativo del anfitrión. Sin embargo, cuando está disponible, es extremadamente fiable. Es razonable suponer que el PC necesita anticiparse a la reproducción en unos cientos de bytes y que el módem almacenará este contenido en búfer. (Los comandos AT+VBQ o AT#VBQ en los módems de voz suelen mostrar el tamaño del búfer en bytes, siendo una respuesta típica de 1 a 2 kilobytes).
Una tercera forma de controlar la reproducción consiste en insertar mensajes DLE ficticios en el flujo de salida, de manera que los datos de audio tarden un tiempo conocido en transmitirse a través del puerto serie, y la reproducción esté esencialmente sincronizada por la UART en el puerto serie.
Por ejemplo, al considerar el uso de relleno DLE ficticio, primero se deben tener en cuenta algunos aspectos. En un escenario típico, un segundo de audio podría constar de 8000 muestras de un byte, y dado que un pequeño porcentaje de estas muestras es igual al byte DLE y debe duplicarse, un segundo de audio típico podría constar de 8050 bytes. El truco consiste en insertar suficientes mensajes DLE sin sentido en los bytes que el módem descartará (es decir, un DLE seguido de un byte sin significado específico) para que haya exactamente 11 520 bytes (suponiendo un puerto serie bloqueado a 115 200 bit/s) que tardarán exactamente 1 segundo en transmitirse a través del puerto serie. Si bien es posible que la latencia de interrupción en el PC host provoque que se envíen ligeramente menos de 11 520 bytes por segundo, la mayoría de los módems de voz almacenan en búfer suficientes bytes antes de comenzar la reproducción para permitir una pequeña desviación en este caso. Además, el PC puede programarse para convertir un segundo de audio en algo menos de 11.520 bytes (todos los módems de voz almacenarán en búfer un pequeño exceso sin necesidad de control de flujo, siempre que no supere unos pocos cientos de bytes).
Es improbable que el relleno DLE ficticio funcione con "Winmodems" que no tienen UART físico. Solo tiene sentido con módems serie externos que se sincronizan físicamente a una velocidad de bits específica mediante un generador de reloj ubicado detrás del puerto serie externo.
Grabación de datos de audio
El método para grabar datos de audio es el mismo, salvo que el comando es AT+VRX o AT#VRX , y el módem transmite los datos de audio mientras el ordenador los recibe. Aquí no se utiliza el control de flujo RTS/CTS (el ordenador debe aceptar todos los datos de audio que recibe, y el módem ajusta automáticamente su transmisión para que coincida con la frecuencia de muestreo de audio).
El módem nunca deja de transmitir hasta que el ordenador le indica que se detenga, lo que normalmente se hace pulsando CTRL-C. Los datos siempre finalizan con DLE+!, y todos los bytes DLE que aparecen de forma natural en la transmisión se envían dos veces para diferenciarlos de los mensajes DLE normales.
Antes, durante y después de la grabación, el módem puede notificar al ordenador anfitrión sobre eventos específicos, entre los que se incluyen, pero no se limitan a, los siguientes:
- Se detectaron pulsaciones de teclas por tonos táctiles.
- Silencio detectado
- Se ha detectado una inversión de polaridad en la línea (lo que suele significar que la persona que llama ha colgado).
- Se ha detectado tono de marcado
- Se ha detectado el tono del fax.
Cuando el módem desea informar al host sobre estos eventos, envía un byte DLE, junto con un mensaje (generalmente) de 1 byte que describe el evento. La lista de eventos admitidos varía según el módem, pero normalmente un dígito (así como * y #) indica que se han pulsado teclas de tono, y la letra "s" indica que se ha detectado silencio. Algunos módems informan de un solo evento por cada pulsación de tecla de tono, mientras que otros informan de una pulsación repetida hasta que se suelta la tecla, y luego de un evento especial de "tecla liberada".
Finalizar una llamada de voz
Cualquiera de los siguientes comandos suele provocar que el módem cuelgue y finalice una llamada de voz: AT+VLS=0 , AT#VLS=0 , ATH , ATZ . También suele ocurrir al desactivar la señal RS-232 DTR (terminal de datos listo). El módem permanece en modo de voz (excepto en el caso de ATZ).
Los módems de voz no cuelgan automáticamente, incluso si la persona que llama lo hace. Pueden informar sobre la desconexión, el tono de marcado o el silencio, pero es el ordenador quien debe actuar en consecuencia. Si mientras el módem está grabando, la persona que llama cuelga y el ordenador no reacciona, el módem seguirá grabando todo lo demás que se escuche en la línea, como tonos de marcado, mensajes de error de la compañía telefónica, etc.
Véase también
Referencias
- Manual de referencia de comandos AT para chipsets de Rockwell, Conexant y Lucent. (Cada fabricante de chipsets produce un manual con el mismo título, seguido del nombre del producto al que se aplica).
- Documentación de soporte técnico de Zoom, referencias de comandos AT
- Unión Internacional de Telecomunicaciones (febrero de 1998), Control de las funciones relacionadas con la voz en un DCE por un DTE asíncrono , Serie V: Comunicación de datos a través de la red telefónica: Procedimientos de control, Unión Internacional de Telecomunicaciones, Recomendación V.253 de la UIT-T
- Mirho, Charles (agosto de 1996), "Para obtener información sobre las extensiones de módem de voz para Windows 95, ¡presione 1 ahora!" , Microsoft Systems Journal ,
El estándar AT de Hayes ayudó a promover la aceptación generalizada de los módems de datos porque los programas podían simplemente enviar el AT-mumble-this y AT-mumble-that apropiados, y cualquier módem que hable el estándar AT sabrá qué hacer. Un estándar similar, AT+V, parece haber surgido también para módems de voz. El conjunto de comandos AT+V consta de comandos con prefijo AT de Hayes y comandos de voz con prefijo +V. AT+V está documentado como el estándar ANSI/TIA/EIA IS-101 titulado "Interfaces digitales de fax: estándar provisional de control de voz para DCE asíncrono". Una continuación de esta especificación es PN-3131 del subcomité técnico TR-29.2 de TIA.
- módems