iPhone

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の欠点
• 提供していない機能
– 音量の調整ができない
– 鳴らした音を途中で止める事ができない