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

原创 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...

MediaPlayer+SurfaceHolder播放工具类

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

Android游戏音效播放的工具类

  • 2014年03月29日 19:53
  • 42KB
  • 下载

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

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

音效工具类的封装

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

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

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

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

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

iOS视频拍摄和播放工具SKVideoManager

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

简单的封装了一个将java bean生成xml的一个工具类,运用了反射和泛型,重用性高。

package com.example.dbutil.utils; import java.io.StringWriter; import java.lang.reflect.Field; impo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:音效播放工具类的简单封装
举报原因:
原因补充:

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