Objective-C:音楽(BGM)や効果音(SE)等のサウンド再生方法
効果音は AudioToolBox、再生時間の長いサウンドループ等は AVFoundation、と使い分けるのが一般的。
サウンド再生方法
AudioToolBoxを使ったサウンド再生
- ViewController.h
-
#import <AudioToolbox/AudioServices.h> @interface MainViewController : UIViewController { CFURLRef soundURL; SystemSoundID soundID; } @property(readwrite) CFURLRef soundURL; @property(readonly) SystemSoundID soundID; @end
- ViewController.m
-
プロジェクト内のサウンドファイル filename.aif を再生する場合
CFBundleRef mainBundle; mainBundle = CFBundleGetMainBundle (); soundURL = CFBundleCopyResourceURL (mainBundle,CFSTR ("filename"),CFSTR ("aif"),NULL); AudioServicesCreateSystemSoundID (soundURL, &soundID); CFRelease (soundURL); AudioServicesPlaySystemSound (soundID);
AVFoundationを使ったサウンド再生
- ViewController.h
-
#import <AVFoundation/AVFoundation.h> @interface MainViewController : UIViewController { AVAudioPlayer *audioPlayer; } - (AVAudioPlayer*)getAVAudioPlayer:(NSString*)soudFileName; @end
- ViewController.m
-
[audioPlayer play]; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { audioPlayerCapture = [self getAVAudioPlayer:@"mySoundEffects.caf" ]; [audioPlayerCapture prepareToPlay]; } return self; }
まとめ
AudioToolBox は、30秒以内の制限付きではあるが、連打(連続再生)してもはっきりと再生される。
AVFoundation の場合、再生開始時に遅延が発生し、たまに途切れて再生されてしまうという問題がある。
こういった理由からも効果音程度の再生であれば、AudioToolBox を使用するのが好ましい。
CoreAudio や OpenALなら、サウンドを思い通りにコントロールできそうだが、この2つはもう少し後の話になりそうだ。