對于簡單的寝殴、無混音音頻曹抬,AVAudio ToolBox框架提供了一個(gè)簡單的C語言風(fēng)格的音頻服務(wù)息楔。你可以使用AudioservicesPlaySystemSound函數(shù)來播放簡單的聲音毫缆。
要遵守以下幾個(gè)規(guī)則:
1.音頻長度小于30秒
2.格式只能是PCM或者IMA4
3.文件必須被存儲為.caf、.aif唬渗、或者.wav格式4.簡單音頻不能從內(nèi)存播放典阵,而只能是磁盤文件除了對簡單音頻的限制外,你對于音頻播放的方式也基本無法控制镊逝。
一旦音頻播放就會(huì)立即開始壮啊,而且是當(dāng)前電話使用者設(shè)置的音量播放。你將無法循環(huán)播放聲音撑蒜,也無法控制立體聲效果他巨。不過你還是可以設(shè)置一個(gè)回調(diào)函數(shù)充坑,在音頻播放結(jié)束時(shí)被調(diào)用减江,這樣你就可以對音頻對象做清理工作染突,以及通知你的程序播放結(jié)束。直接上代碼:
#import<AudioToolbox/AudioToolbox.h>
SystemSoundID sound = 0;
NSString *path = [NSString stringWithFormat:@"/System/Library/Audio/UISounds/%@.%@",@"sms-received1",@"caf"];
if (path) {
OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path],&sound);
if (error != kAudioServicesNoError) {//獲取的聲音的時(shí)候辈灼,出現(xiàn)錯(cuò)誤
sound = 0;
}
}
AudioServicesPlaySystemSound(sound);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
//當(dāng)音頻播放完畢會(huì)調(diào)用這個(gè)函數(shù)
static void SoundFinished(SystemSoundID soundID,void* sample){
/*播放全部結(jié)束份企,因此釋放所有資源 */
AudioServicesDisposeSystemSoundID(sample);
CFRelease(sample);
CFRunLoopStop(CFRunLoopGetCurrent());
}
//主循環(huán)
int main(){
/*系統(tǒng)音頻ID,用來注冊我們將要播放的聲音*/
SystemSoundID soundID;
NSURL* sample = [[NSURL alloc]initWithString:@"sample.wav"];
OSStatus err = AudioServicesCreateSystemSoundID(sample, &soundID);
if (err) {
NSLog(@"Error occurred assigning system sound!");
return -1;
}
/*添加音頻結(jié)束時(shí)的回調(diào)*/
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, SoundFinished,sample);
/*開始播放*/
AudioServicesPlaySystemSound(soundID);
CFRunLoopRun();
return 0;
}
本文解析是根據(jù)分析公司項(xiàng)目和收集的知識點(diǎn)所寫巡莹,第一段代碼是公司項(xiàng)目中通知消息用到的司志,第二,三段代碼就是為了剛好的解釋AudioservicesPlaySystemSound函數(shù)的使用降宅,在使用中并不需要手動(dòng)釋放資源骂远。