정보공간_1

[7기 강북 전소현] 안드로이드 오디오 스트림 타입 본문

IT 놀이터/Elite Member Tech & Talk

[7기 강북 전소현] 안드로이드 오디오 스트림 타입

알 수 없는 사용자 2015. 4. 2. 02:18

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

이번 게시물에서는 지난 게시물에서 이야기했던 안드로이드 오디오 스트림의 종류에 대해 더 자세히 알아보겠습니다.

[이 게시물은 안드로이드 KitKat(4.4.2)을 기준으로 직접 분석한 내용을 정리한 것입니다.]

 

음악 재생과 같이 소리를 출력하는 어플리케이션을 만들 때 우리는 오디오 리소스들의 재생과 관련된 API AudioTrack을 사용하게 됩니다.

AudioTrack 클래스의 생성자인 AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode)의 매개변수들은 다음과 같습니다.

생성자의 첫 번째 매개변수인 streamType 어플리케이션에서 출력시킬 오디오 리소스의 종류에 해당하는 스트림 타입을 의미하고, AudioManager.STREAM_MUSIC과 같은 형태로 설정해 줄 수 있습니다.

안드로이드 오디오 시스템은 오디오 스트림 타입을 기준으로 볼륨 제어, 출력 장치 결정 등과 같은 다양한 오디오 제어를 수행하므로 어플리케이션에서 소리를 출력하고자 하는 용도에 맞춰 오디오 스트림 타입을 설정해주어야 합니다.

 

 

안드로이드 오디오 시스템에는 총 10가지의 오디오 스트림 타입이 존재하고, 출력되는 모든 오디오 트랙은 소리의 종류에 따라 그에 해당하는 오디오 스트림 타입이 결정됩니다.

예를 들어, 뮤직 어플리케이션과 같이 음악 소리를 출력하기 위한 어플리케이션에서는 뮤직 스트림 타입(STREAM_MUSIC), 버튼을 누를 때 나는 효과음은 시스템 스트림 타입(STREAM_SYSTEM)을 사용합니다.

아래는 안드로이드의 오디오 스트림 타입을 정리한 표입니다.

이러한 안드로이드 오디오 스트림 타입들은 안드로이드 프레임워크 소스의 frameworks/base/media/java/android/mediahardware/libhardware_legacy/include/hardware_legacy 하위의 소스파일들에 정의되어 있습니다.

 

 

AudioManager.java를 보면 각각의 오디오 스트림 타입에 해당하는 변수가 선언되어 있고, 이 값들은 AudioSystem.java에 선언되어 고유의 값을 갖고 있습니다.

, AudioSystemLegacy.h에서 역시 오디오 스트림 타입들이 정의되어 있고, AudioSystem.java에서와 동일한 값들을 갖고 있습니다. (아래 그림 참고)

AudioSystem.java

AudioSystemLegacy.h

 

AudioSystem.java AudioSystemLegacy.h을 보면 NUM_STREAM_TYPES이라는 변수가 있는데 이는 안드로이드의 오디오 스트림 타입의 개수를 의미합니다.

기존 안드로이드에는 10개의 오디오 스트림 타입이 존재하므로 아래 그림과 같이 10으로 초기화 되어 있는 것을 확인할 수 있습니다.

 

안드로이드 오디오 시스템은 위에서 설명한 것과 같이 오디오 스트림 타입을 관리하고 이에 맞춰 다양한 오디오 기능들을 제어합니다.

따라서 위에서 언급한 소스파일들을 분석하여 수정한다면 기존 10개의 오디오 스트림 타입 외에 특정 종류의 소리를 위한 오디오 스트림 타입을 새롭게 추가할 수 있습니다.

 

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

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