播放音效

播放本地音效有很多种方式,这里简单介绍两种,分别是AVAudioPlayer和System Sound Services播放系统的音效。这里简单的把这两种方式封装在了一起。

创建一个AutioTool工具类

AutioTool.h
#import 

@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 
@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);

}

你可能感兴趣的:(播放音效)