你的位置:首页 > 操作系统

[操作系统]iOS学习45之多媒体操作


1. 音频

 1> 音频实现简述

  iOS 里面共有四种专门实现播放音频的方式:

  •  System Sound Services(系统声音服务)

  •  OpenAL(跨平台的开源的音频处理接口)

  •  Audio Queue Services(播放和录制音频服务)

  •  AVAudioPlayer(高级音频播放器)

 2> System Sound Services(系统声音服务)

  ① System Sound Services 是最底层也是最简单的声音播放服务,通过调用 AudioServicesPlaySystemSound 这个函数就可以播放一些简单的音频文件

  ② 局限性:

   1.  声音长度要小于30秒

   2.  格式:IMA4

   3.  不能控制播放的进度

   4.  调用方法后立即播放声音

   5.  没有循环播放和立体声音播放

  ③ 实例代码

  CFBundleRef mainBundle;  SystemSoundID soundFileObject;  mainBundle = CFBundleGetMainBundle ();  CFURLRef soundFileURLRef = CFBundleCopyResourceURL (mainBundle, CFSTR ("蔡琴 - 爱断情伤"), CFSTR ("wav"), NULL);  AudioServicesCreateSystemSoundID (soundFileURLRef, &soundFileObject);  AudioServicesPlaySystemSound(soundFileObject);

 3> OpenAL

  ① 简介

   OpenAL 是一套跨平台的开源的音频处理接口

   最适合开发游戏的音频

   OpenAL 包含三个 实体:Listener(听者)、Source(音源)、 Buffer(缓存)

   Audio Queue Services 主要用来实现录制音频,为了简化音频文件的处理,通常还需要使用到 AudioFileServices

  ② 开发步骤

   1.获取device

   2.将context关联到device

   3.将数据放入buffer

   4.将buffer链接到一个source

   5.播放source

  OpenAL资料网址: http://www.devdiv.com/thread-19636-1-1.html
            http://www.cocoachina.com/bbs/read.php?tid-112679-page-1.html

  相对底层的 API参考:http://blog.csdn.net/midfar/article/details/7233454

 4> AVAudioPlayer简介

  我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,如下:

  • AAC

  • AMR(AdaptiveMulti-Rate, aformatforspeech)

  • ALAC(AppleLossless)

  • iLBC(internetLowBitrateCodec, anotherformatforspeech)

  • IMA4(IMA/ADPCM)

  • linearPCM(uncompressed)

  • MP3(MPEG-1audiolayer3)

 5> AVAudioPlayer优势

  • 支持更多的格式

  • 可以播放任意长度的音频文件

  • 支持循环播放

  • 可以同步播放多个音频文件

  • 控制播放进度以及从音频的任意一点开始播放

 6> AVAudioPlayer开发步骤

  • 步骤一:AVAudioPlayer 包含在 AVFoundation 框架中,所以开发的时候首先导入音频的框架 AVFoundation.framework

  引入头文件

#import <AVFoundation/AVFoundation.h>

 

 

 

  • 步骤二: AVAudioPlayer 的初始化的时候需要给一个播放文件

  AVAudioPlayer  *avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:文件路径 error:nil];

  • 步骤三:重要属性

  设置初始音量大小 audioPlayer.volume = 1;(0.0 ~ 1.0)

  设置音乐播放次数  audioPlayer.numberOfLoops = -1;(只要是负数都是循环播放)

  播放进度 audioPlayer.currentTime = 0;

  • 步骤四:重要方法

  预播放

 

[audioPlayer prepareToPlay];

 

 

 

  播放

 

[audioPlayer play];

 

 

 

  暂停

 

[audioPlayer pause];

 

 

 

  停止

 

[audioPlayer stop];

 

 

 

  • 步骤五:代理方法

协议:AVAudioPlayerDelegate

播放完成会调用的代理方法

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;

播放解码失败

- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;

步骤一:

 

 

 

2. 视频