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