iOS开发--音乐文件播放工具类的封装(包含了音效的封装)

一.头文件
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h> @interface ChaosAudioTool : NSObject #pragma mark - 播放音乐
// 播放音乐 musicName : 音乐的名称
+ (AVAudioPlayer *)playMusicWithMusicName:(NSString *)musicName;
// 暂停音乐 musicName : 音乐的名称
+ (void)pauseMusicWithMusicName:(NSString *)musicName;
// 停止音乐 musicName : 音乐的名称
+ (void)stopMusicWithMusicName:(NSString *)musicName; #pragma mark - 音效播放
// 播放声音文件soundName : 音效文件的名称
+ (void)playSoundWithSoundname:(NSString *)soundname; @end
二..m文件方法的实现
#import "ChaosAudioTool.h" @implementation ChaosAudioTool static NSMutableDictionary *_soundIDs;
static NSMutableDictionary *_players; + (void)initialize
{
_soundIDs = [NSMutableDictionary dictionary];
_players = [NSMutableDictionary dictionary];
} + (AVAudioPlayer *)playMusicWithMusicName:(NSString *)musicName
{
assert(musicName); // 1.定义播放器
AVAudioPlayer *player = nil; // 2.从字典中取player,如果取出出来是空,则对应创建对应的播放器
player = _players[musicName];
if (player == nil) {
// 2.1.获取对应音乐资源
NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:musicName withExtension:nil]; if (fileUrl == nil) return nil; // 2.2.创建对应的播放器
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:nil]; // 2.3.将player存入字典中
[_players setObject:player forKey:musicName]; // 2.4.准备播放
[player prepareToPlay];
} // 3.播放音乐
[player play]; return player;
} + (void)pauseMusicWithMusicName:(NSString *)musicName
{
assert(musicName); // 1.取出对应的播放
AVAudioPlayer *player = _players[musicName]; // 2.判断player是否nil
if (player) {
[player pause];
}
} + (void)stopMusicWithMusicName:(NSString *)musicName
{
assert(musicName); // 1.取出对应的播放
AVAudioPlayer *player = _players[musicName]; // 2.判断player是否nil
if (player) {
[player stop];
[_players removeObjectForKey:musicName];
player = nil;
}
} #pragma mark - 音效的播放
+ (void)playSoundWithSoundname:(NSString *)soundname
{
// 1.定义SystemSoundID
SystemSoundID soundID = ; // 2.从字典中取出对应soundID,如果取出是nil,表示之前没有存放在字典
soundID = [_soundIDs[soundname] unsignedIntValue];
if (soundID == ) {
CFURLRef url = (__bridge CFURLRef)[[NSBundle mainBundle] URLForResource:soundname withExtension:nil]; if (url == NULL) return; AudioServicesCreateSystemSoundID(url, &soundID); // 将soundID存入字典
[_soundIDs setObject:@(soundID) forKey:soundname];
} // 3.播放音效
AudioServicesPlaySystemSound(soundID);
} @end
iOS开发--音乐文件播放工具类的封装(包含了音效的封装)的更多相关文章
- iOS开发拓展篇—封装音频文件播放工具类
iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...
- iOS开发—音乐的播放
iOS开发—音乐的播放 一.简单说明 音乐播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件. 注意: (1)该类(AVAudioPlayer)只能用于播放本地音频. ...
- iOS开发之音频播放AVAudioPlayer 类的介绍
主要提供以下了几种播放音频的方法: 1. System Sound Services System Sound Services是最底层也是最简单的声音播放服务,调用 AudioServicesPla ...
- fir.im Weekly - 17 个提升 iOS 开发效率的必备工具
本期 fir.im Weekly 精选了一些iOS 开发工具和动画源码分享,希望每个开发者能专注效率.实用.灵感. iOS开发工具--如何优化ipa包大小 @iOS程序犭袁 推荐了关于"如 ...
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- 文件类型工具类:FileTypeUtil
个人学习,仅供参考! package com.example.administrator.filemanager.utils;import java.io.File;/** * 文件类型工具类 * * ...
- 文件夹工具类 - FolderUtils
文件夹工具类,提供创建完整路径的方法. 源码如下:(点击下载 -FolderUtils.java .commons-io-2.4.jar ) import java.io.File; import o ...
- java文件处理工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...
- 写文件的工具类,输出有格式的文件(txt、json/csv)
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...
随机推荐
- Hibernate之组件映射
1:为什么要使用组件映射 答:建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系.以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息 ...
- python魔法函数的一些疑问
看了魔法函数,有一点疑问.1中需要用self.word才能执行,而2直接用self就可以执行.而1中Word继承了int基本类型,但在__new__时并没有什么卵用.当用 Word(“123”)来实例 ...
- XMAPP配置
F:\xmapp\apache\conf\extra httpd-vhosts.conf peizhi##<VirtualHost *:80> ## DocumentRoot " ...
- C#加密解密大全
1.方法一 (不可逆加密) public string EncryptPassword(string PasswordString,string PasswordFormat ) { ...
- spring mvc4的日期/数字格式化、枚举转换
日期.数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试: package com.cnblogs.yjmyzz.test; i ...
- oracle 11g的企业管理器
oracle 11g的企业管理器不同于其他版本,它是B/S的,默认登录为:https://localhost:1158/em,但我试了IE8跟360浏览器都不行,谷歌浏览器是可以访问的
- JSP 4个域对象-9个内置对象-11个EL隐式对象
一. 四大域对象 1. PageContext :页面范围的数据 2. ServletRequest:请求范围的数据 3. HttpSession:会话范围的数据 4. ServletContext: ...
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- js中什么时候回考虑用call或者apply
这里我说出自己的浅薄的理解,希望大家可以共鸣! call一些装逼的用法: call的用法通常在两个地方会用到, 1.需要加一个层的时候,也可以不准确的说继承的时候,继承是继承父类的属性或者方法,而ao ...
- C#:异步编程和线程的使用(.NET 4.5 )
摘自:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N(葡萄城 ...