iOS 音頻學習

 

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. #import <AudioToolbox/AudioToolbox.h>  
  2. #import <CoreFoundation/CoreFoundation.h>  
  3. //當音頻播放完畢會調用這個函數  
  4. static void SoundFinished(SystemSoundID soundID,void* sample){  
  5.     /*播放所有結束,所以釋放全部資源 */  
  6.     AudioServicesDisposeSystemSoundID(sample);  
  7.     CFRelease(sample);  
  8.     CFRunLoopStop(CFRunLoopGetCurrent());  
  9. }  
  10. //主循環  
  11. int main(){  
  12.     /*系統音頻ID,用來註冊咱們將要播放的聲音*/  
  13.     SystemSoundID soundID;  
  14.     NSURL* sample = [[NSURL alloc]initWithString:@"sample.wav"];  
  15.       
  16.     OSStatus err = AudioServicesCreateSystemSoundID(sample, &soundID);  
  17.     if (err) {  
  18.         NSLog(@"Error occurred assigning system sound!");  
  19.         return -1;  
  20.     }  
  21.     /*添加音頻結束時的回調*/  
  22.     AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, SoundFinished,sample);  
  23.     /*開始播放*/  
  24.     AudioServicesPlaySystemSound(soundID);  
  25.     CFRunLoopRun();  
  26.     return 0;  
  27. }  

我的以爲這個音頻服務有點雞肋,不過它確定有它的用武之地,好比咱們要播放一個自定義的警告音或者消息提示,用音頻服務確定比其餘的方法節省資源。

 

 

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清除聲音  

相關文章
相關標籤/搜索