1尼变、音效播放的一般步驟:
AudioServicesPlaySystemSound和AudioServicesPlayAlertSound方法的異同:
相同點:都可以同時播放多個音效
不同點:AudioServicesPlayAlertSound這個方法播放音效有震動利凑,另一個方法沒有
//定義soundID,并先賦值為0
SystemSoundID soundID = 0;
//獲取要播放音效的URL
NSURL *url = [[NSBundle mainBundle] URLForResource:@"lose.aac" withExtension:nil];
//將音效的URL橋接為CFURLRef類型的URL
CFURLRef urlRef = (__bridge CFURLRef)(url);
//根據(jù)音效urlRef生成對應(yīng)的SystemSoundID(傳soundID的地址嫌术,生成之后會根據(jù)地址找到它并給它賦值)
AudioServicesCreateSystemSoundID(urlRef, &soundID);
//播放音效
AudioServicesPlaySystemSound(soundID);
// AudioServicesPlayAlertSound(soundID);
// 上面兩個方法的方法的異同點:
// 相同點:都可以同時播放多個音效
// 不同點:AudioServicesPlayAlertSound這個方法播放音效有震動哀澈,另一個方法沒有
2、一個界面多個音效
如果一個界面有多個音效需要播放度气,那么就需要定義一個可變字典割按,保存每個音效對應(yīng)的soundID。每次播放都會從字典中找對應(yīng)的soundID磷籍,這樣就不用每次都創(chuàng)建一個soundID了适荣。
@interface ViewController ()
/** 可變字典现柠,保存音效ID */
@property (nonatomic, strong) NSMutableDictionary * soundIDs;
@end
可以播放音效抽取成一個方法,在需要播放的時候直接傳入音效名稱參數(shù)調(diào)用方法就可以播放
-(void) playSoundWithSoundName:(NSString *)soundName
{
//定義soundID弛矛,并先賦值為0
SystemSoundID soundID = 0;
//先從字典中取出soundID
soundID = [self.soundIDs[soundName] unsignedIntValue];
//如果從字典獲取不到soundName對應(yīng)的soundID够吩,就創(chuàng)建soundID
if (soundID == 0)
{
//加載音效的URL
NSURL *url = [[NSBundle mainBundle] URLForResource:soundName withExtension:nil];
//將音效的URL橋接為CFURLRef類型的URL
CFURLRef urlRef = (__bridge CFURLRef)(url);
//根據(jù)音效URL生成對應(yīng)的SystemSoundID(傳soundID的地址,生成之后會根據(jù)地址找到它丈氓,并賦值)
AudioServicesCreateSystemSoundID(urlRef, &soundID);
//將這個soundID保存到字典
[self.soundIDs setValue:@(soundID) forKey:soundName];
}
//播放音效
AudioServicesPlaySystemSound(soundID);
}
3周循、封裝播放音效工具類
如果想在整個app內(nèi)調(diào)用播放音效的方法,那么可以創(chuàng)建一個播放音效工具類万俗。在需要播放音效的控制器直接導入頭文件湾笛,調(diào)用播放音效的類方法即可。
-
第一步:創(chuàng)建工具類
第2步:定義一個靜態(tài)可變字典保存soundID
由于提供的是類方法來播放音效该编,但類方法不能訪問成員屬性迄本,所以不能將保存soundID的字典定義為成員屬性硕淑,只能
定義為靜態(tài)變量
课竣,還要對這個可變字典通過懶加載進行初始化
static NSMutableDictionary *_soundIDs;
+ (NSMutableDictionary *) soundIDs
{
if (_soundIDs == nil)
{
_soundIDs = [NSMutableDictionary dictionary];
}
return _soundIDs;
}
-
第3步:在.h文件提供一個播放音效的方法接口
@interface PlayAudioTool : NSObject /** 提供類方法播放音效 */ +(void) playAudioWithAudioName:(NSString *)audioName; @end
-
第4步:實現(xiàn)播放音效的方法
//播放音效的類方法 +(void)playAudioWithAudioName:(NSString *)audioName { //定義soundID,并先賦值為0 SystemSoundID soundID = 0; //先從字典中取出soundID soundID = [self.soundIDs[audioName] unsignedIntValue]; //如果從字典獲取不到audioName對應(yīng)的soundID置媳,就創(chuàng)建soundID if (soundID == 0) { //加載音效的URL NSURL *url = [[NSBundle mainBundle] URLForResource:audioName withExtension:nil]; //將音效的URL橋接為CFURLRef類型的URL CFURLRef urlRef = (__bridge CFURLRef)(url); //根據(jù)音效url生成對應(yīng)的SystemSoundID(傳soundID的地址于樟,生成之后會根據(jù)地址找到它,并賦值) AudioServicesCreateSystemSoundID(urlRef, &soundID); //將這個soundID保存到字典 [self.soundIDs setValue:@(soundID) forKey:audioName]; } //播放音效 AudioServicesPlaySystemSound(soundID); }