[iPhone 開発メモ] 短い音を再生する方法
iPhone アプリで効果音のような短い音を鳴らす方法です。
再生できる音は 30 秒以下の AIFF, CAF, WAV ファイルです。シュミレータでは MP3 も鳴らせましたが実機では鳴らないようです。同時に複数鳴らすことも可能です。その場合は音声ファイル毎に SystemSoundID が必要です。シュミレータで3音同時再生までは試しました。
※5 秒以上のファイルは Audio Queue Services を使う必要があります。
基本は以下の通り。
- AudioServicesCreateSystemSoundID で音声ファイルを登録して、SystemSoundID を取得
- 取得した SystemSoundID を使用して AudioServicesPlaySystemSound で再生する
- 使用が終わった SystemSoundID は AudioServicesDisposeSystemSoundID で解放する
注意点は Frameworks のフォルダのコンテキストメニュー「追加」> 「既存のフレームワーク」から 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 ボタンを配置

Play ボタンと play メソッドを接続
関連する投稿
2 comments
コメントをどうぞ
Additional comments powered by BackType
[...] サウンド関連 1.[iPhone 開発メモ] 短い音を再生する方法 2.iPhoneで繰り返しループするサウンドを鳴らすコードのメモ (Audio [...]
3estranged…
…