IOS开发基础之音频工具类封装AVAudioPlayer

源码在我的主页下面 ,项目名称是AVAudioPlayer

关键性代码
工具类的封装

//
//  LJAudioTool.h
//  AVAudioPlayer
//
//  Created by 鲁军 on 2021/4/23.
//#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface LJAudioTool : NSObject
+(BOOL)playMusic:(NSString*)filename;
+(void)pauseMusic:(NSString*)filename;
+(void)stopMusic:(NSString*)filename;
+(void)playSound:(NSString*)filename;
+(void)disposeSound:(NSString*)filename;
@endNS_ASSUME_NONNULL_END
//
//  LJAudioTool.m
//  AVAudioPlayer
//
//  Created by 鲁军 on 2021/4/23.
//
#import "LJAudioTool.h"
#import <AVFoundation/AVFoundation.h>
@implementation LJAudioTool
static NSMutableDictionary *_soundIDs;
+(NSMutableDictionary *)soundIDs{if(!_soundIDs){_soundIDs = [NSMutableDictionary dictionary];}return _soundIDs;
}
+(void)playSound:(NSString*)filename{if(!filename) return;SystemSoundID soundID = [[self soundIDs][filename] unsignedIntValue];if(!soundID){NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];if(!url) return;OSStatus status=AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);NSLog(@"%d",status);  //0 代表成功[self soundIDs][filename] = @(soundID);}//播放AudioServicesPlaySystemSound(soundID);
}+(void)disposeSound:(NSString*)filename{if(!filename) return;SystemSoundID soundID = [[self soundIDs][filename] unsignedIntValue];if(soundID){AudioServicesDisposeSystemSoundID(soundID);[[self soundIDs] removeObjectForKey:filename];}
}
static NSMutableDictionary *_musicPlayers;
+(NSMutableDictionary *)musicPlayers{if(!_musicPlayers){_musicPlayers = [NSMutableDictionary dictionary];}return _musicPlayers;
}
+ (BOOL)playMusic:(NSString *)filename{if(!filename) return NO;AVAudioPlayer *player = [self musicPlayers][filename];if(!player){NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];if(!url) return NO;player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];if(![player prepareToPlay]) return NO;[self musicPlayers][filename]=player;}if(!player.isPlaying){return [player play];}return YES;
}
+ (void)pauseMusic:(NSString *)filename{if(!filename) return;AVAudioPlayer * player = [self musicPlayers][filename];if(player.isPlaying){[player pause];}
}
+ (void)stopMusic:(NSString *)filename{if(!filename) return;AVAudioPlayer * player = [self musicPlayers][filename];[player stop];[[self musicPlayers] removeObjectForKey:filename];
}
@end
//
//  ViewController.m
//  AVAudioPlayer
//
//  Created by 鲁军 on 2021/4/23.
//
#import "ViewController.h"
#import "LJAudioTool.h"
@interface ViewController ()
@property(nonatomic,strong)NSArray *songs;
@property(nonatomic,assign)int currentIndex;
@end
@implementation ViewController
- (NSArray *)songs{if(!_songs){self.songs = @[@"309769.mp3",@"235319.mp3",@"120125029.mp3"];}return _songs;
}
- (IBAction)play:(id)sender {//    [LJAudioTool playMusic:self.songs[self.currentIndex]];[LJAudioTool playSound:@"buyao.wav"];
}
- (IBAction)pause:(id)sender {[LJAudioTool pauseMusic:self.songs[self.currentIndex]];
}
- (IBAction)stop:(id)sender {[LJAudioTool stopMusic:self.songs[self.currentIndex]];
}
- (IBAction)next:(id)sender {//    [LJAudioTool stopMusic:self.songs[self.currentIndex]];[self stop:nil];self.currentIndex++;if(self.currentIndex>=self.songs.count){self.currentIndex = 0;}[self play:nil];
//    [LJAudioTool playMusic:self.songs[self.currentIndex]];
}
- (void)viewDidLoad {[super viewDidLoad];
}
@end

IOS开发基础之音频工具类封装AVAudioPlayer相关推荐

  1. iOS微信支付接入以及工具类封装

    在刚刚结束的一个项目中用到了微信支付,从接入微信支付到工具类的封装,在本文中做个积累,方便日后使用. 1.开始接入微信支付的准备工作 首先你需要去微信开放平台注册账号,在这里要吐槽一下,不知道这个微信 ...

  2. IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天

    IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天 视频资料是2015年的,但是AFN是导入框架的关键文件,我尝试使用cocoapods安装最新的AFN,虽然成功了,但是版本太高, ...

  3. iOS开发拓展篇—音频处理(音乐播放器3)

    iOS开发拓展篇-音频处理(音乐播放器3) 说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewCont ...

  4. iOS开发基础知识--碎片44

    iOS开发基础知识--碎片44  iOS开发基础知识--碎片44 1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = ...

  5. IOS开发基础之微博项目第1天-OC版

    IOS开发基础之微博项目第1天-OC版 纯代码创建的项目,具有参考价值 该资料来自2014年7月3号,虽然时间过去较长,但是oc和swift不同,oc语法迭代更新慢 具有一定的参考意义 涉及xib加载 ...

  6. 项目开发工作总结(工具类、图表组件等)

    一.前言 转眼间,来目前这家公司工作已经近一年了,虽然在这一年中有过很多抱怨(主要是关于产品.设计),但也收获良多.疫情期间,天灾人祸,人要生存,同样的公司也要,于是理所应当的一系列猛如虎的操作--以 ...

  7. python如何设计工具类_Python基础之自定义工具类

    class ListHelper: @staticmethod def find_all(target, func_condition): """ 查找列表中满足条件的所 ...

  8. iOS开发基础-九宫格坐标(4)

    对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...

  9. IOS开发基础之网易新闻UICollectionView的使用第3天

    IOS开发基础之网易新闻UICollectionView的使用第3天 由于第3天的UICollectionView 并不实现,我查阅相关资料,也没解决,先从本地的plist加载的数据,不是网络的上的数 ...

最新文章

  1. JavaScript面向对象修改标签页详解
  2. 启动多个pid_西门子S7-300PLC实现PID控制
  3. 白牌交换机有什么特点?与传统换机相比有什么特别之处?
  4. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测
  5. 阿里技术嘉年华-aDev内容感悟
  6. 多服务器文件共享,windows多台服务器文件共享
  7. eclipse快速定位java对应的class
  8. 深入理解脚本化CSS系列第二篇——查询计算样式
  9. LeetCode 522. 最长特殊序列 II
  10. 怎么做最棒的有效外链
  11. java兵乓球队问题_Java两个乒乓球队比赛名单问题(判断素数)
  12. CentOS6.5使用rsync远程同步
  13. 【ETWVRP】基于matlab遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1221期】
  14. liunx系统文件中转站(ftp服务)项目
  15. logistic回归 如何_Logistic回归分析之二元Logistic回归
  16. hp linux还原系统还原,酷越一键备份还原 惠普电脑系统还原
  17. hprose php用户手册,04 协程 - 《Hprose for PHP 用户手册》 - 书栈网 · BookStack
  18. iOS 一键加入QQ群(项目常用)
  19. 转 纸牌屋1-4集分析
  20. 2021-10-20:分数到小数。给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。输入: num

热门文章

  1. 微脉java面试,微脉医疗开放平台
  2. 双柱状图柱子数量比较多_一条代码完成堆叠柱状图-冲击图的操作-终结版
  3. python输入框_selenium+python 对输入框的输入处理方法
  4. logback配置文件详解_Log4j2使用详解
  5. 收藏!5V转3.3V电平的19种方法技巧
  6. 2021龙岩一中高考成绩查询,喜报!2020年高考成绩已经揭晓,龙岩这七所一中,看看有没有你的母校!...
  7. HBase数据迁移到Kafka实战
  8. Javascript中使用正则表达式进行数据验证
  9. PJzhang:英国通信总部GCHQ开源产品-网络瑞士军刀CyberChef
  10. 分块入门(根据hzwer的博客。。)(右端点是r不是n。。)