音频

一、概述 

  1.简单来说,音频可以分为2种

    (1)音效

      又称“短音频”,通常在程序中的播放时长为1~2秒

      在应用程序中起到点缀效果,提升整体用户体验

    (2)音乐

      比如游戏中的“背景音乐”,一般播放时间较长

 

  2.在iOS中播放两类音频分别使用AudioToolbox.framework和AVFoundation.framework来完成音效和音乐播放,系统已经帮我们导入了这两个框架,只需在工程中#import对应的类即可。

 

二、音效

  1.AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service)。System Sound Service是一种简单、底层的声音播放服务,但是它本身也存在着一些限制:

  • 音频播放时间不能超过30s 
  • 数据必须是PCM或者IMA4格式 
  • 音频文件必须打包成.caf、.aif、.wav中的一种(注意这是官方文档的说法,实际测试发现一些.mp3也可以播放)

   

  2.音效播放常见函数总结

    (1)加载音效文件,函数获得系统声音ID

      AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)

    (2)释放音效资源

      AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)

    (3)播放音效不带震动

      AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)

    (4)播放音效带点震动

      AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)

    (5)监听播放完成操作调用下面的方法注册回调函数

      AudioServicesAddSystemSoundCompletion(  SystemSoundID inSystemSoundID,

CFRunLoopRef  inRunLoop, CFStringRef  inRunLoopMode, AudioServicesSystemSoundCompletionProc  inCompletionRoutine, void*  inClientData)

 

  3.代码示例

//

//  KCMainViewController.m

//  Audio

//

//  Created by Kenshin Cui on 14/03/30.

//  Copyright (c) 2014年 cmjstudio. All rights reserved.

//  音效播放



#import "KCMainViewController.h"

#import <AudioToolbox/AudioToolbox.h>



@interface KCMainViewController ()



@end



@implementation KCMainViewController



- (void)viewDidLoad {

    [super viewDidLoad];

    

    [self playSoundEffect:@"videoRing.caf"];

}



/**

 *  播放完成回调函数

 *

 *  @param soundID    系统声音ID

 *  @param clientData 回调时传递的数据

 */

void soundCompleteCallback(SystemSoundID soundID,void * clientData){

    NSLog(@"播放完成...");

}



/**

 *  播放音效文件

 *

 *  @param name 音频文件名称

 */

-(void)playSoundEffect:(NSString *)name{

    NSString *audioFile=[[NSBundle mainBundle] pathForResource:name ofType:nil];

    NSURL *fileUrl=[NSURL fileURLWithPath:audioFile];

    //1.获得系统声音ID

    SystemSoundID soundID=0;

    /**

     * inFileUrl:音频文件url

     * outSystemSoundID:声音id(此函数会将音效文件加入到系统音频服务中并返回一个长整形ID)

     */

    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);

    //如果需要在播放完之后执行某些操作,可以调用如下方法注册一个播放完成回调函数

    AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL);

    //2.播放音频

    AudioServicesPlaySystemSound(soundID);//播放音效

//    AudioServicesPlayAlertSound(soundID);//播放音效并震动

}



@end

 

 三、音乐

  1.如果播放较大的音频或者要对音频有精确的控制则System Sound Service可能就很难满足实际需求了,通常这种情况会选择使用AVFoundation.framework中的AVAudioPlayer类来实现。AVAudioPlayer可以看成一个播放器,它支持多种音频格式,而且能够进行进度、音量、播放速度等控制

  注意:该类(AVAudioPlayer)只能用于播放本地音频。

 

  2.AVAudioPlayer常用的方法和属性

 

你可能感兴趣的:(音频)