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