티스토리 뷰
아이폰에 비해 안드로이드는 개발에 제한이 많이 없습니다.
아이폰은 Sandbox와 같은 형태로 Application 간의 영역 공유가 제한되어 있지만, 안드로이드에서는 Intent를 통해서 자유롭게 영역을 넘어들 수 있게 됩니다.
그렇다면 음성 처리와 관련되어 안드로이드에서는 어디까지 가능할까요?
관련된 API들을 한번 정리해 봤습니다.
안드로이드에서 음성을 처리하는 가장 기본적인 SDK는 바로 MediaPlayer입니다.
만약 통화 중 녹음과 같은 기능을 구현하고 싶다면 MediaRecorder와 같은 클래스를 활용하면 됩니다.
MediaRecorder의 AudioSource를 활용해서 해당 기능들을 구현할 수 있을 겁니다.
MediaRecorder의 state diagram은 다음 그림과 같네요.
만약 통화 관련 음성들을 처리하고자 할 경우에는 Telephony 클래스를 활용할 수 있습니다.
이중 TelephonyManager를 사용하면 폰상태(getCallxxx), 디바이스정보(getDevicexxx), Sim정보(getSimxxx) 등을 가져올 수 있으며
통화 시작, 종료와 같은 이벤트를 통해 해당 시그널 발생시 원하는 작업을 처리할 수 있을 겁니다.
이외에도 Audio 관련한 API로 AudioCode, AudioEffect, AudioFormat, AudioManager 등 다수 존재하고 있습니다.
추가로 Voice와 관련해서 voicemail과 같은 클래스도 있네요.
실은 이러한 API를 확인해 본 것은 통화중 음성 신호를 가져와 변조해서 다시 통신 시그널로 보낼 수 있을까 해서였습니다.
그러나 현재까지 확인한 바로는 통화중 음성 신호를 녹음 등을 위해 가져올 수는 있었지만 다시 통신 시그널로 보내는 API는 없었습니다.
아마도 퀄컴과 같은 모뎀 칩에서 H/W적으로 통신 시그널, 즉 PCMDATA를 보내기 때문인 것 같습니다.
물론 Software Block으로 구성한 음성 인코딩 기능이 이런 칩셋에 포함되어 있겠지만 외부로는 공개되어 있지 않은 것 같네요.
VOIP의 SIP / RTP 프로토콜을 활용하면 이러한 문제를 어느정도 해결할 수 있겠지만
아무래도 중계기를 거쳐야 하는 제한점이 존재할 것 같네요..
'프로그래밍 > 안드로이드' 카테고리의 다른 글
구글 넥서스 7(Nexus 7) 제대로 활용하기 (2) | 2012.11.19 |
---|---|
안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리 (0) | 2012.04.30 |
안드로이드 다이어로그 만들기 (0) | 2011.10.18 |
안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011.10.02 |
안드로이드 컨텍스트 메뉴 만들기 (0) | 2011.09.30 |