快速連結

2012年10月3日

關於Audio的筆記



參考了許多資料,以截取重點出來,不同的音效類別所相異的作用:





【包裝成簡單使用的介面】
System Sound API – 簡短的音效播放,沒有花俏的功能。要鑲入AudioToolbox.framework。
AVAudioPlayer – Object-C的音樂播放API。要鑲入AVFoundation.framework。

【需要花比較多功夫設定、但提供較多的控制選項】
Audio Toolbox – 播放和錄製音訊、串流播放。要鑲入AudioToolbox.framework。
Audio Units – 處理音效。要鑲入AudioUnit.framework。
OpenAL – 3D 環繞效果。要鑲入OpenAL.framework。

通常我使用簡短的音效播放,我會使用System Sound API、音樂則是AVAudioPlayer。
使用AVAudioPlayer也是可以播放音效(僅限於mp3),只是比起System Sound API實在是很不方便。

使用System Sound API:(可支援 wav、caf 和 aif 等格式)

#import <AudioToolbox/AudioToolbox.h>

....
....
....

-(void)InitAudioAndPlay{
  //先註冊Sound的使用。
  SystemSoundID soundID;
  NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]];
  AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &soundID);


  //播放
  AudioServicesPlaySystemSound(soundID);

  //想邊播邊震動~那就加上這個~
  AudioServicesPlayAlertSound(soundID);

  //如果只想要震動一下~
  AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

  //停止
  AudioServicesDisposeSystemSoundID(soundID);

  //設定音效播放完成時的呼叫
  AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, systemSoundCompletion, NULL);

  //取消播放完時候的呼叫~
  AudioServicesRemoveSystemSoundCompletion(soundID);
 
}

static void systemSoundCompletion(SystemSoundID sound_id, void* user_data) {
  //音效播放結束時被呼叫的方法函式

  //這可以重複播放相同的音效
  AudioServicesPlaySystemSound(sound_id);
}


參考資料:
[iPhone] 声音的播放 效果
Core Audio 的 System Sound 音效播放
使用 AVFoundation 來播放音樂

沒有留言:

張貼留言

歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT