播放本地音效有很多种方式,这里简单介绍两种,分别是AVAudioPlayer和System Sound Services播放系统的音效。这里简单的把这两种方式封装在了一起。
创建一个AutioTool工具类
AutioTool.h
#import <Foundation/Foundation.h>
@interface AutioTool : NSObject
/* 播放音效 */
+ (void)playRecoding:(NSString *)recodName;
/* 播放音效 */
+ (void)playMusic:(NSString *)musicName;
/* 暂停音效 */
+ (void)pausePlayMusic:(NSString *)musicName;
/* 停止音效 */
+ (void)stopPlayMusic:(NSString *)musicName;
@end
AutioTool.m
#import "AutioTool.h"
#import <AVFoundation/AVFoundation.h>
@implementation AutioTool
static NSMutableDictionary *_soundIDs;
static NSMutableDictionary *_players;
+ (void)initialize
{
_players = [NSMutableDictionary dictionary];
}
_players是一个可变字典,存放播放器的,目的是为了避免存在多个播放器,而导致创建多个播放器,而使用这一个字典,就可以只创建一个播放器了。
一: AVAudioPlayer播放
播放音乐
+ (void)playMusic:(NSString *)musicName{
// 1.定义播放器
NSError *error = nil;
AVAudioPlayer *audioPlayer = nil;
audioPlayer = _players[musicName];
if (audioPlayer == nil) {
// 2.1 获取音效资源
NSURL *url = [[NSBundle mainBundle] URLForResource:musicName withExtension:nil];
if (url == nil) return;
// 2.2 创建音效播放器
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
// 2.3 将audioPlayer存入字典
[_players setValue:audioPlayer forKey:musicName];
// 2.4 准备播放
[audioPlayer prepareToPlay];
}
// 3.播放
[audioPlayer play];
}
暂停音效
+ (void)pausePlayMusic:(NSString *)musicName{
// 1. 取出对应播放器
AVAudioPlayer *audioPlayer = _players[musicName];
// 2.判断播放器是否存在
if (audioPlayer) {
[audioPlayer pause];
}
}
停止音乐
+ (void)stopPlayMusic:(NSString *)musicName{
// 1. 取出对应播放器
AVAudioPlayer *audioPlayer = _players[musicName];
// 2.判断播放器是否存在
if (audioPlayer) {
[audioPlayer stop];
[_players removeObjectForKey:musicName];
audioPlayer = nil;
}
}
二:System Sound Services播放系统的音效
+ (void)playRecoding:(NSString *)recodName{
SystemSoundID soundID = 0;
soundID = [_soundIDs[recodName] unsignedIntValue];
if (soundID == 0) {
CFURLRef url = (__bridge CFURLRef)[[NSBundle mainBundle] URLForResource:recodName withExtension:nil];
AudioServicesCreateSystemSoundID(url, &soundID);
[_soundIDs setObject:@(soundID) forKey:recodName];
}
AudioServicesPlaySystemSound(soundID);
}
网友评论