AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate, NULL, NULL, systemAudioCallback, NULL);ios
AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate); 框架
這兩個接口的用途是綁定和取消指定soundID對應的回調方法;kSystemSoundID_Vibrate爲soundID類型,其回調方法認準的也是這個soundID,在任何地方使用這個id去執行AudioServicesPlaySystemSound(xxxSoundID)都會調用到該回調方法。而一旦調用remove方法取消回調,一樣的在任何地方使用這個id去執行AudioServicesPlaySystemSound(xxxSoundID)都不會調用到這個回調。函數
系統震動oop
1.加入AudioToolBox.framework框架this
2.加入頭文件#import <AudioToolbox/AudioToolbox.h>spa
3.使用AudioServicesPlaySystemSound 這個接口來進行聲音和震動的播放對象
例如:接口
1. 播放和中止震動事件
// 播放震動 ip
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
// 中止震動
AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);
// iPod Touch不支持震動,若以以上代碼對其無效
2. 播放特定的聲音
static SystemSoundID soundIDTest = 0;
NSString * path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];
if (path) {
AudioServicesCreateSystemSoundID( (CFURLRef)[NSURL fileURLWithPath:path], &soundIDTest );
}
AudioServicesPlaySystemSound( soundIDTest );
4.一個不停震動的方法:
// 定義一個回調函數,震動結束時再次發出震動
void MyAudioServicesSystemSoundCompletionProc (SystemSoundID ssID,void *clientData)
{
BOOL* iShouldKeepBuzzing = clientData;
if (*iShouldKeepBuzzing) { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
} else {
//Unregister, so we don't get called again...
AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);
}
}
如下爲調用的代碼:
BOOL iShouldKeepBuzzing = YES;
AudioServicesAddSystemSoundCompletion (
kSystemSoundID_Vibrate,
NULL,
NULL,
MyAudioServicesSystemSoundCompletionProc,
&iShouldKeepBuzzing );
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
對於簡單的、無混音音頻,AVAudio ToolBox框架提供了一個簡單的C語言風格的音頻服務。你可使用AudioservicesPlaySystemSound函數來播放簡單的聲音。要遵照如下幾個規則:
1.音頻長度小於30秒
2.格式只能是PCM或者IMA4
3.文件必須被存儲爲.caf、.aif、或者.wav格式
4.簡單音頻不能從內存播放,而只能是磁盤文件
除了對簡單音頻的限制外,你對於音頻播放的方式也基本沒法控制。一旦音頻播放就會當即開始,並且是當前電話使用者設置的音量播放。你將沒法循環播放聲音,也沒法控制立體聲效果。不過你仍是能夠設置一個回調函數,在音頻播放結束時被調用,這樣你就能夠對音頻對象作清理工做,以及通知你的程序播放結束。
直接上代碼:
我的以爲這個音頻服務有點雞肋,不過它確定有它的用武之地,好比咱們要播放一個自定義的警告音或者消息提示,用音頻服務確定比其餘的方法節省資源。
1,首先介紹播放系統音頻。這個系統聲音就是相對比較短的,只有幾秒中,不能重複,當即播放的那種聲音。如短信鈴聲。Beep,Boun...
聲明兩個變量:
CFURLRef soundFileURLRef; //聲音文件路徑
SystemSoundID soundFileObject; //聲音id
而後定義函數使用。
-(void)soundPlay{
2 {
3 CFBundleRef mainBundle = CFBundleGetMainBundle ();
4 soundFileURLRef = CFBundleCopyResourceURL (mainBundle,
5 CFSTR ("pageflip"),
6 CFSTR ("aif"),
7 NULL);
8
9 AudioServicesCreateSystemSoundID(soundFileURLRef, &soundFileObject);
10 AudioServicesAddSystemSoundCompletion(soundFileObject,
11 NULL, // uses the main run loop
12 NULL, // uses kCFRunLoopDefaultMode
13 SoundFinished, // the name of our custom callback function
14 NULL // for user data, but we don't need to do that in this case, so we just pass NULL
15 );
16
17 AudioServicesPlaySystemSound (soundFileObject);
18 }
19
20 //這個函數是C風格的。
21 void SoundFinished(SystemSoundID sound_id, void* user_data){
22 AudioServicesDisposeSystemSoundID(sound_id);
23 }
"pageflip.aif"是文件全名。
AudioServicesCreateSystemSoundID是註冊聲音,
AudioServicesPlaySystemSound播放聲音
AudioServicesAddSystemSoundCompletion監聽完成事件方法,完成後你要記得清楚這個聲音,由於它要佔用資源的。
AudioServicesDisposeSystemSoundID清除聲音