iPhone勉強会 ~Audio~ 縣 禎輝 iPhoneで音を鳴らす • iPhoneでサウンドを再生する方法 1)System Sound Service 30秒以下でファイル容量の小さなサウンド CAF,MP3,WAV,AIFF など 2)AVAudioPlayer フレームワーク, 最も簡単な演奏方法 3)AudioQueue 大半のフォーマットに対応, 扱いが難しい 4)AudioUnit シンセサイズなどには必須のサウンド演奏方法 ある程度はフレームワーク化されている 5)OpenGL もともとゲームのために用意されたAPIなので、自由度の高い再生ができる iPhoneのサウンドフォーマット • iPhoneは、MIDI以外のほとんどのフォーマットに対 応している。 – 標準で要求するフォーマットは、caf形式のファイルである。 – 他の形式は、QuickTimeプレイヤーが対応している。 • Mac上のシミュレーターで動作しても、実機では動作しないこ とがこれ以外にも多々あること留意しなくてはならない。 サウンド再生の準備 • CAFのリニアPCMへの変換の例 /usr/bin/afconvert –f caff –d LEI16 INPUT_FILE OUTPUT_FILE.caf • CAFのIMA4への変換の例 /usr/bin/afconvert –f caff –d ima4 INPUT_FILE OUTPUT_FILE.caf • CAFのAACへの変換の例 /usr/bin/afconvert –f caff –d ima4 INPUT_FILE OUTPUT_FILE.caf System Sound Serviceの使い方 // オーディオファイルのパスを取得する NSURL* url; url = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"C4" ofType:@"aif"]]; // システムサウンドを作成する AudioServicesCreateSystemSoundID((CFURLRef)url, &_soundC4); // サウンドを鳴らす AudioServicesPlayAlertSound(sound); System Sound Serviceで楽器アプリ • 必要な13音のサウンドを読み込む - (void)viewDidLoad { // サウンドを読み込む NSURL* url; url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"C4" ofType:@"aif"]]; AudioServicesCreateSystemSoundID((CFURLRef)url, &_soundC4); url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"C#" ofType:@"aif"]]; AudioServicesCreateSystemSoundID((CFURLRef)url, &_soundCS); …… • playSound:アクションメソッドで再生 - (IBAction)playSound:(id)sender { // タグを取得して、サウンドを決定する SystemSoundID sound = (SystemSoundID)NULL; switch ([sender tag]) { case 100: sound = _soundC4; break; case 101: sound = _soundCS; break; case 102: sound = _soundD; break; case 103: sound = _soundDS; break; …… } // サウンドを鳴らす if (sound) { AudioServicesPlayAlertSound(sound); } } System Sound Serviceの欠点 • 提供していない機能 – 音量の調整ができない – 鳴らした音を途中で止める事ができない
© Copyright 2024 ExpyDoc