音效播放工具类的简单封装

原创 2015年11月18日 21:09:05
//
//  AudioTool.h
//  工具类

#import <Foundation/Foundation.h>

@interface AudioTool : NSObject

/**
 *  播放音效
 *
 *  @param filename 音效文件名
 */
+ (void)playSound:(NSString *)filename;

/**
 *  销毁音效
 *
 *  @param filename 音效文件名
 */
+ (void)disposeSound:(NSString *)filename;
@end

//
//  AudioTool.m


#import "AudioTool.h"
#import <AVFoundation/AVFoundation.h>

@implementation AudioTool

//字典 filename作为key,soundID作为value
//存放所有的音效ID
static NSMutableDictionary *_soundIDDict;

/**
 *  初始化
 */
+ (void)initialize
{
    _soundIDDict = [NSMutableDictionary dictionary];
}

/**
 *  播放音效
 *
 *  @param filename 音效文件名
 */
+ (void)playSound:(NSString *)filename
{
    if (!filename) return;
    
    //1.从字典中取出soundID
    SystemSoundID soundID = [_soundIDDict[filename] unsignedIntValue];
    if (!soundID) { //创建
        
        //加载音效文件
        NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
        if(!url) return;
        
        //创建音效ID
        AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);
        
        //存入字典
        _soundIDDict[filename] = @(soundID);
    }
   
    
    //2.播放
    AudioServicesPlaySystemSound(soundID);
    
}

/**
 *  销毁音效
 *
 *  @param filename 音效文件名
 */
+ (void)disposeSound:(NSString *)filename
{
    if (!filename) return;

    SystemSoundID soundID = [_soundIDDict[filename] unsignedIntValue];
    if (!soundID) {
        //销毁音效ID
        AudioServicesDisposeSystemSoundID(soundID);
        
        //从字典中移除
        [_soundIDDict removeObjectForKey:filename];
    }

}

@end

使用:

//
//  ViewController.m


#import "ViewController.h"
#import "AudioTool.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //播放
    [AudioTool playSound:@"m_03.wav"];
    [AudioTool playSound:@"m_04.wav"];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    
    //销毁音频ID
    [AudioTool disposeSound:@"m_03.wav"];
}

@end


版权声明: 举报

相关文章推荐

iOS开发拓展篇—封装音频文件播放工具类

iOS开发拓展篇—封装音频文件播放工具类 一、简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法   加...

android 音乐播放工具类MediaPlayer

上代码public class Player implements OnBufferingUpdateListener, OnCompletionListener, OnPrepare...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

MediaPlayer+SurfaceHolder播放工具类

在公司写了个MediaPlayer+SurfaceHolder工具类,用来播放本地视频,支持seekbar定位播放 特地做个笔记,如果有写的不好的地方,欢迎指出,我会及时改正。 直接上代码: pack...

音乐/音效之工具类的封装

您好。 今天。虾米主要还是实现一个关于音频/音效的工具类的封装。 也是为之后能写一个关于音乐播放器做的一层简单的封装。 不过主要目的还是在类的封装上。 如果有哪些需要改进的,请留下您的建议或联系...

音效工具类的封装

音效工具类的封装@(实用技术)[AVFoundation]分析 音效工具类的职责与便利性 能够记录音效文件的SoundID,无需每一次播报音效的时候都需要重新获取 能够对存放在系统中的SoundID...

(九十五)音效播放方法和工具类的制作

音效通过AVFoundation框架实现,是通过函数而不是方法,因此需要进行桥接等操作,具体步骤如下。 进行音效播放,首先要得到音效的URL(只能是本地音频),然后转换为音效ID(唯一),通过ID播...

tcpreplay(常用的测试流量 播放工具)

类似的播放的性质,将已经录好的pcap包,按照自己的定制方法(如播放次数、播放速度、指定端口等信息)播放流量 下载链接地址(可以官网下载,这里提供自己的网盘):http://pan.baidu.c...

iOS视频拍摄和播放工具SKVideoManager

SKVideoManager自定义的一个以AVFoundation框架类为基础的iOS视频拍摄和播放管理者 – github地址 包含一个拍摄和一个播放的工具,工具只提供API处理视频的各类事件,...

【Android】封装一个简单好用的打印Log的工具类

不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题: 0.如何在众多log中快速找到你设置打印的那行log? 1.是否还在不断的切换标签来查看使用不同TAG标签打印的log? ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)