音乐/音效之工具类的封装

来源:互联网 发布:类似余罪的网络剧 编辑:程序博客网 时间: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
原创粉丝点击