음성 모뎀 명령어 세트
Voice modem command set이 글은 검증을 위해 인용구가 추가로 필요하다.– · · 책· · (2010년 8월)(이 |
음성 모뎀은 전화선을 통해 음성 녹음을 송수신할 수 있는 기능이 내장된 아날로그 전화 데이터 모뎀이다. 음성 모뎀은 전화와 응답기 어플리케이션에 사용된다. AT 명령으로 알려진 일련의 명령을 통해 호스트 PC가 모뎀을 명령하는 데이터 모뎀에 사용되는 Hayes 명령 집합과 유사하게, 업계 전체에서 어느 정도 일치하는 공통 음성 AT 명령 집합이 잘 정의되어 있다.
구현 문제
음성 모드는 모뎀의 일반적인 용도가 아니기 때문에, 시판 중인 많은 모뎀은 음성 모드에 대한 지원이 부실하거나 버그로 되어 있다. 좋은 음성 모뎀의 특성은 의도된 용도에 크게 의존하며, 다음을 포함한다.
- 신뢰할 수 있는 작동. 많은 모뎀은 단순히 "잠금"하거나 호스트 PC를 충돌시키지만 이는 Winmodems에서 더 흔하다. 다른 것들은 흐름 제어 버그와 다른 구현 버그를 가지고 있는데, 이는 통화를 중단시키거나, 오디오를 건너뛰거나, 또는 중단 시도 후에도 계속 재생되도록 하는 오디오를 유발할 수 있다.
- 좋은 오디오 특징. 일부 모뎀은 교정할 수 없을 정도로 낮은 신호량을 가지거나 오디오 노이즈를 발생시킨다. 일부 모뎀은 최고의 DTMF 신호를 제외한 모든 신호를 인식할 수 없다. 일부 모뎀은 일부 애플리케이션이 필요로 하는 정음 또는 통화 종료 전압 반전을 감지하고 보고하는 작업을 잘못한다.
- 필요한 경우 발신자 ID 지원. 북미에서 사용되는 "Type-1 발신자 ID"는 대부분의 모뎀에서 누락되어 있다. 거의 모든 모뎀 칩셋은 발신자 ID를 지원하지만, 일반적인 전화 접속 인터넷 사용자는 발신자 ID를 필요로 하지 않기 때문에, 발신자 ID를 지원하는 데 필요한 추가 구성요소가 비용상의 이유로 생략되는 경우가 많다.
- 여러 인스턴스에 대한 지원. 많은 내부 모뎀(일반적으로 Winmodem)용 드라이버는 단일 컴퓨터 내에서 동일한 장치 중 하나 이상을 허용할 수 없다. 비호환성의 증상으로는 단일 모뎀을 제외한 모든 사람의 충돌, 블루 스크린 사망 또는 단순 이용불능이 있다. 외부 RS-232 기반 (시리얼) 모뎀은 각 모뎀이 자체 마이크로프로세서를 포함하고 있으며 동일한 호스트에 있는 다른 모뎀을 알지 못하기 때문에 이러한 제한이 없다. 일부 USB 모뎀은 단순히 "USB-to-Serial" 변환기 칩셋을 갖춘 직렬 모뎀이며(이 경우 문제가 없어야 함), 다른 USB 모뎀은 "호스트-제어"되며 기본적으로 외부에서 부착된 Winmodems(이 경우 문제가 지속될 수 있음)이기 때문에 USB 모뎀은 이러한 문제를 가질 수도 있고 갖지 않을 수도 있다.
플러스 대 해시
각 음성 모뎀 플랫폼은 두 세트의 음성 명령 중 하나를 지원하는 경향이 있다. 특히, 명령 집합의 한 향은 플러스(+) 기호를 포함하고, 다른 향은 해시(#) 기호를 포함하고 있다.
음성 모드 탐지
음성 모드에 대한 지원은 다음 명령을 실행하여 모뎀에서 검출할 수 있다. AT+FCLASS=?
이 명령은 ("팩스 클래스"를 나타내는) 명령어가 항상 플러스를 사용하는 업계 표준 팩스 명령의 일부이기 때문에 일반적으로 모뎀이 "플러스" 또는 "해시" 명령어 세트를 지원하는지 여부에 대한 더하기 기호를 포함하는 것이 지원된다.
모뎀을 지원하는 음성은 숫자 8을 포함하는 쉼표로 구분된 숫자 목록으로 응답한다. 음성을 지원하지 않는 모뎀은 ERROR로 응답하거나, 8을 포함하지 않은 번호 목록으로 응답한다. (많은 모뎀은 데이터(0) 및 클래스 1과 2 팩스를 지원한다는 것을 나타내는 0,1,2를 보고한다. 이것은 음성 지원이 존재하지 않는다는 것을 나타낸다.)
"해시" 명령어 세트를 지원하는 모뎀은 일반적으로 AT#CLS=?에도 응답한다.
음성 모드로 들어가는 중
AT+FCLASS=8 또는 AT#CLS=8 명령을 사용하면 모뎀이 음성 모드로 전환된다. 대부분의 모뎀은 여전히 작동 상태를 유지하며 OK로 응답한다. 일단 이 명령이 승인되면, 대부분의 모뎀은 일반적인 모뎀 응답 대신에 또는 그 외에 데이터 링크 이스케이프(DLE) 메시지로 응답할 것이다. 예를 들어, RING 메시지로 울리는 전화선을 보고하는 대신에 많은 모뎀이 대신 DLE ASCII 문자를 보내고 그 뒤에 R자를 보낸다. 각 모뎀에 의해 보고된 DLE 이벤트의 특정 세트는 칩셋에 특수하며 참조 가이드에 문서화된다.
모뎀 기능 쿼리
AT+VLS=? 또는 AT#VLS=?는 보통 각 모뎀에 해당하는 작동 모드 목록을 반환한다. 이러한 각각의 번호 매겨진 모드는 전화선의 온후크 또는 오프후크 상태와 더불어 다음 각 항목 사이의 사운드 라우팅을 결정한다.
- 기록/재생
- 전화 핸드셋
- 스피커폰 잭(이별 잭이 아닌 PC 사운드 카드의 오디오 입력으로 유선 연결될 수 있음)
- 마이크 잭(일부 음성 모뎀에서 사용 가능)
많은 칩셋은 특정 모뎀 보드가 모든 모드를 지원하지 않더라도 가능한 모든 조합의 목록을 제공한다. 그것은 보드 제조업체는 거의 항상 칩셋 제조업체와 다르며, 칩셋은 회로 기판에 구현되지 않더라도 가능한 모든 하드웨어를 지원하도록 미리 구성되기 때문이다.
2006년 시판 중인 모뎀에서 AT+VLS=?에 대한 응답의 예:
AT+VLS=? 0",,"0000000000,00000000,B0840080001,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,0,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,0,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
모든 모뎀이 다른 반면, 일반적으로 모드 0은 전원이 켜진 상태(충전됨)를 의미하며, 모드 1은 전화기를 집어들고, 녹음/재생 오디오를 재생하며, DTMF(터치 톤)를 감지하기에 충분하다.
AT+VSM=? 또는 AT#VSM=? 명령은 일반적으로 모뎀에서 지원하는 오디오 데이터 형식 목록을 반환한다. 각 형식에는 이름(PCM, ADPCM, μ-law, A-law 등), 샘플당 비트 수(보통 2, 3, 4, 8, 16), 오디오 샘플링 속도(보통 7,200, 8,000 또는 11,025 Hertz)가 포함된다. 이들은 구현 내용이 잘 게시된 업계 표준 오디오 코덱이다. ADPCM 표준은 예외다. ADPCM을 지원한다고 주장하는 모뎀은 거의 항상 "VOX"라고도 하는 Dialogic ADPCM을 지원하는데, 이는 MS ADPCM(WAV 파일에 사용되는 Microsoft 구현)뿐만 아니라 IMA(Interactive Multimedia Association) ADPCM을 포함한 다른 ADPCM 구현과 유사하지만 호환되지 않는다. 모뎀은 한정자가 나열되는 경우(그렇지 않으면 기본적으로 ADPCM은 Dialogic을 의미한다.
2006년 시판 중인 모뎀에서 AT+VSM=?에 대한 응답 예:
AT+VSM=?1, "UNSTANDED PCM", 8,0,800,0,0,0129",IMA ADPCM",4,0,800,0,0,0 130,"서명되지 않은 PCM", 8,0,800,0,0,0 140",2비트 ADPCM",2,0,8000,141",4비트 ADPCM",4,0,800,0,0,0,0
원하는 오디오 데이터 형식은 동일한 명령을 사용하지만 물음표 대신 숫자로 선택된다. 송수신용으로 모두 쓰인다.
전화를 받는 중
응답 통화는 대개 AT+VLS=n 또는 AT#VLS=n 명령을 사용하여 이루어진다. 여기서 n은 모뎀의 모드를 나타내는 숫자다. 대부분의 모뎀의 경우, 이 번호는 전화에 응답할 때 1이고 전화를 끊을 때 0이며, 다른 번호는 스피커폰과 같은 다른 기능을 활성화한다. 표준 데이터 모드 응답 명령인 ATA에 응답하는 모뎀도 있지만, 다른 모뎀은 이를 음성 모드가 아닌 데이터로 응답하는 명령으로 해석할 것이다.
오디오 데이터 전송
오디오 데이터 전송을 시작하려면 호스트가 AT+VTX 또는 AT#VTX 명령을 전송하십시오. 이로 인해 CONNECT 또는 VCON의 모뎀에서 응답이 발생한다.("plus" 명령 집합을 사용하는 모뎀은 대개 CONNNECT를 응답하는 반면, "hash" 집합을 사용하는 모뎀은 음성 연결을 나타내는 VCON을 응답한다.)
이때부터 모뎀은 AT+VSM 또는 AT#VSM 명령에 의해 선택된 코덱을 사용하여 컴퓨터에서 전송된 모든 데이터를 파형 오디오 데이터로 해석한다.
오디오 데이터는 항상 재생할 수 있는 것보다 약간 더 빠르게 모뎀으로 전송되므로 모뎀은 컴퓨터의 운영체제의 지연으로 인해 클릭이나 펑크 없이 그것의 작은 부분을 완충하여 부드럽게 재생할 수 있다. 예를 들어 8비트 해상도로 8kHz 오디오 파일을 재생하는 동안(초당 시작/정지 비트를 포함할 때 8,000바이트 또는 80,000비트를 생성함) 데이터는 초당 최소 115,200비트로 직렬 포트를 통과해야 한다.(115,200비트/s는 8만비트 이상의 일반적인 컴퓨터 직렬 포트의 첫 번째 설정이다.) 또한 스트림에서 DLE 바이트를 두 배로 증가시키는 것과 관련된 일부 추가 오버헤드 때문에(아래 참조), 이를 허용하려면 소량의 추가 대역폭이 필수적이다.
모뎀이 재생이 따라잡을 수 있도록 컴퓨터가 일시적으로 일시 중지되기를 원할 때, 모뎀은 RS-232 직렬 포트의 CTS(Clear to Send) 신호를 일시적으로 낮춘다. 모뎀은 재생 버퍼가 완전히 비기 전에 컴퓨터가 오디오 데이터 전송을 재개할 때 맞춰 신호를 다시 올린다.
컴퓨터가 오디오 데이터의 끝을 신호하려고 할 때, 대부분의 모뎀은 ASCII DLE 문자(0x10)를 보고 그 뒤에 ! 문자를 보게 될 것으로 예상한다.
DLE 바이트는 정상적인 오디오 데이터에서 발생할 수 있고 종종 발생하기 때문에, 오디오 데이터의 바이트로 해석될 때 모뎀으로 두 번 전송되어야 한다.
대부분의 모뎀도 오디오 재생을 취소하는 신호로 DLE + CAN(취소)의 시퀀스를 받아들인다. 구별되는 것은 모뎀이 재생 버퍼에 남아 있는 데이터가 재생 완료를 위해 실행되도록 하기보다는 지금 즉시 재생을 중단하는 것임을 이해하는 것이다.
모뎀이 재생되면, 모뎀은 OK로 응답한다.
조절 재생
재생 중에는 오디오가 원활하게 재생되도록 하는 속도로 오디오 데이터를 전송해야 하지만 모뎀이 처리할 수 있는 속도보다 더 빠르게 전송하지 않아도 된다. 또한 메시지가 취소될 경우 모뎀이 항상 재생을 중단하고 버퍼링된 오디오를 폐기할 수 있는지 확인하는 것이 바람직하다. 음성 프롬프트에 대한 답을 이미 알고 있고 답변을 일찍 제공하는 (그리고 이미 응답한 프롬프트에 귀를 기울이도록 강요받는 것에 짜증을 내는) 전화 걸기에 의해 메시지 취소가 예상된다.
오디오 버퍼를 오버런하지 않고 재생에 보조를 맞추기 위해 컴퓨터가 모뎀으로 오디오 데이터를 전송하는 몇 가지 방법이 있다.
가장 간단한 것은 CTS 흐름 제어를 사용하는 것이다. 다음과 같은 주의사항이 존재한다.
- 일부 음성 모뎀은 흐름 제어의 구현에 버그가 있다. 특히 다수의 코넥산 칩셋이 CTS 라인을 떨어뜨려 재생하는 동안 절대 다시 위로 올리지 않는 경우도 있다. Conexant는 오늘날 음성 모뎀에서 매우 인기 있는 칩셋이며, 그렇지 않으면 음성 명령을 잘 구현하기 때문에 이 버그 주변에서 작업하는 것을 고려해 볼 가치가 있다. CTS가 다운된 상태에서 모뎀에 의해 "재생 중단" 명령을 보내거나 처리할 경우 일부 Conexant 칩셋도 CTS를 다시 불러오지 않는다.
- 일부 음성 모뎀은 매우 큰 전송 버퍼(예: 4초 분량의 오디오)와 버그를 결합하여 호스트가 "애브포트 재생"을 요청할 수 없도록 한다. 그 결과 발신자가 메시지를 방해해야 할 터치 톤을 누르고, 호스트가 CTS만으로 중재하는 무제한 오디오 데이터를 제공하고 있다면, 최종 결과는 최소한 4초 동안 메시지를 방해할 수 없다는 것이다.
재생을 조절하는 두 번째 방법은 호스트 컴퓨터의 운영체제가 제공하는 "틱" 타이머와 호스트의 CPU 로드에 독립적인 하드웨어 시계를 기반으로 하는 폴링을 포함한다. 이는 사용할 수 있거나 없을 수 있으며 전적으로 호스트 운영 체제에 따라 달라진다. 하지만, 가능하다면, 그것은 극도로 신뢰할 수 있다. PC가 재생보다 몇 백 바이트 앞서 있어야 하며 모뎀이 이를 완충한다고 가정하는 것이 타당하다.(음성 모뎀의 AT+VBQ 또는 AT#VBQ 명령어는 흔히 버퍼의 크기를 바이트 단위로 나타내며, 1~2킬로바이트가 대표적인 응답이다.)
세 번째 스로틀 재생 방법은 오디오 데이터가 직렬 포트를 통해 전송하는 데 알려진 시간이 걸리도록 더미 DLE 메시지를 출력 스트림에 삽입하는 것을 포함하며, 재생은 기본적으로 직렬 포트에서 UART에 의해 클럭 처리된다.
예를 들어, 더미 DLE 스터핑 사용을 고려할 때, 먼저 몇 가지 사항에 주목해야 한다. 일반적인 시나리오에서, 1초의 오디오는 8,000개의 1바이트 샘플일 수 있으며, 샘플의 적은 퍼센트가 DLE 바이트와 같으며 반드시 2배여야 하며, 일반적인 오디오의 1초는 8,050바이트일 수 있다. 이 방법은 모뎀이 폐기할 바이트에 의미 없는 DLE 메시지를 충분히 삽입하는 것(즉, DLE에 이어 바이트까지 특정 의미가 없는 바이트)을 포함시켜 직렬 포트를 통해 전송하는 데 정확히 1초가 걸리는 정확히 11,520바이트(일련 포트가 115,200비트/s로 잠긴 것으로 가정)가 되도록 하는 것이다. 호스트 PC의 인터럽트 지연으로 인해 초당 11,520바이트보다 약간 적게 전송될 수 있지만, 대부분의 음성 모뎀은 여기서 작은 스큐를 허용할 수 있도록 재생을 시작하기 전에 충분한 바이트를 버퍼링한다. 또한 PC는 1초의 오디오를 1만1,520바이트보다 약간 적은 양으로 변환하도록 프로그래밍할 수 있다(모든 음성 모뎀은 수백 바이트 이하인 한 흐름 제어 없이 작은 오버런을 완충한다).
더미 DLE 스터핑은 물리적 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의 경우는 제외).
음성 모뎀은 상대방 전화를 건 사람이 끊어도 자동으로 끊어지지 않는다. 그들은 전화 끊기, 다이얼 톤 또는 침묵 이벤트를 보고할 수 있지만, 그것에 따라 행동하는 것은 컴퓨터에 달려 있다. 모뎀이 녹음 중이고, 전화를 건 사람이 전화를 끊고, 컴퓨터가 반응하지 않으면, 모뎀은 발신음, 전화 회사 오류 메시지 등 전화선에서 들리는 다른 모든 것을 녹음하는 오디오를 계속 제공할 것이다.
참고 항목
참조
- Rockwell, Conexant 및 Lucent 칩셋에 대한 AT 명령 참조 설명서. (각 칩셋 제조업체는 동일한 제목의 매뉴얼을 생산하며, 그 다음에 해당 제품의 이름이 표시됨)
- 확대/축소 기술 지원 문서, AT 명령 참조
- International Telecommunications Union (February 1998), Control of voice-related functions in a DCE by an asynchronous DTE, Series V: Data communication over the telephone network: Control procedures, International Telecommunications Union, ITU-T Recommendation V.253
- Mirho, Charles (August 1996), "To Learn About the Voice Modem Extensions for Windows 95, Press 1 Now!", Microsoft Systems Journal,
The Hayes AT standard helped promote widespread acceptance of data modems because programs could just send the appropriate AT-mumble-this and AT-mumble-that, and any modem that speaks the AT standard will know what to do. A similar standard, AT+V, appears to have emerged for voice modems as well. The AT+V command set consists of Hayes AT-prefixed commands and +V-prefixed voice commands. AT+V is documented as ANSI/TIA/EIA standard IS-101 entitled "Facsimile Digital Interfaces-Voice Control Interim Standard for Asynchronous DCE." A follow-up to this specification is PN-3131 by TIA Technical Subcommittee TR-29.2.