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

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents