효과음에 사용되는 함수는 다음 세가지다
애플은 이 함수들에 대해 다음의 몇 가지 제한을 두고 있다.
위 함수들은 시스템 사운드 서비스가 제공하고, Audio Toolbox 프레임워크에 속한다. 그렇기 때문에 이 함수를 사용하려면 Audio ToolBox 프레임워크를 프로젝트에 추가해야 한다.
그리고 헤더 파일인 <AudioToobBox/AudioServices.h> 파일도 #import로 포함시키자.
시스템 사운드 서비스는 사운드를 구별하는 식별자로 SystemSoundID라는 데이터 타입을 이용한다.
그리고 AudioServicesCreateSystemSoundID 함수는 이 식별자를 생성하는데 사용한다.
<SystemSoundViewController.m>
// sound
SystemSoundID m_SndID;
id sndPath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"aiff" inDirectory:@"/"];
// URL 타입 생성
CFURLRef baseURL = (__bridge CFURLRef)[[NSURL alloc] initFileURLWithPath:sndPath];
// SoundID 생성
AudioServicesCreateSystemSoundID(baseURL, &m_sndID);
앞의 코드는 어플리케이션 번들의 sound.aiff 파일로 사운드 식별자를 하나 생성한다. 재생을 위해서는 다음 코드와 같이 AudioServicesPlaySystemSound를 이용한다.
-(void) onPlaySound:(id)sender {
// 사운드 재생
AudioServicesPlaySystemSound(m_sndID);
}
AudioServicesPlaySystemSound(m_sndID); 처럼 AudioServicesPlaySystemSound 함수를 호출하면 바로 소리가 재생된다. 하지만 이 함수로는 자동으로 재생을 반복하거나, 재생 중에 볼륨을 조절하는 등의 제어는 할 수 없다.
생성한 사운드가 더 이상 필요하지 않을 때는 자원을 해제시켜서 시스템의 메모리 소모를 줄이다.
- (void)dealloc {
// 자원 해제
if(m_sndID) {
AudioServicesDisposeSystemSoundID(m_sndID);
}
[super dealloc];
}
'iOS' 카테고리의 다른 글
아이폰 가로 스크롤 메뉴 샘플 (0) | 2012.12.18 |
---|---|
인엡 재구매 복구 로직(restore button) (0) | 2012.10.23 |
AudioService resource 해제 (0) | 2012.10.22 |
NSNotification을 이용하여 모든 Modal View를 dismiss 하는 방법 (1) | 2012.10.22 |
table view 2개 사용하기 (0) | 2012.10.18 |