検索
カテゴリツリー
トップ
  未整理
  iPhoneアプリ開発
      未整理
      画像処理
リンク

CD&DVD Press
プレスやってます!


TECHLOG
効果音の再生
30秒以内(3Gは5秒)の音声を再生する場合は、「AudioToolbox.framework」を使用する。
#include <AudioToolbox/AudioToolbox.h>

ファイルから音声の読み込み。
シミュレータではmp3でもよいが、実機ではwavでないといかん。
SystemSoundID mSound = 0;
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundUrl = CFBundleCopyResourceURL(
       mainBundle, CFSTR("se1"), CFSTR("wav"), NULL );
AudioServicesCreateSystemSoundID( soundURL, &mSound );

再生する。
AudioServicesPlaySystemSound( mSound );

CFSTR()というのは、CFStringRef型となる。
NSStringから変換する場合は、
NSString* name = @"abc";
CFStringRef cfstr_name = CFStringCreateWithCString(
	kCFAllocatorDefault, [name UTF8String],
	kCFStringEncodingUTF8 );

とする。
再生の終了をキャッチしたい場合は、
//	コールバック登録
AudioServicesAddSystemSoundCompletion(
	sound_id, NULL, NULL, SoundPlayEndedCallback, (void*)soundUrl );

としておき、コールバックを↓のようにする
(スタティックなとこに注意)
static void SoundPlayEndedCallback(
	SystemSoundID sound_id,
	void* myURLRef
){
	//	一度しか使わない音声なら、ここで破棄する
	AudioServicesDisposeSystemSoundID( sound_id );
	CFRelease( myURLRef );
}

音声を一時停止するような命令はないっぽいが、
CFRunLoopStop( CFRunLoopGetCurrent() );

とすれば、一応強制終了できる。
posted by admin at 2010年10月28日