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

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


android 背景音乐 及音效播放工具类

public class MusicPlayer implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener { ...
  • liudao7994
  • liudao7994
  • 2016年05月27日 13:52
  • 431

封装音频文件播放工具类

一、简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法   加载音乐文件 - (id)initWithC...
  • ljl5125
  • ljl5125
  • 2016年05月22日 02:18
  • 223

音效工具类的封装

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

android 音乐播放工具类MediaPlayer

上代码public class Player implements OnBufferingUpdateListener, OnCompletionListener, OnPrepare...
  • liudao7994
  • liudao7994
  • 2016年05月27日 13:43
  • 1083

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

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

iOS开发—03封装音频文件播放工具类

一、简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法   加载音乐文件 - (id)initWithConten...
  • gaojq_ios
  • gaojq_ios
  • 2015年06月07日 22:07
  • 491

iOS- 优化与封装 APP音效的播放

1.关于音效                     音效又称短音频,是一个声音文件,在应用程序中起到点缀效果,用于提升应用程序的整体用户体验。   我们手机里常见的APP几乎都少不...
  • ys410900345
  • ys410900345
  • 2015年01月31日 17:05
  • 1454

自己用js封装的一些简单效果

自己用js封装的一些简单效果
  • qq_19318067
  • qq_19318067
  • 2016年07月14日 11:40
  • 1098

NoHttp的封装

实现NoHttp的封装 关于NoHttp的依赖和初始化请看http://blog.csdn.net/hatsune39/article/details/53609601 1.自定义一个进度条对话框...
  • hatsune39
  • hatsune39
  • 2016年12月14日 17:10
  • 589

封装简单curl类

封装简单curl类
  • qq_36031499
  • qq_36031499
  • 2016年09月06日 08:58
  • 853
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:音效播放工具类的简单封装
举报原因:
原因补充:

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