Набор команд голосового модема

Голосовой модем — это аналоговый телефонный модем данных со встроенной возможностью передачи и приема голосовых записей по телефонной линии. Голосовые модемы используются для телефонии и автоответчиков . Подобно набору команд Hayes , используемому для модемов данных, в котором хост-компьютер управляет модемом с помощью серии команд, известных как AT-команды , существует четко определенный набор общих голосовых AT-команд, которые в некоторой степени согласованы во всей отрасли.

Проблемы внедрения

Поскольку голосовой режим не является типичным применением модема, многие модемы на рынке имеют плохую или глючную поддержку своих голосовых режимов. Характеристики хорошего голосового модема во многом зависят от предполагаемого применения и включают в себя:

  • Надежная работа. Многие модемы просто "блокируют" или выводят из строя хост-компьютер, хотя это чаще встречается у Winmodem . У других есть ошибки управления потоком и другие ошибки реализации, которые могут приводить к зависанию вызовов, пропуску звука или продолжению воспроизведения звука после попытки прерывания.
  • Хорошие аудиохарактеристики. Некоторые модемы имеют некорректно низкую громкость сигнала или создают аудиошум. Некоторые модемы не могут распознать все, кроме лучших сигналов DTMF . Некоторые модемы плохо справляются с записью или обнаружением и сообщением о тишине или инверсии напряжения окончания вызова, которые необходимы некоторым приложениям.
  • Поддержка идентификатора вызывающего абонента , если необходимо. "Идентификатор вызывающего абонента типа 1", используемый в Северной Америке, отсутствует в подавляющем большинстве модемов. Почти все чипсеты модемов поддерживают идентификатор вызывающего абонента, но поскольку типичному пользователю коммутируемого Интернета идентификатор вызывающего абонента не нужен, дополнительные компоненты, необходимые для поддержки идентификатора вызывающего абонента, часто опускаются по соображениям стоимости.
  • Поддержка нескольких экземпляров. Драйверы для многих внутренних модемов (обычно Winmodems) не допускают более одного одного и того же устройства внутри одного компьютера. Симптомы несовместимости включают сбои, синие экраны смерти или простую неработоспособность всех модемов, кроме одного. Внешние RS-232 -модемы (последовательные) не имеют этого ограничения, поскольку каждый модем содержит свой собственный микропроцессор и не знает о других модемах на том же хосте. USB- модемы могут иметь или не иметь эту проблему, поскольку некоторые USB-модемы являются просто последовательными модемами с набором микросхем преобразователя «USB-to-serial» (в этом случае проблем быть не должно), а другие USB-модемы «контролируются хостом» и по сути являются внешними подключенными Winmodems (в этом случае проблема может сохраняться).

Плюс против Хэша

Каждая платформа голосового модема, как правило, поддерживает один из двух наборов голосовых команд — в частности, один из наборов команд содержит знак плюс (+), а другой — знак решетка (#).

Обнаружение голосового режима

Поддержку голосового режима на модеме можно определить, введя следующую команду: AT+FCLASS=?

Эта команда обычно поддерживается со знаком «плюс» независимо от того, поддерживает ли модем набор команд «плюс» или «хеш», поскольку эта команда (которая обозначает «класс факса») является частью стандартных факсимильных команд, которые всегда используют знак «плюс».

Модем, поддерживающий голос, ответит списком номеров, разделенных запятыми, включая цифру 8. Модем, не поддерживающий голос, ответит ERROR или списком номеров, не включающим 8. (Многие модемы сообщат 0,1,2, что указывает на поддержку данных (0) и факсов классов 1 и 2 — это признак того, что поддержка голоса отсутствует.)

Модемы, поддерживающие набор команд «хэш», обычно также реагируют на AT#CLS=?.

Вход в голосовой режим

Команда AT+FCLASS=8 или AT#CLS=8 переведет модем в голосовой режим. Большинство модемов по-прежнему остаются на трубке и отвечают OK . После принятия этой команды большинство модемов ответят сообщениями Data Link Escape (DLE) вместо или в дополнение к обычным ответам модема. Например, вместо сообщения о звонке на телефонной линии с помощью сообщения RING многие модемы вместо этого отправят символ DLE ASCII , за которым следует буква R. Конкретный набор событий DLE, сообщаемых каждым модемом, специфичен для его чипсета и задокументирован в его справочном руководстве.

Запрос возможностей модема

Команда AT+VLS=? или AT#VLS=? обычно возвращает список режимов работы, специфичных для каждого модема. Каждый из этих пронумерованных режимов определяет состояние телефонной линии (трубка снята или положена), а также маршрутизацию звука между каждым из следующих режимов:

  • Запись/воспроизведение
  • Телефонная трубка
  • Разъем для подключения динамика (который можно просто подключить как аудиовход к звуковой карте ПК, а не использовать как отдельный разъем)
  • Разъем для микрофона (имеется на некоторых голосовых модемах)

Многие чипсеты предлагают список всех возможных комбинаций режимов, даже если конкретная модемная плата не поддерживает их все. Это потому, что производитель платы почти всегда отличается от производителя чипсета, а чипсет поставляется предварительно настроенным для поддержки всего возможного оборудования, даже если оно не реализовано на печатной плате.

Пример ответа на AT+VLS=? от модема, представленного на рынке в 2006 году:

АТ+ВЛС=? 0,"",0000000000,0000000000,B084008000 1,"Т",0B8418E000,0FE418E000,0B8419E000 2, "Л", 0884008000,0CE4008000,0884018000 3,"LT",0B8418E000,0FE418E000,0B8419E000 4,"С",0084008000,0484008000,3084018000 5,"СТ",0B8418E000,0FE418E000,0B8419E000 6,"М",0084008000,04E4008000,3084008000 7,"МСТ",0B8418E000,0FE418E000,0B8419E000 8,"S1",0084008000,0484008000,3084018000 9,"С1Т",0B8418E000,0FE418E000,0B8419E000 10,"MS1T",0B8418E000,0FE418E000,0B8419E000 11,"М1",0084008000,04E4008000,3084008000 13,"M1S1T",0B8418E000,0FE418E000,0B8419E000 14,"Н",0084008000,04E4008000,3084018000 15,"HT",0B8418E000,0FE418E000,0B8419E000 16,"МС",0084008000,04E4008000,3084018000 17,"МС1",0084008000,04E4008000,3084018000 19,"M1S1",0084008000,04E4008000,3084018000 20,"т",0B8418E000,0FE418E000,BB8419E000

Хотя все модемы разные, обычно режим 0 означает, что трубка положена (трубка повешена), а режима 1 достаточно для снятия трубки, записи/воспроизведения звука и обнаружения DTMF (тональных сигналов).

Команда AT+VSM=? или AT#VSM=? обычно возвращает список форматов аудиоданных, поддерживаемых модемом. Каждый формат включает имя (например, PCM , ADPCM , μ-law , A-law ), количество бит на сэмпл (обычно 2, 3, 4, 8 или 16) и частоту дискретизации звука (обычно 7200, 8000 или 11025 Гц ). Это стандартные для отрасли аудиокодеки, реализации которых хорошо опубликованы. Стандарт ADPCM является исключением. Модемы, заявляющие о поддержке ADPCM, почти всегда поддерживают Dialogic ADPCM , также известный как «VOX», который похож, но не совместим с другими реализациями ADPCM, включая Interactive Multimedia Association (IMA) ADPCM, а также MS ADPCM (реализация Microsoft, используемая в файлах WAV ). Модемы также могут их поддерживать, если указан соответствующий квалификатор. В противном случае по умолчанию ADPCM означает Dialogic.

Пример ответа на AT+VSM=? от модема, появившегося на рынке в 2006 году:

АТ+ВСМ=? 1,"НЕПОДПИСАННЫЙ PCM",8,0,8000,0,0 129,"ИМА АДИКМ",4,0,8000,0,0 130,"НЕПОДПИСАННЫЙ PCM",8,0,8000,0,0 140,"2-битный ADPCM",2,0,8000, 141,"4 бит ADPCM",4,0,8000,0,0

Выбор нужного формата аудиоданных осуществляется с помощью той же команды, но с цифрой вместо вопросительного знака. Используется как для отправки, так и для получения.

Ответ на звонки

Ответ на звонки обычно выполняется с помощью команд AT+VLS=n или AT#VLS=n , где n — число, представляющее режим модема. Для подавляющего большинства модемов это число будет 1 для ответа на телефонный звонок и 0 для отбоя; другие числа активируют другие функции, если они присутствуют, например, громкую связь. Некоторые модемы отвечают в ответ на ATA — стандартную команду ответа в режиме данных — но другие модемы будут интерпретировать это как команду на самом деле ответить в режиме данных, а не в голосовом режиме.

Передача аудиоданных

Чтобы начать передачу аудиоданных, хост отправляет команду AT+VTX или AT#VTX . Это приводит к ответу модема CONNECT или VCON . (Модемы, использующие набор команд «плюс», обычно отвечают CONNECT, в то время как те, которые используют набор команд «хэш», отвечают VCON, что означает голосовое соединение.)

С этого момента модем интерпретирует любые данные, отправляемые с компьютера, как волновые аудиоданные, используя кодек, выбранный командой AT+VSM или AT#VSM.

Аудиоданные всегда отправляются на модем немного быстрее, чем он может их воспроизвести, поэтому модем может буферизировать небольшую их часть и воспроизводить плавно, без щелчков или треска, вызванных задержками в операционной системе компьютера. Например, во время воспроизведения аудиофайла 8 кГц с разрешением 8 бит (что создает 8000 байт или 80 000 бит, если включать стартовые/стоповые биты, в секунду), данные должны передаваться по последовательному порту со скоростью не менее 115 200 бит в секунду. (115 200 бит/с — это первая настройка типичного последовательного порта компьютера, который больше 80 000.) Кроме того, из-за некоторых дополнительных накладных расходов, связанных с удвоением байтов DLE в потоке (упомянутых ниже), для этого требуется небольшая дополнительная полоса пропускания .

Когда модем хочет, чтобы компьютер временно приостановил передачу, чтобы воспроизведение могло наверстать упущенное, он временно понижает сигнал CTS (Clear to Send) на последовательном порту RS-232. Модем снова повышает сигнал вовремя, чтобы компьютер мог возобновить отправку аудиоданных до того, как буфер воспроизведения станет полностью пустым.

Когда компьютер хочет подать сигнал об окончании аудиоданных, большинство модемов ожидают увидеть символ ASCII DLE (0x10), за которым следует символ !.

Поскольку байт DLE может встречаться и часто встречается в обычных аудиоданных, его необходимо дважды отправить модему, чтобы он был интерпретирован как байт аудиоданных.

Большинство модемов также принимают последовательность DLE + CAN (отмена) как сигнал отмены воспроизведения звука. Отличие в том, что модем должен понимать, что он должен немедленно прервать воспроизведение сейчас, а не позволить оставшимся данным в буфере воспроизведения дойти до конца.

Когда модем закончит воспроизведение, он ответит OK .

Замедление воспроизведения

Во время воспроизведения необходимо отправлять аудиоданные со скоростью, которая обеспечивает плавное воспроизведение звука, но не быстрее, чем модем может его обработать. Также желательно убедиться, что модем всегда может прервать воспроизведение и удалить любой буферизованный звук в случае, если сообщение должно быть отменено. Отмена сообщения ожидается звонящими, которые уже знают ответы на голосовые подсказки и дают свой ответ заранее (и которые будут раздражены, если их заставят слушать подсказку, на которую они уже ответили).

Существует несколько способов заставить компьютер отправлять аудиоданные на модем с такой скоростью, чтобы они успевали за воспроизведением, не переполняя аудиобуфер.

Самый простой способ — использовать управление потоком CTS. Существуют следующие оговорки.

  • Некоторые голосовые модемы имеют ошибки в реализации управления потоком. В частности, большое количество чипсетов Conexant иногда сбрасывают линию CTS и никогда не восстанавливают ее во время воспроизведения. Conexant является чрезвычайно популярным чипсетом в голосовых модемах сегодня, и они в остальном хорошо реализуют голосовые команды, что делает целесообразным рассмотреть возможность обхода этой ошибки. Некоторые чипсеты Conexant также не восстанавливают CTS, если команда «прерывание воспроизведения» отправляется или обрабатывается модемом, пока CTS отключен.
  • Некоторые голосовые модемы предлагают очень большой буфер передачи (например, 4 секунды аудио) в сочетании с ошибкой, которая не позволяет хосту запрашивать «прерывание воспроизведения». Результатом является то, что если вызывающий нажимает тональный сигнал, который должен прерывать сообщение, а хост предоставляет неограниченные аудиоданные, опосредованные только CTS, конечный результат заключается в том, что сообщение не может быть прервано в течение как минимум 4 секунд.

Второй способ дроссельной заслонки воспроизведения заключается в опросе таймера «тика», предоставляемого операционной системой хост-компьютера и основанного на аппаратных часах, которые не зависят от загрузки ЦП хоста. Это может быть доступно или недоступно, и это полностью зависит от операционной системы хоста. Однако, когда доступно, это чрезвычайно надежно. Разумно предположить, что ПК должен опережать воспроизведение на пару сотен байт, и что модем буферизует это. (Команды AT+VBQ или AT#VBQ на голосовых модемах часто показывают размер буфера в байтах, и типичным ответом является 1–2 килобайта.)

Третий способ ограничения воспроизведения заключается во вставке фиктивных сообщений DLE в выходной поток таким образом, чтобы аудиоданные передавались через последовательный порт в течение известного времени, а воспроизведение по сути синхронизировалось UART в последовательном порту.

Например, при рассмотрении использования фиктивного заполнения DLE, сначала следует отметить несколько вещей. В типичном сценарии одна секунда звука может быть 8000 однобайтовых сэмплов, и с небольшим процентом сэмплов, равным байту DLE и требующим удвоения, типичная секунда звука может быть 8050 байт. Трюк заключается в вставке достаточного количества бессмысленных сообщений DLE в байты, которые модем отбросит (то есть DLE, за которым следует байт без какого-либо конкретного значения), так что будет ровно 11 520 байт (предполагая, что последовательный порт заблокирован на 115 200 бит/с), что займет ровно 1 секунду для передачи через последовательный порт. Хотя возможно, что задержка прерывания на хост-компьютере может привести к отправке чуть меньше 11 520 байт в секунду, большинство голосовых модемов буферизуют достаточно байтов перед фактическим началом воспроизведения, чтобы разрешить здесь небольшой перекос. Кроме того, ПК можно запрограммировать на преобразование секунды аудиосигнала в объем чуть меньше 11 520 байт (все голосовые модемы будут буферизировать небольшой объем без необходимости управления потоком, если объем не превышает нескольких сотен байт).

Dummy DLE stuffing вряд ли будет работать с "Winmodems", у которых нет физического UART. Это имеет смысл только с внешними последовательными модемами, которые физически синхронизируются с определенной скоростью передачи битов генератором тактовой частоты за внешним последовательным портом.

Запись аудиоданных

Метод записи аудиоданных тот же, за исключением того, что команда — AT+VRX или AT#VRX , и модем передает аудиоданные, пока компьютер их получает. Управление потоком RTS/CTS здесь не используется (компьютер должен принимать все аудиоданные, которые он получает, а модем автоматически регулирует свою передачу в соответствии с частотой дискретизации звука).

Модем никогда не прекращает передачу, пока компьютер не даст ему команду остановиться, что обычно делается с помощью CTRL-C. Данные всегда завершаются с помощью DLE+!, и все байты DLE, естественным образом встречающиеся в потоке, отправляются дважды, чтобы отличать их от обычных сообщений DLE.

До, во время и после записи модем может уведомлять хост-компьютер о конкретных событиях, включая, помимо прочего, следующее:

  • Обнаружены нажатия клавиш тонального набора
  • Обнаружена тишина
  • Обнаружена переполюсовка линии (часто приводящая к тому, что вызывающий абонент кладет трубку)
  • Обнаружен гудок
  • Обнаружен тон факса

Когда модем хочет сообщить об этом хосту, он отправляет байт DLE, а также (обычно) 1-байтовое сообщение, описывающее событие. Список поддерживаемых событий зависит от модема, но обычно цифра (а также * и #) означает нажатие тональных клавиш, а буква "s" означает обнаружение тишины. Некоторые модемы сообщают только об одном событии для каждого нажатия тональной клавиши, в то время как другие сообщают о повторном нажатии клавиши, пока клавиша не будет отпущена, а затем о специальном событии "отпущена клавиша".

Завершение голосового вызова

Любая из следующих команд обычно заставляет модем повесить трубку и завершить голосовой вызов: AT+VLS=0 , AT#VLS=0 , ATH , ATZ . Сброс сигнала RS-232 DTR (готовность терминала данных) также часто приводит к этому. Модем остается в голосовом режиме (за исключением случая ATZ).

Голосовые модемы не вешают трубку автоматически, даже если это делает звонящий на другом конце. Они могут сообщать о событиях вешания, набора или тишины, но компьютер должен отреагировать на них. Если во время записи модема звонящий вешает трубку, а компьютер не реагирует, модем продолжит записывать все остальное, что слышно на линии, например, гудки, сообщения об ошибках телефонной компании и т. д.

Смотрите также

Ссылки

  • Справочное руководство по AT-командам для чипсетов Rockwell, Conexant и Lucent. (Каждый производитель чипсетов выпускает руководство с таким же названием, за которым следует название продукта, к которому оно относится)
  • Документация технической поддержки Zoom, справочники по AT-командам
  • Международный союз электросвязи (февраль 1998 г.), Управление функциями, связанными с голосом, в DCE с помощью асинхронного DTE , Серия V: Передача данных по телефонной сети: Процедуры управления, Международный союз электросвязи, Рекомендация МСЭ-Т V.253
  • Mirho, Charles (август 1996 г.), "Чтобы узнать о расширениях голосового модема для Windows 95, нажмите 1 сейчас!", Microsoft Systems Journal , Стандарт Hayes AT помог продвинуть широкое принятие модемов данных, поскольку программы могли просто отправлять соответствующие AT-бормотание-это и AT-бормотание-то, и любой модем, говорящий на стандарте AT, знал, что делать. Похожий стандарт, AT+V, по-видимому, появился и для голосовых модемов. Набор команд AT+V состоит из команд Hayes с префиксом AT и голосовых команд с префиксом +V. AT+V документирован как стандарт ANSI/TIA/EIA IS-101 под названием "Facsimile Digital Interfaces-Voice Control Interim Standard for Asynchronous DCE". Продолжением этой спецификации является PN-3131 Технического подкомитета TIA TR-29.2.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Voice_modem_command_set&oldid=1209936509"