音频格式 |
硬件解码 |
软件解码 |
AAC |
YES |
YES |
ALAC |
YES |
YES |
HE-AAC |
YES |
|
iLBC |
YES |
|
IMA4 |
YES |
|
Linea PCM |
YES |
|
MP3 |
YES |
YES |
μ-law and a-law |
YES |
|
CAF |
YES |
YES |
注意:硬件解码器一次只能对一个音频文件解码。在实际应用中通常使用非压缩的音频格式(AIFF)或者CAF音频格式,从而减低系统在音频解码上的消耗,达到省电的目的.
------------------------------------------------------------------------------
播放音效的工具类
#import "ROAudioTool.h"
#import <AVFoundation/AVFoundation.h>
@implementation ROAudioTool
/** 声明私有的成员变量 ***/
static NSMutableDictionary *_soundIDs;
/**
* 保证soundIDs, 只创建1次
*/
+ (void)initialize
{
_soundIDs = [NSMutableDictionary dictionary];
}
//#warning /** 与initialize, 异曲同工, 但是调用 soundID的时候不能直接用 _soundID, 必须采用[self soundID], 否则直接调用静态变量 _soundID, 每次都创建一个 _soundID, 不会调用此方法***/
//+ (NSMutableDictionary *)soundIDs
//{
// if (!_soundIDs) {
// _soundIDs = [NSMutableDictionary dictionary];
// }
// return _soundIDs;
//}
+ (void)playAudioWithFilename:(NSString *)filename
{
/*
// 0. 创建URL
NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
// 1. 创建音效ID
SystemSoundID outSystemSoundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &outSystemSoundID);
// 2. 播放本地音效
// AudioServicesPlayAlertSound(nil) ---- 既播放又振动
// [注意] iOS8 模拟器不支持播放音效
AudioServicesPlaySystemSound(outSystemSoundID);
*/
// 1. 从字典中取soundID
// 1.1 判断文件名是否为空
if (filename == nil) return;
SystemSoundID outSystemSoundID = [_soundIDs[filename] unsignedIntValue];
// 1.2 判断soundID是否为空
if (!outSystemSoundID) {
LogRed(@"创建新的soundID");
// 如果ID为空, 根据文件名创建url
NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
// 1.3 判断URL是否为nil
if(url == nil) return;
// 1.4 根据url创建soundID 并添加到字典中
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &outSystemSoundID);
_soundIDs[filename] = @(outSystemSoundID);
}
// 2. 播放soundID
AudioServicesPlaySystemSound(outSystemSoundID);
}
/**
* 根据filename 销毁soundID
*/
+ (void)disposeAudioWithFilename:(NSString *)filename{
if(filename == nil)return;
// 1. 取出soundID
SystemSoundID outSystemSoundID = [_soundIDs[filename] unsignedIntValue];
if (outSystemSoundID) {
// 2. 销毁soundID
AudioServicesDisposeSystemSoundID(outSystemSoundID);
// 3. 从字典中移除已经销毁的SoundID
[_soundIDs removeObjectForKey:filename];
}
}
原文:http://www.cnblogs.com/guangleijia/p/4836801.html