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] // システムサウンドを作成する AudioServicesCreateSystemSoundID((CFURLRef)url, &_soundC4); // サウンドを鳴らす AudioServicesPlayAlertSound(sound);
System Sound Service で楽器アプ リ 必要な13音のサウンドを読み込む - (void)viewDidLoad { // サウンドを読み込む NSURL* url; url = [NSURL fileURLWithPath:[[NSBundle mainBundle] AudioServicesCreateSystemSoundID((CFURLRef)url, &_soundC4); url = [NSURL fileURLWithPath:[[NSBundle mainBundle] 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 の欠点 提供していない機能 – 音量の調整ができない – 鳴らした音を途中で止める事ができない