iOS2012. 10. 22. 15:19

효과음에 사용되는 함수는 다음 세가지다

  • AudioServicesCreateSystemSoundID
  • AudioServicesPlaySystemSound
  • AudioServicesDisposeSystemSoundID

  • 애플은 이 함수들에 대해 다음의 몇 가지 제한을 두고 있다.

  • 30초 이하의 재생시간
  • 선형 PCM 파일이나 IMA4 형식
  • 확장자가 .caf, .aif 또는 .wav 일 것
  •  
     위 함수들은 시스템 사운드 서비스가 제공하고, 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];
      }


    Posted by 다오나무