MENU
コンテンツ再構築中

Objective-C:音楽(BGM)や効果音(SE)等のサウンド再生方法

効果音は AudioToolBox、再生時間の長いサウンドループ等は AVFoundation、と使い分けるのが一般的。

INDEX

サウンド再生方法

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つはもう少し後の話になりそうだ。

Please share it!
  • URLをコピーしました!
  • URLをコピーしました!
INDEX