Zestaw poleceń modemu głosowego
Modem głosowy to analogowy modem telefoniczny z wbudowaną możliwością przesyłania i odbierania nagrań głosowych przez linię telefoniczną . Modemy głosowe są używane w aplikacjach telefonicznych i automatycznych sekretarkach . Podobnie jak w przypadku zestawu poleceń Hayesa używanego w modemach do transmisji danych, w którym komputer hosta wydaje polecenia modemowi za pomocą serii poleceń znanych jako polecenia AT , istnieje dobrze zdefiniowany zestaw wspólnych poleceń głosowych AT, które są w pewnym stopniu spójne w całej branży.
Problemy z wdrożeniem
Ponieważ tryb głosowy nie jest typowym zastosowaniem modemu, wiele modemów dostępnych na rynku ma słabą lub błędną obsługę swoich trybów głosowych. Charakterystyka dobrego modemu głosowego zależy w dużej mierze od zamierzonego zastosowania i obejmuje:
- Niezawodne działanie. Wiele modemów po prostu „blokuje” lub powoduje awarię komputera hosta, chociaż jest to bardziej powszechne w przypadku Winmodemów . Inne mają błędy kontroli przepływu i inne błędy implementacji, które mogą powodować zawieszanie się połączeń, pomijanie dźwięku lub odtwarzanie dźwięku po próbie przerwania.
- Dobre właściwości dźwiękowe. Niektóre modemy mają niemożliwie do skorygowania niski poziom głośności sygnału lub generują szumy dźwiękowe. Niektóre modemy nie są w stanie rozpoznać wszystkich oprócz najlepszych DTMF . Niektóre modemy słabo rejestrują lub wykrywają i zgłaszają ciszę lub odwrócenie napięcia na końcu połączenia, czego potrzebują niektóre aplikacje.
- obsługa identyfikatora dzwoniącego . W zdecydowanej większości modemów brakuje identyfikatora dzwoniącego typu 1, używanego w Ameryce Północnej. Prawie wszystkie chipsety modemów obsługują identyfikator dzwoniącego, ale ponieważ typowy użytkownik Internetu korzystający z modemu nie potrzebuje identyfikatora dzwoniącego, dodatkowe komponenty potrzebne do obsługi identyfikatora dzwoniącego są często pomijane ze względu na koszty.
- Obsługa wielu instancji. Sterowniki wielu modemów wewnętrznych (zwykle Winmodemów) nie tolerują więcej niż jednego takiego samego urządzenia w jednym komputerze. Objawy niezgodności obejmują awarie, niebieskie ekrany śmierci lub zwykłą niesprawność wszystkich modemów z wyjątkiem jednego. Zewnętrzne RS-232 (szeregowe) nie mają tego ograniczenia, ponieważ każdy modem zawiera własny mikroprocesor i nie rozpoznaje innych modemów na tym samym hoście. USB modemy mogą mieć ten problem lub nie, ponieważ niektóre modemy USB są po prostu modemami szeregowymi z chipsetem konwertującym „USB-do-szeregowego” (w takim przypadku nie powinno być problemu), a inne modemy USB są „kontrolowane przez hosta” i są zasadniczo zewnętrznymi Winmodemami (w takim przypadku problem może się utrzymywać).
Plus kontra Hash
Każda platforma modemu głosowego obsługuje jeden z dwóch zestawów poleceń głosowych — w szczególności jeden rodzaj zestawu poleceń zawiera znak plus (+), a drugi znak krzyżyka (#).
Wykrywanie trybu głosowego
Wsparcie dla trybu głosowego można wykryć w modemie wydając następującą komendę: AT+FCLASS=?
To polecenie jest zwykle obsługiwane i zawiera znak plus niezależnie od tego, czy modem obsługuje zestaw poleceń „plus”, czy „hash”, ponieważ polecenie (co oznacza „klasa faksu”) jest częścią standardowych poleceń faksu, które zawsze używają znaku plus .
Modem obsługujący głos odpowie listą numerów rozdzielonych przecinkami, która zawiera cyfrę 8. Modem nie obsługujący głosu odpowie ERROR lub listą numerów niezawierających 8. (Wiele modemów zgłasza 0,1,2 oznaczające obsługę danych (0) oraz faksy klasy 1 i 2 — oznacza to, że obsługa głosu nie jest dostępna).
Modemy obsługujące zestaw poleceń „hash” zwykle odpowiadają na AT#CLS=? również.
Wejście w tryb głosowy
Polecenie AT+FCLASS=8 lub AT#CLS=8 przełączy modem w tryb głosowy. Większość modemów nadal pozostaje odłożona i odpowiada OK . Po zaakceptowaniu tego polecenia większość modemów odpowie Data Link Escape (DLE) zamiast lub oprócz normalnych odpowiedzi modemu. Na przykład, zamiast zgłaszać dzwonienie linii telefonicznej z RING , wiele modemów zamiast tego wysyła DLE ASCII znak, po którym następuje litera R. Konkretny zestaw zdarzeń DLE zgłaszanych przez każdy modem jest specyficzny dla jego chipsetu i udokumentowany w jego przewodniku referencyjnym.
Zapytanie o możliwości modemu
Komenda AT+VLS=? lub AT#VLS=? zwykle zwraca listę trybów pracy, które są specyficzne dla każdego modemu. Każdy z tych ponumerowanych trybów określa stan odłożonej lub podniesionej słuchawki linii telefonicznej, a także kierowanie dźwięku między każdym z następujących elementów:
- Nagrywanie/odtwarzanie
- Słuchawka telefoniczna
- Gniazdo zestawu głośnomówiącego (które można po prostu podłączyć na stałe jako wejście audio na karcie dźwiękowej komputera zamiast być oddzielnym gniazdem)
- Gniazdo mikrofonu (dostępne w niektórych modemach głosowych)
Wiele chipsetów oferuje listę wszystkich możliwych kombinacji trybów, nawet jeśli dana karta modemu nie obsługuje ich wszystkich. Dzieje się tak, ponieważ producent płyty prawie zawsze różni się od producenta chipsetu, a chipset jest wstępnie skonfigurowany do obsługi wszystkich możliwych urządzeń, nawet jeśli nie jest zaimplementowany na płytce drukowanej.
Przykład odpowiedzi na AT+VLS=? z modemu na rynku w 2006 roku:
AT+VLS=? 0,"",0000000000,0000000000,B084008000 1,"T",0B8418E000,0FE418E000,0B8419E000 2,"L",0884008000,0CE4008000,0884018000 3,"LT",0B8418E00 0,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,"M1S1 T",0B8418E000,0FE418E000,0B8419E000 14,"H",0084008000, 04E4008000,3084018000 15,"HT",0B8418E000,0FE418E000,0B8419E000 16,"MS",0084008000,04E4008000,3084018000 17,"MS1",0084008000,04E4008 000,3084018000 19,"M1S1",0084008000,04E4008000,3084018000 20", t", 0B8418E000, 0FE418E000, BB8419E000
Chociaż każdy modem jest inny, zwykle tryb 0 oznacza odłożoną słuchawkę (rozłączenie), a tryb 1 wystarcza do odebrania telefonu, nagrywania/odtwarzania dźwięku i wykrywania DTMF (tony wybierania).
Komenda AT+VSM=? lub AT#VSM=? zwykle zwraca listę formatów danych audio obsługiwanych przez modem. Każdy format zawiera nazwę (np. PCM , ADPCM , μ-law , A-law ), liczbę bitów na próbkę (zwykle 2, 3, 4, 8 lub 16) oraz częstotliwość próbkowania dźwięku (zwykle 7200, 8000 lub 11 025 herców ). Są to standardowe kodeki audio , których implementacje są dobrze publikowane. Wyjątkiem jest standard ADPCM. Modemy, które twierdzą, że obsługują ADPCM, prawie zawsze obsługują Dialogic ADPCM , znany również jako „VOX”, który jest podobny, ale nie jest kompatybilny z innymi implementacjami ADPCM, w tym Interactive Multimedia Association (IMA) ADPCM oraz MS ADPCM (implementacja firmy Microsoft używana w plikach WAV ). Modemy mogą je również obsługiwać, jeśli wymieniony jest kwalifikator — w przeciwnym razie domyślnie ADPCM oznacza Dialogic.
Przykładowa odpowiedź na AT+VSM=? z modemu na rynku w 2006 roku:
AT+VSM=? 1,"UNSIGNED PCM",8,0,8000,0,0 129,"IMA ADPCM",4,0,8000,0,0 130,"UNSIGNED PCM",8,0,8000,0,0 140, "2-bitowy ADPCM",2,0,8000, 141,4-bitowy ADPCM",4,0,8000,0,0
Żądany format danych audio jest wybierany za pomocą tego samego polecenia, ale z liczbą zamiast znaku zapytania. Służy zarówno do wysyłania, jak i odbierania.
Odbieranie połączeń
Odbieranie połączeń odbywa się zwykle za pomocą poleceń AT+VLS=n lub AT#VLS=n , gdzie n jest liczbą reprezentującą tryb pracy modemu. W przypadku zdecydowanej większości modemów liczba ta będzie wynosić 1, aby odebrać połączenie telefoniczne, i 0, aby się rozłączyć; inne numery aktywują inne funkcje, jeśli są obecne, takie jak zestaw głośnomówiący. Niektóre modemy odpowiadają w odpowiedzi na ATA — standardowe polecenie odpowiedzi w trybie danych — ale inne modemy zinterpretują to jako polecenie rzeczywistej odpowiedzi w trybie danych, a nie w trybie głosowym.
Przesyłanie danych dźwiękowych
Aby rozpocząć transmisję danych audio, host wysyła polecenie AT+VTX lub AT#VTX . Powoduje to odpowiedź modemu CONNECT lub VCON . (Modemy używające zestawu poleceń „plus” zwykle odpowiadają CONNECT, podczas gdy te używające zestawu poleceń „hash” odpowiadają VCON, co oznacza połączenie głosowe.)
Od tego momentu modem interpretuje wszelkie dane przesyłane z komputera jako dane wave audio, używając kodeka wybranego za pomocą polecenia AT+VSM lub AT#VSM.
Dane audio są zawsze przesyłane do modemu nieco szybciej, niż jest w stanie je odtworzyć, więc modem może buforować niewielką ich część i odtwarzać je płynnie, bez kliknięć i trzasków spowodowanych opóźnieniami w systemie operacyjnym komputera. Na przykład podczas odtwarzania pliku audio 8 kHz w rozdzielczości 8-bitowej (co tworzy 8 000 bajtów lub 80 000 bitów z uwzględnieniem bitów startu/stopu na sekundę), dane muszą być przesyłane przez port szeregowy co najmniej 115 200 bitów na sekundę. (115 200 bitów/s to pierwsze ustawienie typowego portu szeregowego komputera, które jest większe niż 80 000). Ponadto, ze względu na dodatkowy narzut związany z podwojeniem bajtów DLE w strumieniu (wspomnianym poniżej), niewielka ilość dodatkowej przepustowości jest obowiązkowa aby na to pozwolić.
Gdy modem chce, aby komputer tymczasowo wstrzymał odtwarzanie, aby można było nadrobić zaległości w odtwarzaniu, tymczasowo obniża sygnał CTS (Clear to Send) na porcie szeregowym RS-232. Modem ponownie podnosi sygnał na czas, aby komputer wznowił wysyłanie danych audio, zanim bufor odtwarzania całkowicie się opróżni.
Gdy komputer chce zasygnalizować koniec danych audio, większość modemów oczekuje znaku ASCII DLE (0x10), po którym następuje ! postać.
Ponieważ bajt DLE może występować i często występuje w normalnych danych audio, musi być wysłany dwukrotnie do modemu, gdy ma być interpretowany jako bajt danych audio.
Większość modemów akceptuje również sekwencję DLE + CAN (anuluj) jako sygnał do anulowania odtwarzania dźwięku. Różnica polega na tym, że modem ma rozumieć, że ma teraz natychmiast przerwać odtwarzanie, zamiast pozwolić, aby pozostałe dane w buforze odtwarzania zostały ukończone.
Gdy modem zakończy odtwarzanie, odpowie OK .
Ograniczanie odtwarzania
Podczas odtwarzania konieczne jest przesyłanie danych audio z szybkością, która zapewnia płynne odtwarzanie dźwięku, ale bez wysyłania go szybciej, niż może to obsłużyć modem. Pożądane jest również upewnienie się, że modem może zawsze przerwać odtwarzanie i odrzucić buforowany dźwięk w przypadku anulowania wiadomości. Anulowania wiadomości oczekują dzwoniący, którzy znają już odpowiedzi na monity głosowe i udzielają odpowiedzi wcześniej (i którzy byliby zirytowani zmuszaniem ich do wysłuchania monitu, na który już odpowiedzieli).
Istnieje kilka sposobów, aby komputer wysyłał dane dźwiękowe do modemu z taką szybkością, aby nadążał za odtwarzaniem bez przekraczania bufora audio.
Najprościej jest użyć kontroli przepływu CTS. Istnieją następujące zastrzeżenia.
- Niektóre modemy głosowe mają błędy w implementacji kontroli przepływu. W szczególności duża liczba Conexant czasami gubi swoją linię CTS i nigdy nie przywraca jej podczas odtwarzania. Conexant jest obecnie niezwykle popularnym chipsetem w modemach głosowych i poza tym dobrze implementuje polecenia głosowe, co sprawia, że warto rozważyć obejście tego błędu. Niektóre chipsety Conexant również nie przywrócą CTS, jeśli polecenie „przerwanie odtwarzania” zostanie wysłane lub przetworzone przez modem, gdy CTS nie działa.
- Niektóre modemy głosowe oferują bardzo duży bufor transmisji (na przykład 4-sekundowy dźwięk) w połączeniu z błędem, który uniemożliwia hostowi zażądanie „przerwania odtwarzania”. W rezultacie, jeśli dzwoniący naciska ton, który ma przerwać wiadomość, a host zapewnia nieograniczoną liczbę danych audio za pośrednictwem samego CTS, końcowym rezultatem jest to, że wiadomość nie może zostać przerwana przez co najmniej 4 sekundy.
Drugi sposób ograniczania odtwarzania obejmuje odpytywanie zegara „tykania” zapewnianego przez system operacyjny komputera hosta i opartego na zegarze sprzętowym, który jest niezależny od obciążenia procesora hosta. To może być dostępne lub nie, i zależy całkowicie od systemu operacyjnego hosta. Jednak, gdy jest dostępny, jest wyjątkowo niezawodny. Rozsądnie jest założyć, że komputer PC musi wyprzedzić odtwarzanie o kilkaset bajtów i że modem to buforuje. (Polecenia AT+VBQ lub AT#VBQ w modemach głosowych często ujawniają rozmiar bufora w bajtach, a typową odpowiedzią jest 1 do 2 kilobajtów.)
Trzeci sposób ograniczania odtwarzania polega na wstawianiu fałszywych komunikatów DLE do strumienia wyjściowego, tak że przesyłanie danych audio przez port szeregowy zajmuje znaną ilość czasu, a odtwarzanie jest zasadniczo taktowane przez UART w porcie szeregowym.
Na przykład, rozważając użycie atrapy DLE, należy najpierw zwrócić uwagę na kilka rzeczy. W typowym scenariuszu jedna sekunda dźwięku może składać się z 8000 jednobajtowych próbek, a przy niewielkim odsetku próbek równym bajtowi DLE i musi zostać podwojona, typowa sekunda dźwięku może wynosić 8050 bajtów. Sztuczka polega na wstawieniu wystarczającej liczby bezsensownych komunikatów DLE do bajtów, które modem odrzuci (to znaczy DLE, po którym następuje bajt bez określonego znaczenia), tak aby było dokładnie 11 520 bajtów (zakładając port szeregowy zablokowany na 115 200 bitów / s) co zajmie dokładnie 1 sekundę, aby przesłać przez port szeregowy. Chociaż możliwe jest, że opóźnienie przerwania na komputerze-hoście może powodować wysyłanie nieco mniej niż 11 520 bajtów na sekundę, większość modemów głosowych buforuje wystarczającą liczbę bajtów przed faktycznym rozpoczęciem odtwarzania, aby umożliwić tutaj niewielkie przechylenie. Również komputer PC można zaprogramować tak, aby konwertował sekundę dźwięku na nieco mniej niż 11 520 bajtów (wszystkie modemy głosowe buforują niewielką przekroczenie bez potrzeby kontroli przepływu, o ile nie przekracza kilkuset bajtów).
Jest mało prawdopodobne, aby sztuczne wypełnianie DLE działało z „Winmodemami”, które nie mają fizycznego UART. Ma to sens tylko w przypadku zewnętrznych modemów szeregowych, które są fizycznie taktowane do określonej przepływności przez generator zegara za zewnętrznym portem szeregowym.
Nagrywanie danych dźwiękowych
Metoda nagrywania danych audio jest taka sama, z tą różnicą, że polecenie to AT+VRX lub AT#VRX , a modem przesyła dane audio, podczas gdy komputer je odbiera. Sterowanie przepływem RTS/CTS nie jest tutaj stosowane (komputer musi zaakceptować wszystkie odbierane dane audio, a modem automatycznie dostosowuje tempo transmisji do częstotliwości próbkowania dźwięku).
Modem nigdy nie przestaje nadawać, dopóki komputer nie każe mu przestać, co zwykle następuje po naciśnięciu CTRL-C. Dane są zawsze kończone poleceniem DLE+!, a wszystkie naturalnie występujące w strumieniu bajty DLE są wysyłane dwukrotnie w celu odróżnienia ich od normalnych komunikatów DLE.
Przed, w trakcie i po zakończeniu nagrywania modem może powiadamiać hosta komputera o określonych zdarzeniach, w tym między innymi o:
- Wykryto naciśnięcia klawiszy z wybieraniem tonowym
- Wykryto ciszę
- Wykryto odwrócenie polaryzacji linii (często oznaczające rozłączenie dzwoniącego)
- Wykryto sygnał wybierania
- Wykryto ton faksu
Gdy modem chce poinformować o tym hosta, wysyła bajt DLE oraz (zwykle) 1-bajtowy komunikat opisujący zdarzenie. Lista obsługiwanych zdarzeń różni się w zależności od modemu, ale zwykle cyfra (a także * i #) oznacza naciśnięcie tonu, a litera „s” oznacza wykrytą ciszę. Niektóre modemy zgłaszają tylko jedno zdarzenie dla każdego naciśnięcia klawisza tonowego, podczas gdy inne zgłaszają wielokrotne naciśnięcie klawisza, aż do zwolnienia klawisza, a następnie specjalne zdarzenie „zwolnienie klawisza”.
Zakończenie połączenia głosowego
Każde z poniższych poleceń zwykle powoduje zawieszenie modemu i zakończenie połączenia głosowego: AT+VLS=0 , AT#VLS=0 , ATH , ATZ . Zrzucenie RS-232 DTR (gotowość terminala danych) często również to umożliwia. Modem pozostaje w trybie głosowym (poza ATZ).
Modemy głosowe nie rozłączają się automatycznie, nawet jeśli robi to osoba dzwoniąca po drugiej stronie. Mogą zgłaszać zdarzenia związane z rozłączeniem, sygnałem wybierania lub ciszą, ale działanie na ich podstawie należy do komputera. Jeśli podczas nagrywania przez modem rozmówca rozłączy się, a komputer nie zareaguje, modem będzie nadal nagrywał dźwięk na linii, na przykład sygnały wybierania, komunikaty o błędach firmy telefonicznej i tak dalej.
Zobacz też
- Podręcznik referencyjny poleceń AT dla chipsetów Rockwell, Conexant i Lucent. (Każdy producent chipsetu wydaje instrukcję o tym samym tytule, po której następuje nazwa produktu, którego dotyczy)
- Dokumentacja pomocy technicznej Zoom, odniesienia do poleceń AT
- Międzynarodowy Związek Telekomunikacyjny (luty 1998), Sterowanie funkcjami związanymi z głosem w DCE przez asynchroniczny DTE , Seria V: Przesyłanie danych przez sieć telefoniczną: procedury kontrolne, Międzynarodowy Związek Telekomunikacyjny, Zalecenie ITU-T V.253
-
Mirho, Charles (sierpień 1996), „Aby dowiedzieć się więcej o rozszerzeniach modemu głosowego dla systemu Windows 95, naciśnij 1 teraz!” , Microsoft Systems Journal ,
Standard Hayes AT pomógł promować powszechną akceptację modemów do transmisji danych, ponieważ programy mogły po prostu wysyłać odpowiednie komunikaty AT-mumble-to i AT-mumble-tamto, a każdy modem obsługujący standard AT będzie wiedział, co robić. Wydaje się, że podobny standard, AT+V, pojawił się również dla modemów głosowych. Zestaw poleceń AT+V składa się z poleceń Hayes z prefiksem AT i poleceń głosowych z prefiksem +V. AT+V jest udokumentowany jako norma ANSI/TIA/EIA IS-101 zatytułowana „Faksymilowe interfejsy cyfrowe — tymczasowy standard sterowania głosowego dla asynchronicznego DCE”. Następstwem tej specyfikacji jest PN-3131 TIA Technical Subcommittee TR-29.2.