2013 이전/iOS개발

[iPhone 개발] audiosession category 의 비밀

하구루 2017. 2. 25. 16:07

사운드를 나오게 하는 앱을 개발하다 보면

여러 sound와 관련된 문제에 봉착하게 되는데
여기에는 audiosession이 가지고있는  category에 기인하는 경우가 많다.

여기서 먼저 다루어볼 부분은 route 부분이다.
현재 iphone audiosession 에는
다음과 같은 category가 있다.
AVAudioSessionCategoryAmbient;
AVAudioSessionCategorySoloAmbient;
AVAudioSessionCategoryPlayback;
AVAudioSessionCategoryRecord;
AVAudioSessionCategoryPlayAndRecord;
AVAudioSessionCategoryAudioProcessing;
각각에 대한 좀더 구체적인 설명은 아래 링크를 참조 하기 바란다.
위에 링크에 나와 있는 특성에 따라 output route의 처리도 달라지는데 이 정의를 제대로 알지 못해서 고생을 했었다.
위 category중에서 output이 가능한것은
AVAudioSessionCategoryAmbient;
AVAudioSessionCategorySoloAmbient;
AVAudioSessionCategoryPlayback;
AVAudioSessionCategoryPlayAndRecord;
위 네가지 이다.
이때 소리가 기본적으로 speaker 로 소리가 나는것은
AVAudioSessionCategoryAmbient;
AVAudioSessionCategorySoloAmbient;
AVAudioSessionCategoryPlayback;
이고,
기본적으로 ear speaker를 통해서 소리가 나오는것은

AVAudioSessionCategoryPlayAndRecord;

이다.
ear speaker를 통해 음원을 재생해야 한다면 위 세가지를 통해서는 불가능하다 (내가 찾아본 범위 안에서)
일반적으로 음원이 재생되는 route를 변경하기 위해서는

        UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
        AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

        UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
        AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

와 같은 방식으로 변경을 하게 되는데

kAudioSessionProperty_OverrideAudioRoute 에 set할수 있는 값은

kAudioSessionOverrideAudioRoute_None - 기본 재생 route

kAudioSessionOverrideAudioRoute_Speaker - speaker 
요 두가지 뿐이다.
그렇기 때문에 기본 재생이 speaker 인 위의 세가지를 통해서는 위 방법을 통해서 route를 바꿀수 있는 방법은 없다.
즉, voip와 같은 ear speaker 를 통해 기본적으로 소리가 나야 하는  앱을 만들기 위해서는  AVAudioSessionCategoryPlayAndRecord 를 꼭 이용해야 한다.


너무 당연한 답을 길게 쓴게 아닌가 갑자기 민망해 지려고 한다;;; ;


나 같이 헤매고 있는 어떠한 분에게 도움이 되었으면 한다.


반응형