AudioSession API 간단 사용법

내가 개발한 앱이 실행중일때 오디오가 어떻게 작동하는지를 설정할 수 있는 API로 앱내에서의 오디오가 어떻게 작동하는지를 설정할 수 있습니다.

1. 아이팟 오디오와 앱의 오디오가 같이 작동하는지

2. 아이팟 오디오를 끄고 앱의 오디오만 작동하는지

3. 녹음이 가능할 것인지

4. 오디오 플레이는 안하면서 오디오 처리만 할 것인지 등등을

 

세션 카테고리를 이용해서 설정하여 사용할 수 있습니다.

기본적으로 세션을 초기화 하는 코드는 다음과 같습니다.

 

디버깅이나 OSStatus 화인없이 꼭 필요한 부분만 작성된 코드입니다.

 

코드상에 번호가 매겨져있습니다. 번호대로 설명드립니다.

1. 앱 실행중에 전화가 오거나 문자가 오면 전화벨이 울립니다. 이때 앱의 오디오가 어떻게 작동하는지 설정합니다.

2. 이어폰으로 아이팟 음악을 듣다가 이어폰을 뽑으면 자동으로 음악이 정지됩니다 이렇게 오디오의 하드웨어 변경에 따른 앱의 오디오를 설정하는 부분입니다.

3. 다른 앱(아이팟)에서 오디오를 사용하고 있는지 체크해주는 부분입니다. 사용여부에 따라 4번과 같이 카테고리를 설정해주면 됩니다.

4. 앱의 오디오 Behavior를 설정하는 부분입니다. Behavior에 따라 iOS에서 제공하는 몇가지 카테고리가 있는데 다음과 같습니다.

– kAudioSessionCategory_SoloAmbientSound : 디폴트로 앱이 실행되면 아이팟 오디오가 꺼지고 앱의 오디오만 작동됩니다.

– kAudioSessionCategory_AmbientSound : 앱이 실행되면 아이팟 오디오는 계속 실행되면서 앱의 오디오도 같이 작동합니다. (오디오 세션설정을 안한 상태에서 앱을 실행하면 이상태더군요)

– kAudioSessionCategory_MediaPlayBack : 앱이 실행되면 아이팟 오디오가 꺼지고 앱의 오디오만 작동합니다. 더불어 하드웨어의 음소거기능이나 락을 걸어도 앱의 오디오가 계속 실행됩니다.

– kAudioSessionCategory_PlayAndRecord : 디폴트인 SoloAmbientSound와 같지만 녹음이 가능합니다.

– kAudioSessionCategory_AudioProcessing : 오디오 플레이는 안되고 오디오의 처리만 가능합니다.

iOS에서 로컬 한글 폴더명 처리

한글 스트링을 처리하는 것은 생각보다 까다롭다.

특히나 앱내에서 파일시스템을 보여줄때 한글폴더 리스트를 가져와서 뿌려주게 되는 경우 사용상의 문제는 없지만 보여지는 부분에서 문제가 발생한다.

예를 들면, 테스트 -> ㅌㅔㅅㅡㅌㅡ

 

이렇게 자음과 모음들이 분리되어 사용되어집니다. 시뮬레이터에서 한글을 사용하면 볼 수 있는 현상과 동일합니다.

이게 웃긴게 NSLog에서 찍을때는 정상적으로 나오지만 앱에서 보여질때 분리가 안되어 보여지기때문에 헷갈릴 수 있습니다.

첨엔 인코딩 문제인지 알고 해결법을 찾느라 많이 헤맸습니다.

하지만 간단한 문제였습니다. 인코딩이 아니라 iOS상에서 파일/폴더명이 Canonical Mapping되어 사용되고 있는거였습니다. xCode에서는 NSString에 관련 처리를 해주는 메소드가 있었습니다.

[text decomposedStringWithCanonicalMapping] : 매핑적용

[text precomposedStringWithCanonicalMapping] : 매핑해제

 

하면 할 수록 묘한 매력이 있는 세계~