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. ...
随机推荐
- AC日记——阶乘和 openjudge 1.6 15
15:阶乘和 总时间限制: 1000ms 内存限制: 65536kB 描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入正整 ...
- ADO.Net 增、删、改、查(综合练习)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Eclipse仿Visual AssistX 编辑着色插件
1. 风格下载 http://www.eclipsecolorthemes.org/?view=theme&id=4602 2. 风格的安装与卸载 http://www.cnblogs.com ...
- Convert.ToDateTime(值),方法可以把一个值转化成DateTime类型。
例子:将日历控件的值转化成DateTime类型. DateTime beginDate = Convert.ToDateTime(this.beginCalendar.EditValue);
- oracle round 函数,replace()函数
(1)如何使用 Oracle Round 函数 (四舍五入)描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果.SELECT ROUND( number, [ decimal_ ...
- ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现
from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...
- html post和get的区别
一直以来,都对这两个概念有一个感性的认识,今天总结一下: 1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据. 2.Get将表单中数据的按照variable=value的形式,添加 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- Linux wait函数详解
wait和waitpid出现的原因 SIGCHLD --当子进程退出的时候,内核会向父进程SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) --子进程退出时,内核将 ...
- getSelection、range 对象属性,方法理解,解释
网上转了一圈发现没有selection方面的解释,自己捣鼓下 以这段文字为例子.. <p><b>法国国营铁路公司(SNCF)20日承认,</b>新订购的2000列火 ...