音频笔记1

学习地址:iOS音频播放一到八

一. 基础##

1.基础###

计算机音频播放依靠音频文件,音频文件将声音信息——采集,量化,编码。生成数字信号。
人耳听到的声音频率:20HZ~2WHZ
根据奈奎斯特理论,数字信号必须高于人耳频率两倍才可以还原原声。所以音频信息采集为40HZ~4WHZ,ex:CD音频采样44.1KHZ。

声音信息,量化过程成为脉冲编码调试(Pulse Code Modulation,简称PCM)。
PCM数字信号音频是完全无损的,PCM音质优秀但体积庞大。所以出现很多不同音频格式压缩:
无损压缩:ALAL,APE,FLAC
有损压缩:MP3,WMA,AAC,OGG

目前常见音频压缩格式MP3。MP3格式舍弃MPC音频数据中人听觉不敏感的部分,MP3直接砍掉高频部分,码率越低砍掉越多。
MP3的码率(BitRate)代表了MP3数据的压缩质量,常见:128kbit/s,160kbit/s,320kbit/s。码率越高声音质量越高。
MP3的编码,常见:固定码率(CBR),可变码率(VBR)。

MP3格式中的数据通常两部分组成:

  • 第一部分:ID3(存储歌名,演唱者,专辑,音轨数等信息)
  • 第二部分:音频数据(以帧-frame 为单位存储,每个音频都有自己的帧头,下图所示一个MP3文件帧结构图)。每一帧都有自己的帧头,其中存储了采样率等编码必须的信息,所以每一帧都可以独立于文件存储和播放,这个特性加上高性能压缩比使得MP3成为音频流播放的主流格式。帧头之后存储音频数据,这些音频数据是若干PCM数据帧经过压缩算法压缩得到的,对CBR的MP3数据来说每个帧包含的PCM数据帧都是固定的,而VBR是可变的。

2. iOS音频播放概述###

iOS音频播放流程(以MP3为例):

  • 1.读取MP3文件
  • 2.解析采样率,码率,时常等信息,分离MP3中音频帧
  • 3.把分离出来的音频帧解码得到PCM数据
  • 4.对PCM数据进行音效处理(据衡器,混响器,非必需)
  • 5.把PCM数据解码成音频信号
  • 6.把音频信号交给硬件播放
  • 7.重复1-6步,直到播放完成

在iOS系统中对上述流程进行了封装,提供了不同层次的接口:

  • Audio File Services:完成流程第[2]步,音频读写;
  • Audio File Stream Services:完成流程第[2]步,音频解码;
  • Audio Converter Services:完成流程第[3],数据转换;
  • Audio Processing Graph Services:完成流程第[4],音频处理;
  • Audio Unit Services:完成流程第[5,6]步,音频播放;
  • Extended Audio File Services:Audio File Services 和 Audio Converter Services 的结合体;
  • AVAudioPlayer-AVPlayer (AVFoundation):完成所有步骤(除了第4步),高级接口;
  • Audio Queue Services:完成流程第[3,5,6]步,可进行录音和播放,高级接口;
  • OpenAL:用于游戏音频播放;

根据需求选择接口###

  • 1.简单音频播放,AVFoundation。
  • 2.播放并且存储音频,Audio File Streame Services 和 Audio Queue Services。可以帮你先把音频数据下载到本地,一边下载一边用NSFileHandler 等接口读取本地音频,并且交给Audio File Stream Services 或者Audio File Services 解析分离音频帧,分离出来的音频帧可以交给Audio Queue Services 进行解码播放。如果是本地文件直接读取文件解析即可。
  • 3.如果你开发的是专业音乐播放软件,需要对音频施加音效(据衡器,混响器),那么除了数据的读取和解析以外还需要Audio Converter Services 把音频转换成PCM数据,再由Audio Unit + AUGraph 来进行音效处理和播放(但目前多数带音频的app都是自己开发音效模块来处理PCM数据,这部分功能自行开发在定义性和扩展性上比较强,PCM数据处理通过音效处理器处理完成就开始使用Audio Unit播放了,当然Audio Queue 也可以直接对PCM数据进行播放。)

二. AudioSession##

Audio Session :

  • 确定app如何使用音频(播放?录音?)
  • 选择app的I/O设备(输入麦克风,输出耳机,手机外放和airplay)
  • 协调app的音频播放和系统以及其它app的行为(系统电话需要打断,电话结束需要恢复,按下静音按钮是否歌曲需要静音等)

posted @ 2016-05-31 21:57  lvable  阅读(432)  评论(0)    收藏  举报