티스토리 뷰

아이폰에 비해 안드로이드는 개발에 제한이 많이 없습니다. 

아이폰은 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 프로토콜을 활용하면 이러한 문제를 어느정도 해결할 수 있겠지만 

아무래도 중계기를 거쳐야 하는 제한점이 존재할 것 같네요..  



댓글
댓글쓰기 폼