1.通用短音效ID的获取
#import <Foundation/Foundation.h>

@interface MJAudioTool : NSObject

/**
* 播放音效
*
* @param filename 音效文件名
*/
+ (void)playSound:(NSString *)filename; /**
* 销毁音效
*
* @param filename 音效文件名
*/
+ (void)disposeSound:(NSString *)filename;
@end
#import "MJAudioTool.h"
#import <AVFoundation/AVFoundation.h> @implementation MJAudioTool // 字典: filename作为key, soundID作为value
// 存放所有的音频ID
static NSMutableDictionary *_soundIDDict;
+ (void)initialize
{
_soundIDDict = [NSMutableDictionary dictionary];
} + (void)playSound:(NSString *)filename
{
if (!filename) return; // 1.从字典中取出soundID
SystemSoundID soundID = [_soundIDDict[filename] unsignedLongValue];
if (!soundID) { // 创建
// 加载音效文件
NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; if (!url) return; // 创建音效ID
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID); // 放入字典
_soundIDDict[filename] = @(soundID);
} // 2.播放
AudioServicesPlaySystemSound(soundID);
} + (void)disposeSound:(NSString *)filename
{
if (!filename) return; SystemSoundID soundID = [_soundIDDict[filename] unsignedLongValue];
if (soundID) {
// 销毁音效ID
AudioServicesDisposeSystemSoundID(soundID); // 从字典中移除
[_soundIDDict removeObjectForKey:filename];
}
} @end

2.通用方法的使用

[MJAudioTool playSound:@"buyao.wav"];

最新文章

  1. 2017年1月1日 java学习第二天复习
  2. 查看Android应用签名信息
  3. Android ADB server didn&#39;t ACK * failed to start daemon * 简单有效的解决方案
  4. 谷歌三大核心技术(三)Google BigTable中文版
  5. The JSR-133 Cookbook for Compiler Writers(an unofficial guide to implementing the new JMM)
  6. 利用jink调试程序,时间不准的解决办法
  7. [Spark] - SparkCore程序优化总结
  8. cuda内存总结
  9. NameError: name &#39;messagebox&#39; is not defined 错误处理
  10. 理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错
  11. UNIX网络编程——通用套接字选项
  12. http://zaojiasys.jianshe99.com 建造师数据泄漏,可以查看全部所有人的信息!
  13. 更改/var/log/messages默认权限
  14. [Maven]Maven如何得到单独的单元测试报告
  15. Spark性能优化【OOM】
  16. Vue的介绍及基础指令
  17. 七周七语言之Ruby
  18. 几个OOD概念
  19. error.jsp错误页面跳转,统一异常处理
  20. [K8S]kubeadm国内镜像安装方式

热门文章

  1. FreeMarker数据模板引擎全面教程mark
  2. idea 自定义工具栏
  3. ftrace笔记
  4. commons.apache
  5. stm32f103和s3c2440配置
  6. 关于SIP一些总结
  7. ORACLE 内部原理
  8. System.IO.Ports.SerialPort串口通信接收完整数据
  9. 使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程
  10. influxDB的安装和简单使用