#warning 有bug 更<pre name="code" class="objc">#import "AudioTool.h"
#import<AVFoundation/AVFoundation.h>
//工具类
@implementation AudioTool
//字典 filename:key soudID 作为value
static NSMutableDictionary *_soundIDDict;
//字典 存放所有的文件的播放器
//filename 作为key audioPlay作为value
static NSMutableDictionary *_audioPlayDict;
+(void)initialize
{
_soundIDDict = [NSMutableDictionary dictionary];
_audioPlayDict = [NSMutableDictionary dictionary];
}
+(void)playSound:(NSString *)filename
{
//1.从字典中取出soundID
if(!filename)return;
SystemSoundID soundID = [_soundIDDict[filename] unsignedIntValue];
if (!soundID) {
//加载音效文件
NSURL *url = [[NSBundle mainBundle]URLForResource:filename withExtension:nil];
if (!url) {
return;
}
//创建音效ID
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url),&soundID);
_soundIDDict[filename] = @(soundID);
}
//播放
AudioServicesPlaySystemSound(soundID);
}
+(void)disposeSound:(NSString *)filename
{
if(!filename)return;
SystemSoundID soundID = [_soundIDDict[filename] unsignedIntValue];
if (soundID) {
//销毁音效ID
AudioServicesDisposeSystemSoundID(soundID);
//从字典中移除
[_soundIDDict removeObjectForKey:filename];
}
}
/**
*
* 播放音乐
* @param filename
*/
+(void)playMusic:(NSString *)filename
{
//1.从字典中取出audioPlayer
if(!filename)return;
AVAudioPlayer *audioPlayer = _audioPlayDict[filename];
if (!audioPlayer) {
//加载音乐文件
NSURL *url = [[NSBundle mainBundle]URLForResource:filename withExtension:nil];
if (!url) {
return;
}
//创建audioPlayer
audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
//缓冲
[audioPlayer prepareToPlay];
//放入字典
_audioPlayDict[filename] = audioPlayer;
}
if (!audioPlayer) {
[audioPlayer play];
}
}
/**
*
* 暂停音乐
* @param filename
*/
+(void)pauseMusic:(NSString *)filename
{
//1.从字典中取出audioPlayer
if(!filename)return;
AVAudioPlayer *audioPlayer = _audioPlayDict[filename];
//2.暂停
if(audioPlayer.isPlaying){
[audioPlayer pause];
}
}
/**
*
* 停止音乐
* @param filename
*/
+(void)stopMusic:(NSString *)filename
{
//1.从字典中取出audioPlayer
if(!filename)return;
AVAudioPlayer *audioPlayer = _audioPlayDict[filename];
//2.暂停
if(audioPlayer.isPlaying){
[audioPlayer stop];
//直接销毁
[_audioPlayDict removeObjectForKey:filename];
}
}
@end
正#import <Foundation/Foundation.h>@interface AudioTool : NSObject/** * 播放音效 * * @param filename <#filename description#> */+(void)playSound:(NSString *)filename;/** * 销毁音效 * * @param filename <#filename description#> */+(void)disposeSound:(NSString *)filename;/** * * 播放音乐 * @param filename */+(void)playMusic:(NSString *)filename;/** * * 暂停音乐 * @param filename */+(void)pauseMusic:(NSString *)filename;/** * * 停止音乐 * @param filename */+(void)stopMusic:(NSString *)filename;@end