自定义Audio工具类
来源:互联网 发布:生物大数据 精准医疗 编辑:程序博客网 时间:2024/05/18 21:43
播放/销毁音效
播放/暂停/停止音乐
#import "ZGAudioTool.h"#import <AVFoundation/AVFoundation.h>@implementation ZGAudioToolstatic NSMutableDictionary *_soundIDs;static NSMutableDictionary *_players;+ (NSMutableDictionary *)soundIDs{ if (!_soundIDs) { _soundIDs = [NSMutableDictionary dictionary]; } return _soundIDs;}+ (NSMutableDictionary *)players{ if (!_players) { _players = [NSMutableDictionary dictionary]; } return _players;}+ (void)playAudioWithFilename:(NSString *)filename{ // 0.判断文件名是否为nil if (filename == nil) { return; } // 1.从字典中取出音效ID SystemSoundID soundID = [[self soundIDs][filename] unsignedIntValue]; // 判断音效ID是否为nil if (!soundID) { NSLog(@"创建新的soundID"); // 音效ID为nil // 根据文件名称加载音效URL NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; // 判断url是否为nil if (!url) { return; } // 创建音效ID AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); // 将音效ID添加到字典中 [self soundIDs][filename] = @(soundID); } // 播放音效 AudioServicesPlaySystemSound(soundID);}+ (void)disposeAudioWithFilename:(NSString *)filename{ // 0.判断文件名是否为nil if (filename == nil) { return; } // 1.从字典中取出音效ID SystemSoundID soundID = [[self soundIDs][filename] unsignedIntValue]; if (soundID) { // 2.销毁音效ID AudioServicesDisposeSystemSoundID(soundID); // 3.从字典中移除已经销毁的音效ID [[self soundIDs] removeObjectForKey:filename]; }}// 根据音乐文件名称播放音乐+ (AVAudioPlayer *)playMusicWithFilename:(NSString *)filename{ // 0.判断文件名是否为nil if (filename == nil) { return nil; } // 1.从字典中取出播放器 AVAudioPlayer *player = [self players][filename]; // 2.判断播放器是否为nil if (!player) { NSLog(@"创建新的播放器"); // 2.1根据文件名称加载音效URL NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; // 2.2判断url是否为nil if (!url) { return nil; } // 2.3创建播放器 player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; // 2.4准备播放 if(![player prepareToPlay]) { return nil; } // 允许快进 player.enableRate = YES; player.rate = 3; // 2.5将播放器添加到字典中 [self players][filename] = player; } // 3.播放音乐 if (!player.playing) { [player play]; } return player;}// 根据音乐文件名称暂停音乐+ (void)pauseMusicWithFilename:(NSString *)filename{ // 0.判断文件名是否为nil if (filename == nil) { return; } // 1.从字典中取出播放器 AVAudioPlayer *player = [self players][filename]; // 2.判断播放器是否存在 if(player) { // 2.1判断是否正在播放 if (player.playing) { // 暂停 [player pause]; } }}// 根据音乐文件名称停止音乐+ (void)stopMusicWithFilename:(NSString *)filename{ // 0.判断文件名是否为nil if (filename == nil) { return; } // 1.从字典中取出播放器 AVAudioPlayer *player = [self players][filename]; // 2.判断播放器是否为nil if (player) { // 2.1停止播放 [player stop]; // 2.2清空播放器// player = nil; // 2.3从字典中移除播放器 [[self players] removeObjectForKey:filename]; }}@end
0 0
- 自定义Audio工具类
- react---自定义audio组件
- HTML5 Audio自定义播放控制
- 自定义HTML5 audio 播放器
- html5 audio 自定义播放器
- 自定义LogUtils工具类
- 自定义HttpClient工具类
- 自定义HttpURLConnection工具类
- 自定义日志工具类
- UtilTools 自定义工具类
- ios自定义工具类
- 自定义dialog+工具类
- 工具类:自定义 pickerView
- 自定义时间工具类
- 自定义录音工具类
- 自定义时间工具类
- 自定义Toast工具类
- java自定义工具类
- 108 - Maximum Sum
- java中字符串常量池的用法
- shell实战(一)——模拟Jenkins任务,实现简单的git自动部署
- 斜率优化DP和四边形不等式优化DP整理
- 【41-45】剑指offer
- 自定义Audio工具类
- 数据结构实验:连通分量个数
- Android开发内存管理之道
- 批处理文件
- java--html(6)框架
- 从Gallery中获取照片并且将图片Size调整到合适手机尺寸
- Pro Android学习笔记(六五):安全和权限(2):权限和自定义权限
- c# socket 服务器端如何判断客户端掉线
- 数据Spark “蘑菇云”行动Hadoop实战速成之路第30课:Hadoop在Eclipse下的编程实战