정보공간_1

[7기 강북 전소현] 안드로이드 오디오 시스템 – 개요 본문

IT 놀이터/Elite Member Tech & Talk

[7기 강북 전소현] 안드로이드 오디오 시스템 – 개요

알 수 없는 사용자 2015. 3. 6. 06:29

안녕하세요. 강북멤버십 23-1기 전소현입니다.

앞으로 총 5회에 거쳐 안드로이드 오디오 시스템을 분석하며 글을 게시할 예정입니다.

오늘은 안드로이드 오디오 시스템의 전반적인 부분을 간략히 소개하겠습니다.

 

1. 오디오 시스템의 역할

우리는 스마트폰으로 단순히 인터넷만 사용하는 것이 아니라 음악을 듣거나 영상을 보는 경우도 많습니다. 만약 이 때 소리가 없다면 사용자는 즐거움을 느낄 수 없겠죠?

이렇게 이어폰이나 스피커를 통해 소리를 출력하는 오디오 출력, 마이크를 통해 소리를 받아들이는 오디오 입력, 볼륨 조절 등의 오디오 제어와 같은 부분을 안드로이드 오디오 시스템이 담당하고 있습니다.

어플리케이션은 오디오 시스템과 결합하여 더욱 다양한 기능을 가질 수 있습니다. 이러한 예로는 오디오 시스템과 텔레포니 서비스가 결합된 형태인 전화 어플리케이션, 사용자가 지정한 시간에 소리를 출력하는 알람 어플리케이션, 마이크를 통해 소리를 녹음해주는 녹음기 어플리케이션 등이 있습니다.

오디오 출력이 필요한 어플리케이션(알람, mp3 플레이어, 라디오, 음성 통화 등)은 오디오 시스템에게 사운드 데이터를 전달하고, 오디오 시스템은 오디오 출력 장치로 사운드 데이터를 전달하여 소리를 출력합니다. 만약 여러 어플리케이션에서 동시에 사운드 데이터 출력을 요청한다면 오디오 플링거 서비스에서 다수의 소리 데이터들을 합성(믹싱)한 후 오디오 출력장치로 전달해줍니다. 때문에 스마트폰에서 동시에 여러 소리를 들을 수 있습니다.

녹음기 어플리케이션과 같이 오디오 입력이 필요한 어플리케이션은 오디오 시스템이 오디오 입력장치(스마트폰 내장 마이크)로부터 사운드 데이터를 전달받고, 오디오 시스템은 이러한 사운드 데이터를 어플리케이션으로 보내줍니다. 오디오 입력의 경우 출력과 달리 오디오 믹서 기능이 존재하지 않습니다.

아래 그림을 통해 좀 더 쉽게 안드로이드 오디오 시스템의 오디오 입/출력 동작을 이해할 수 있습니다.


2. PCM 데이터

오디오 시스템은 사운드 데이터들 가운데 PCM 데이터만을 처리할 수 있습니다. 오디오 출력의 경우 어플리케이션이 PCM 데이터를 만들어서 오디오 시스템에게 전달하는 형태이고, 오디오 입력의 경우는 오디오 하드웨어로부터 들어온 PCM 데이터를 어플리케이션이 처리하는 방식을 갖습니다.

우리가 듣는 소리는 아날로그 신호이기 때문에 이를 디지털 기기에 적용하기 위해서는 디지털 변환 과정이 필요합니다.


위 그림과 같이 아날로그 신호는 샘플링, 양자화, 부호화 과정을 거쳐 디지털 신호로 변환됩니다. PCM은 디지털 변조 과정 중 하나이며, PCM 데이터는 변조되어 디지털화 된 데이터를 말합니다.

샘플링(Sampling)은 아날로그 파형을 N(샘플)로 균등하게 나누는 것을 의미하고, 양자화(Quantization) 1초간의 파형을 2^N(비트)로 균등하게 나누는 것을 의미합니다. , 샘플링은 아래 그림에서 X축을 나누는 것을, 양자화는 Y축을 나누는 것입니다. 부호화는 위 과정들을 거친 소리를 0 1의 이진 비트인 디지털 데이터로 만드는 과정입니다.

오디오 리소스들의 재생에 관련된 API인 AudioTrackpublic int write (byte[] audioData, int offsetInBytes, int sizeInBytes) 함수를 이용하면 오디오 출력을 할 수 있습니다. 또 오디오 리소스들의 입력에 관련된 API인 AudioRecordpublic int read (byte[] audioData, int offsetInBytes, int sizeInBytes) 함수를 이용하면 오디오 입력을 할 수 있습니다. 이 두 함수의 첫 번째 매개변수인 byte[] audioData가 바로 입/출력 시키고자 하는 음원의 PCM 데이터입니다. 따라서 해당 함수의 첫 번째 인자로 PCM 데이터를 넣어주면 어플리케이션에서 소리의 입/출력이 가능합니다.

 

3. 오디오 장치와 입출력 스트림

스마트폰에 존재하는 오디오 입출력 장치는 다양합니다. 또 오디오 장치로 소리를 내보내고 받기 위한 입출력 스트림 역시 여러 종류가 존재합니다. 오디오 입출력 장치와 스트림의 개념을 혼동하는 경우가 있는데 오디오 입출력 스트림이 PCM 데이터가 이동하는 통로라면 오디오 장치는 그 통로의 끝에 연결된 기기로 표현할 수 있습니다.

하지만 오디오 입출력 장치와 오디오 입출력 스트림이 1:1로 매치되지는 않습니다. 하나의 오디오 출력 스트림으로 오디오 데이터를 내보내지만, 이 데이터가 실제로 전달되는 출력장치는 여러 가지가 될 수 있습니다. 예를 들어 일반적인 스마트폰에서 기본 오디오 출력 스트림으로 보내는 오디오 데이터는 내부 설정에 따라 스피커, 이어폰, 이어피스와 같은 다양한 오디오 출력 장치로 전달 될 수 있습니다.

아래는 안드로이드의 오디오 입출력 장치의 종류를 나타낸 표입니다.

안드로이드 오디오 입/출력 스트림의 종류 및 상세 분석내용은 2번째 게시글에서 더 자세히 설명하겠습니다.


위 내용은 아래 자료들을 참고하여 작성하였습니다.

 - 안드로이드 미디어 프레임워크 (김태연 외 4명 공저)

 - 국민대학교 전자공학부 통신공학 강의자료 (박영일 교수님)