iPhone アプリで効果音のような短い音を鳴らす方法です。

再生できる音は 30 秒以下の AIFF, CAF, WAV ファイルです。シュミレータでは MP3 も鳴らせましたが実機では鳴らないようです。同時に複数鳴らすことも可能です。その場合は音声ファイル毎に SystemSoundID が必要です。シュミレータで3音同時再生までは試しました。
※5 秒以上のファイルは Audio Queue Services を使う必要があります。

基本は以下の通り。

  1. AudioServicesCreateSystemSoundID で音声ファイルを登録して、SystemSoundID を取得
  2. 取得した SystemSoundID を使用して AudioServicesPlaySystemSound で再生する
  3. 使用が終わった SystemSoundID は AudioServicesDisposeSystemSoundID で解放する

注意点は Frameworks のフォルダのコンテキストメニュー「追加」> 「既存のフレームワーク」から AudioToolbox.framework を追加しておくことです。

AudioToolbox.framework を追加

AudioToolbox.framework を追加

今回は View-Based Application でアプリケーション名は Sound として作成しています。Play ボタンを押すと Resources に入れた se.aif ファイルが鳴るようにしてみました。

SoundViewContorller.h

#import <UIKit/UIKit.h>
#include <AudioToolbox/AudioToolbox.h>

@interface SoundViewController : UIViewController {
	CFURLRef		soundURL;
	SystemSoundID	soundID;
}

@property (readwrite)	CFURLRef		soundURL;
@property (readonly)	SystemSoundID	soundID;

- (IBAction) play;

@end

SoundViewContoller.m

#import "SoundViewController.h"

@implementation SoundViewController

@synthesize soundURL;
@synthesize soundID;

- (void)viewDidLoad {
    [super viewDidLoad];

    CFBundleRef mainBundle;
    mainBundle = CFBundleGetMainBundle ();

    soundURL  =	CFBundleCopyResourceURL (mainBundle,CFSTR ("se"),CFSTR ("aif"),NULL);
    AudioServicesCreateSystemSoundID (soundURL, &soundID);
    CFRelease (soundURL);
}

- (IBAction) play {
    AudioServicesPlaySystemSound (soundID);
}

- (void)dealloc {
    [super dealloc];
    AudioServicesDisposeSystemSoundID (soundID);
}
View に Play ボタンを配置

View に Play ボタンを配置

Play ボタンと play メソッドを接続

Play ボタンと play メソッドを接続

関連する投稿