ios15音频工具类封装
#import <Foundation/Foundation.h>
@interface HMAudioTool : NSObject
/**
* 播放音乐
*
* @param filename 音乐的文件名
*/
+ (BOOL)playMusic:(NSString *)filename;
/**
* 暂停音乐
*
* @param filename 音乐的文件名
*/
+ (void)pauseMusic:(NSString *)filename;
/**
* 停止音乐
*
* @param filename 音乐的文件名
*/
+ (void)stopMusic:(NSString *)filename;
/**
* 播放音效
*
* @param filename 音效的文件名
*/
+ (void)playSound:(NSString *)filename;
/**
* 销毁音效
*
* @param filename 音效的文件名
*/
+ (void)disposeSound:(NSString *)filename;
@end
点m文件
#import "HMAudioTool.h"
#import <AVFoundation/AVFoundation.h>
@implementation HMAudioTool
/**
* 存放所有的音效ID
*/
static NSMutableDictionary *_soundIDs;
+ (NSMutableDictionary *)soundIDs
{
if (!_soundIDs) {
_soundIDs = [NSMutableDictionary dictionary];
}
return _soundIDs;
}
/**
* 存放所有的音乐播放器
*/
static NSMutableDictionary *_musicPlayers;
+ (NSMutableDictionary *)musicPlayers
{
if (!_musicPlayers) {
_musicPlayers = [NSMutableDictionary dictionary];
}
return _musicPlayers;
}
/**
* 播放音乐
*
* @param filename 音乐的文件名
*/
+ (BOOL)playMusic:(NSString *)filename
{
if (!filename) return NO;
// 1.取出对应的播放器
AVAudioPlayer *player = [self musicPlayers][filename];
// 2.播放器没有创建,进行初始化
if (!player) {
// 音频文件的URL
NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
if (!url) return NO;
// 创建播放器(一个AVAudioPlayer只能播放一个URL)
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;
}
/**
* 暂停音乐
*
* @param filename 音乐的文件名
*/
+ (void)pauseMusic:(NSString *)filename
{
if (!filename) return;
// 1.取出对应的播放器
AVAudioPlayer *player = [self musicPlayers][filename];
// 2.暂停
if (player.isPlaying) {
[player pause];
}
}
/**
* 停止音乐
*
* @param filename 音乐的文件名
*/
+ (void)stopMusic:(NSString *)filename
{
if (!filename) return;
// 1.取出对应的播放器
AVAudioPlayer *player = [self musicPlayers][filename];
// 2.停止
[player stop];
// 3.将播放器从字典中移除
[[self musicPlayers] removeObjectForKey:filename];
}
/**
* 播放音效
*
* @param filename 音效的文件名
*/
+ (void)playSound:(NSString *)filename
{
if (!filename) return;
// 1.取出对应的音效ID
SystemSoundID soundID = [[self soundIDs][filename] unsignedLongValue];
// 2.初始化
if (!soundID) {
// 音频文件的URL
NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
if (!url) return;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
// 存入字典
[self soundIDs][filename] = @(soundID);
}
// 3.播放
AudioServicesPlaySystemSound(soundID);
}
/**
* 销毁音效
*
* @param filename 音效的文件名
*/
+ (void)disposeSound:(NSString *)filename
{
if (!filename) return;
// 1.取出对应的音效ID
SystemSoundID soundID = [[self soundIDs][filename] unsignedLongValue];
// 2.销毁
if (soundID) {
AudioServicesDisposeSystemSoundID(soundID);
[[self soundIDs] removeObjectForKey:filename];
}
}
@end