文章規(guī)劃
iOS 音視頻開發(fā)(二)AVAudioRecorder實現(xiàn)錄音功能
iOS 音視頻開發(fā)(三)MediaPlayer播放本地有巧、遠程音頻
iOS 音視頻開發(fā)(四)MediaPlayer播放本地课幕、遠程視頻
iOS 音視頻開發(fā)(五)AVAudioPlayer/AVPlayer播放本地、遠程音頻
iOS 音視頻開發(fā)(六)AVPlayer播放本地宪肖、遠程視頻
iOS 音視頻開發(fā)(七)AudioToolbox音效播放(本篇)
在iOS中音頻播放從形式上可以分為音效播放和音樂播放疯搅。前者主要指的是一些短音頻播放濒生,通常作為點綴音頻,對于這類音頻不需要進行進度幔欧、循環(huán)等控制罪治。后者指的是一些較長的音頻,通常是主音頻礁蔗,對于這些音頻的播放通常需要進行精確的控制觉义。
音效播放
AudioToolbox 是一套基于C語言的框架,使用它來播放音效其本質(zhì)是將短音頻注冊到系統(tǒng)聲音服務(System Sound Service)浴井。System Sound Service是一種簡單晒骇、底層的聲音播放服務。
但是它本身也存在著一些限制:
1磺浙、音頻播放時間不能超過30s
2洪囤、數(shù)據(jù)必須是PCM或者IMA4格式
3、音頻文件必須打包成.caf撕氧、.aif瘤缩、.wav中的一種(注意這是官方文檔的說法,實際測試發(fā)現(xiàn)一些.mp3也可以播放)
使用步驟如下:
1伦泥、調(diào)用AudioServicesCreateSystemSoundID(???CFURLRef??inFileURL, SystemSoundID*???outSystemSoundID)函數(shù)獲得系統(tǒng)聲音ID剥啤。
2、如果需要監(jiān)聽播放完成操作不脯,則使用AudioServicesAddSystemSoundCompletion(??SystemSoundID inSystemSoundID,
3铐殃、CFRunLoopRef??inRunLoop, CFStringRef??inRunLoopMode, AudioServicesSystemSoundCompletionProc??inCompletionRoutine, void*??inClientData)方法注冊回調(diào)函數(shù)。
4跨新、調(diào)用AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID) 或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID) 方法播放音效(后者帶有震動效果)富腊。
主要類
1:AudioServicesCreateSystemSoundID
2:AudioServicesPlaySystemSound
主要代碼(Demo地址)
- (IBAction)playLocalMusic:(id)sender {
? [self playSoundEffect:@"beep.wav"];
}
// 播放完成回調(diào)函數(shù)
void soundCompleteCallback(SystemSoundIDsoundID,void* clientData) {
? NSLog(@"播放完成...");
}
- (void)playSoundEffect:(NSString*)name {
? NSString *audioFile = [[NSBundle mainBundle] pathForResource:name ofType:nil];
? NSURL*fileUrl = [NSURLfileURLWithPath:audioFile];
? //1.獲得系統(tǒng)聲音ID
? SystemSoundID soundID=0;
? AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);
? //如果需要在播放完之后執(zhí)行某些操作,可以調(diào)用如下方法注冊一個播放完成回調(diào)函數(shù)
? AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);
? AudioServicesPlaySystemSound(soundID);//2.播放音效
? AudioServicesPlayAlertSound(soundID);//播放音效并震動
}