iOS開發:系統聲音服務
提供了一個簡單的聲音提醒服務,但是它支持的格式有限,而且這些函數沒有提供聲音和控制音量的功能,因此在開發游戲為游戲配樂的時候,不會使用系統聲音服務。
一、訪問聲音服務
添加框架AudioToolBox以及要播放的聲音文件,另外還需要在實現聲音服務的類中導入該框架的接口文件:
#import <AudioToolbox/AudioToolbox.h>
播放系統聲音,需要兩個函數是AudioServicesCreateSystemSoundID和AudioServicesPlaySystemSound,還需要聲明一個類型為SystemSoundID類型的變量,它表示要使用的聲音文件。
- -(IBAction) playSysSound:(id)sender {
- SystemSoundID sourceID;
- //調用NSBundle類的方法mainBundle返回一個NSBundle對象,該對象對應于當前程序可執行二進制文件所屬的目錄
- NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"soundeffect" ofType:@"wav"];
- //一個指向文件位置的CFURLRef對象和一個指向要設置的SystemSoundID變量的指針
- AudioServicesCreateSystemSoundID((CFURLRef) [NSURL fileURLWithPath:soundFile], &soundID);
- AudioServicesPlaySystemSound(soundID);
- }
二、提醒音和震動
1、提醒音
和系統聲音的差別:
如果手機處于靜音狀態,則提醒音將自動觸發震動;
播放提醒音需要的函數是AudioServicesPlayAlertSound而不是AudioServicesPlaySystemSound。
2、震動
只需要調用AudioServicesPlaySystemSound()方法,傳入kSystemSoundID_Vibrate常量即可。
如果設備不支持震動(如iPad 2),那么也沒關系,只是不會震動。
三、AVFoundation framwork
對于壓縮的Audio文件,或者超過30秒的音頻文件,可以使用AVAudioPlayer類。
1、AVAudioPlayer也需要知道音頻文件的路徑;
2、這個類對應的AVAudioPlayerDelegate有兩個委托方法:
1)、audioDidFinishPlaying:successfully:當音頻播放完成之后觸發;
2)、audioPlayerEndInterruption:當程序被應用外部打斷后,重新回到應用程序的時候觸發。
四、MediaPlayer framwork
可以使用MPMoviePlayerController播放電影文件(好像只能播放H.264、MPEG-4 Part2 video格式),還可以播放互聯網上的視頻文件。