iOS可通過兩種方式播放聲音:
- 播放壓縮的聲音文件,比如mp3文件,一般使用播放聲音中提到的方法,適用於播放時間較長,比如大於30秒,AVAudioPlayer可以提供更多的控制特性,比如暫停等等
- 播放系統聲音,比如翻頁的嘩啦聲,應該使用播放系統聲音的方法,因為壓縮的聲音文件比播放wav等非壓縮聲音文件在播放前消耗更多的處理器資源,這樣的聲音還要頻繁的播放,而且,因為系統聲音文件都較小,一般小於30秒,因此即使壓縮格式,也不會節省多少存儲空間。
本文介紹后者,播放系統聲音。
系統聲音屬於AudioToolbox框架,因此使用前,需要給項目安裝框架:
另外,需要引用頭文件:
#import <AudioToolbox/AudioToolbox.h>
播放系統聲音,基本思路是:
- 在播放前,比如控制器初始化階段,注冊系統聲音,並保存一個系統聲音id
- 在需要播放系統聲音的時候只需調用系統服務的全局方法,傳入系統聲音id即可
注冊系統聲音,首先要創建實例變量,供后面播放時引用
SystemSoundID soundID;
然后,在比如控制器初始化代碼部分,加入:
NSURL *filePath = [[NSBundle mainBundle] URLForResource: @"pageflip" withExtension: @"aif"];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
這里的pageflip.aif是系統聲音允許的格式。還可以接受:
- caf
- wav
如果你有MP3文件,可以轉換成上述格式文件。我使用的是mac系統,臨時找的Switch,可在網站(http://www.nch.com.au/switch/index.html)上下載試用版。
播放聲音很簡單:
AudioServicesPlaySystemSound(soundID);
需要導入框架#import <AudioToolbox/AudioToolbox.h>
SystemSoundID sameViewSoundID;
NSString *thesoundFilePath = [[NSBundle mainBundle] pathForResource:@"Clap Crowd" ofType:@"caf"]; //音樂文件路徑
CFURLRef thesoundURL = (CFURLRef)[NSURL fileURLWithPath:thesoundFilePath];
AudioServesCreateSystemSoundID(thesoundURL, &sameViewSoundID);
//變量SoundID與URL對應
AudioServicesPlaySystemSound(sameViewSoundID); //播放SoundID聲音