音乐/音效之工具类的封装
来源:互联网 发布:类似余罪的网络剧 编辑:程序博客网 时间:2024/04/29 14:24
您好。
今天。虾米主要还是实现一个关于音频/音效的工具类的封装。 也是为之后能写一个关于音乐播放器做的一层简单的封装。
不过主要目的还是在类的封装上。
如果有哪些需要改进的,请留下您的建议或联系虾米。再次感谢!!^-^
本人用一个继承自NSObjec的JHAudioTool类,并提供关于音乐/音效文件的程序接口。实现代码如下:
//// JHAudioTool.h// AVAudioPlayer//// Created by cjj on 15-10-3.// Copyright (c) 2015年 jh.chen. All rights reserved.//#import <Foundation/Foundation.h>@interface JHAudioTool : NSObject/** 播放音乐*/+ (BOOL) playMusic:(NSString *)filename;/** 暂停音乐*/+(void) pauseMusic:(NSString *)filename;/** 停止音乐*/+(void) stopMusic:(NSString *)filename;/** 播放音效*/+ (void)playSound:(NSString *)filename;/** 销毁音效*/+ (void)disposeSound:(NSString *)filename;@end//// JHAudioTool.m// AVAudioPlayer//// Created by cjj on 15-10-3.// Copyright (c) 2015年 jh.chen. All rights reserved.//#import "JHAudioTool.h"#import <AVFoundation/AVFoundation.h>@implementation JHAudioTool/** * 用字典存放所有的音乐播放器 */static NSMutableDictionary *_musicPlays;+ (NSMutableDictionary *) musicPlayers{ if (_musicPlays == nil) { _musicPlays = [NSMutableDictionary dictionary]; } return _musicPlays;}/** * 用字典存放所有的音效 */static NSMutableDictionary *_soundIDs;+ (NSMutableDictionary *)soundIDs{ if (_soundIDs == nil) { _soundIDs = [NSMutableDictionary dictionary]; } return _soundIDs;}/** 播放音乐 * @param filename 音乐的文件名 */+ (BOOL)playMusic:(NSString *)filename{ if(filename == nil) return NO; // 1.取出对应的播放器 AVAudioPlayer *player = [self musicPlayers][filename]; // 2.播放器没有创建,进行初始化 if(player == nil) { NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; if(url == nil) return NO; player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; // 缓冲 if (![player prepareToPlay]) return NO; // 将播放器存到字典中 [self musicPlayers][filename] = player; } // 3.播放 if (![player isPlaying]) { return [player play]; } return YES;}/** 暂停音乐*/+ (void)pauseMusic:(NSString *)filename{ if(filename == nil) return; // 取出对应的音乐播放器 AVAudioPlayer *player = [self musicPlayers][filename]; if (player.isPlaying) { [player pause]; } }/** 停止音乐*/+ (void)stopMusic:(NSString *)filename{ if(filename == nil) return; // 取出对应的音乐播放器 AVAudioPlayer *player = [self musicPlayers][filename]; [player stop]; // 将播放器从字典中移除 [[self musicPlayers] removeObjectForKey:filename];}/** 播放音效*/+ (void)playSound:(NSString *)filename{ if(filename == nil) return; // 通过字典属性取出对应的音效ID SystemSoundID soundID = [[self soundIDs][filename ] unsignedLongValue]; // 初始化 if (!soundID) { NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; if(url == nil) return; AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); // 存入字典 [self soundIDs][filename] = @(soundID); } // 播放 AudioServicesPlayAlertSound(soundID); }/** 销毁音效*/+ (void)disposeSound:(NSString *)filename;{ if(filename == nil) return; // 取出对应的音效ID SystemSoundID soundID = [[self soundIDs][filename] unsignedLongValue]; // 销毁 if (soundID) { AudioServicesDisposeSystemSoundID(soundID); [[self soundIDs] removeObjectForKey:filename]; }}@end
实现工具类的方法后,我们要将其运用到我们的项目当中。
虾米用简单的用几个按钮写了一个小demo,实现代码如下:
//// JHViewController.m// AVAudioPlayer//// Created by cjj on 15-10-2.// Copyright (c) 2015年 jh.chen. All rights reserved.//#import "JHViewController.h"#import "JHAudioTool.h"@interface JHViewController ()@property (nonatomic, strong) NSArray *songs;@property (nonatomic, assign) int currentIndex;/** 播放音乐*/- (IBAction)play;/** 暂停音乐*/- (IBAction)pause;/** 停止音乐*/- (IBAction)stop;/** 下一首歌曲*/- (IBAction)next;@end@implementation JHViewController-(NSArray *)songs{ if (_songs == nil) { self.songs = @[@"美人鱼.mp3",@"AlwaysOnline.mp3"]; } return _songs;}- (void)viewDidLoad{ [super viewDidLoad]; [JHAudioTool playMusic:self.songs[self.currentIndex]];}/** 播放音乐*/- (IBAction)play{ [JHAudioTool playMusic:self.songs[self.currentIndex]];}/** 暂停音乐*/- (IBAction)pause{ [JHAudioTool pauseMusic:self.songs[self.currentIndex]];}/** 停止音乐*/- (IBAction)stop{ [JHAudioTool stopMusic:self.songs[self.currentIndex]];}- (IBAction)next{ // 停掉之前的歌曲 [self stop]; // 开始下一首歌曲 增加索引 self.currentIndex ++; if (self.currentIndex >= self.songs.count) { self.currentIndex = 0; } // 开始播放 [self play];}@end
0 0
- 音乐/音效之工具类的封装
- 音效工具类的封装
- 音乐音效模块封装
- Unity3D之音乐音效的播放
- Unity3D之音乐音效的播放【2】
- 【工具类篇------声音管理器(管理游戏的音乐音效)】
- cocos2dX 之音乐与音效
- cocos2dX 之音乐与音效
- cocos2d之音乐和音效
- 音效播放工具类的简单封装
- ios-音乐播放器(2)工具类的封装
- cocos2D-x之音乐与音效
- cocos2D-x之音乐与音效
- cocos2D-x之音乐与音效
- Cocos2dx 下面,对 音乐 和音效简单封装
- 播放系统音效、自定义音效工具类
- 播放系统音效、自定义音效工具类
- Coco2dx中背景音乐及音效的控制封装类
- 三、配置maven
- Rational Bézier Curves: Conic Sections
- 双线程读写无锁队列
- mysql Access denied for user ''@'localhost' to database
- java學習筆記一
- 音乐/音效之工具类的封装
- 共享内存陷阱和分析
- 九度OJ 1027:欧拉回路 (欧拉回路)
- JAVA-反射-GETGENERICSUPERCLASS()介绍
- yum源出现问题
- Hibernate运行时遇到的错误小结
- struts-helloworld
- POJ 3267 The Cow Lexicon(DP)
- 专家教诲:变频器进行多电机启动时的切换要点