background image

知道播放原理以后,把我们刚才那多的

CODEC 到另外一个客户端去解码,解码怎么办呢?

这就是我们拿到一个数据,刚才编码完成的数据是这样的,发过来数据就应该这样的,我
们的解码过程中又需要把这个信息去掉了,因为我们只需要解码中间的数据而不需要解析
文件具体的结构,而是关心编码后的数据,这个也很简单,

CODECDecode 的方法,因为

PCM 最后格式是 WAVE 文件才能播放。这是一个解码的过程。
整个过程大家应该了解了,我们想要用自己的一个

CODEC 录音播放的过程。下面了解一下

AUDIO Session。AUDIO Session 是 IOS 中用于处理应用,比如说如何处理多个应用的音频
输出,比如说我听

APPLE,这时候开启另外一个应用,另外一个也有声音的播放,这个时

候怎么处理呢?还有我们在锁屏情况下我们的应用和播放声音这时候我锁屏了,还有我把
音量键关到最小的时候有一些应用就不让关,即使你玩游戏音量键也关不了。还有就是是否
在应用里面支持录音,还有是否支持语音的播放。

AUDIO Session 是管理这些过程的,我给

大家一个比较直观的图,我这个应用,这是飞机一个控制台应用,首先第一架飞机正在飞,
就是正在播放声音,另外一个应用说我也要播放声音了,这时候控制台把它记录下来说它
要播放声音了,这个

SPEAKHERE 说也要播放声音了,就是告诉控制台,我 AUDIO 

Session 要播放声音了,那控制台就告诉 SpeakHere 关闭声音。
应用中可以设置的几种音频模式:你声音调到静音以及锁屏的情况下声音是否播放,另
外一个情况就是我这个应用在使用的时候,是否支持别的应用,同时在使用这个声音。还也
就是我这个应用是否支持声音的录制或者播放,还有不同的组合,我们在应用里面就是说
我在锁屏情况下不允许播放声音,或者可以播放声音。它怎么使用呢?看看最下面这一行代
码,我们设置它一个模式就可以了,也是一句话事情,用起来非常方便。
我们讲完了

AUDIO Session,下面具体讲讲我们刚才的 DEMO 是怎么做的?首先跟我们

刚才讲的过程是一样的。
第一步要去下载

Speex 的 CODEC,它的网页里面可以下载下来了,下载下来是一个 C 的工

程,这时候我们编译适合我们

Xcode 开发的一个 Speex CODEC LIB 就是开发库。这里举一

个例子在我们编译一个基于模拟器的

DEMO 怎么做,我们可以直接在这里打包 Host 和

build,就可以了。将 LIBSpeex.A 引入 Xcode 开发环境中,这个设置要非常细心,指定好头
文件,指定好了以后,我们可以引入

Speex.H 文件。

我们有了我们文件库以后,获取录制的

PCM 文件的音频数据把这个代码提取出来,就是采

样的文件提取出来,这个过程可能相对繁琐一点,只要找到这个块就可以把采样数据拿到。
拿到这个采样数据以后我们才对它进行一个编码。

Speex 一个编码的函数,这种方法是基于

帧的,并不是一个文件一个文件处理,而是定一个帧的长度基于帧的编码为你想要的一个
Speex 格式,最后 Speex 添加 Speex 文件的头信息,然后通过 Socket 发送 Speex 文件数据到
服务器,服务器传到另外一台设备,设备接受为

Speex 文件并解码为 PCM 音频数据。这个

Speex 还有很多很多的功能,包括录制之前的设置和降噪都可以设置。通过解码将 PCM 数
据恢复为

WAVE 文件格式,可以播放这个文件。