美文网首页
iOS音频播放(1):概述

iOS音频播放(1):概述

作者: 李李李大胖子 | 来源:发表于2018-04-20 16:40 被阅读0次

官方网站
参考:码农人生
目前我们在计算机上进行音频播放都需要依赖于音频文件,音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号的过程,人耳所能听到的声音,最低的频率是从20Hz起一直到最高频率20KHZ,因此音频文件格式的最大带宽是20KHZ。根据奈奎斯特的理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音,所以音频文件的采样率一般在40~50KHZ,比如最常见的CD音质采样率44.1KHZ。

概述

1、音频文件的采样率一般在40~50KHZ
2、对声音进行采样、量化的过程被称为脉冲编码调制,简称PCM。因为PCM是原始数据,所以体积庞大,所以后续有了多种不同的方式对音频数据进行压缩,无损压缩(ALAC、APE、FLAC)和有损压缩(MP3、AAC、OGG、WMA)。大部分的音频格式为MP3。
3、码率:压缩质量,现在的码率有128kbit/s,160kbit/s,,320kbit/s等,值越高,声音质量越高。MP3一般编码有两种分别是固定码率(Constan bitrate,CBR)和可变码率(Variable bitrate,VBR)。
4、MP3格式中数据一般由两部分组成:
(1).ID3,用来存储歌名、演唱者、专辑、音轨数等。
(2).音频数据。部分以帧为单位存储

core_audio_layers_2x.png

MP3中的每一帧都有自己的帧头,其中存储了采样频率等解码必须的信息,所以每一帧都可以独立于文件存在和播放,这个特性加上高压缩比使得MP3文件成为了音频播放的主流格式。帧头之后存储的音频数据是若干个PCM数据帧经过压缩方法压缩得到的,对CBR的MP3数据来说每个帧中包含的PCM数据帧都是固定的,而VBR是可变的。

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

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

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


core_audio_layers_2x.png

功能解读:

·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:如果你的app需要对音频进行流播放并且同时存储,那么AudioFileStreamer加AudioQueue能够帮到你,你可以先把音频数据下载到本地,一边下载一边用NSFileHandler等接口读取本地音频文件并交给AudioFileStreamer或者AudioFile解析分离音频帧,分离出来的音频帧可以送给AudioQueue进行解码和播放。如果是本地文件直接读取文件解析即可。(这两个都是比较直接的做法,这类需求也可以用AVFoundation+本地server的方式实现,AVAudioPlayer会把请求发送给本地server,由本地server转发出去,获取数据后在本地server中存储并转送给AVAudioPlayer。另一个比较trick的做法是先把音频下载到文件中,在下载到一定量的数据后把文件路径给AVAudioPlayer播放,当然这种做法在音频seek后就回有问题了。);

3:如果你正在开发一个专业的音乐播放软件,需要对音频施加音效(均衡器、混响器),那么除了数据的读取和解析以外还需要用到AudioConverter来把音频数据转换成PCM数据,再由AudioUnit+AUGraph来进行音效处理和播放(但目前多数带音效的app都是自己开发音效模块来坐PCM数据的处理,这部分功能自行开发在自定义性和扩展性上会比较强一些。PCM数据通过音效器处理完成后就可以使用AudioUnit播放了,当然AudioQueue也支持直接使对PCM数据进行播放。)。下图描述的就是使用AudioFile + AudioConverter + AudioUnit进行音频播放的流程

audioUnitPlay.jpg

相关文章

  • iOS音频播放(1):概述

    官方网站参考:码农人生目前我们在计算机上进行音频播放都需要依赖于音频文件,音频文件的生成过程是将声音信息采样、量化...

  • AVAudioPlayer,AVPlayer以及系统音频

    总述、iOS音频播放概述 iOS系统中音频的四种播放方式(重点介绍前三种) 说下面三种音频播放之前我强调一下:三种...

  • iOS点击按钮播放声音

    概述 未完待续 代码 参考 IOS基础:声音调用 iOS开发系列--音频播放、录音、视频播放、拍照、视频录制 IO...

  • iOS音频播放 (一):概述

    本篇为《iOS音频播放》系列的第一篇,主要将对iOS下实现音频播放的方法进行概述。 基础 先来简单了解一下一些基础...

  • iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置

    iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置ios9音频应用播放控制在“iOS 9音频应用播放音频之...

  • iOS音频播放的几种方式

    title : iOS音频播放的几种方式category : IOS iOS音频播放的几种方式 标签(空格分隔)...

  • iOS 音频

    iOS音频介绍 播放音频用法

  • iOS AVAudioPlayer 、AVPlayer、AVPl

    一、iOS 音频 1)AVAudioPlayer 在 框架里面 使用简单方便,只能播放本地音频,不支持流媒体播放,...

  • iOS-音频播放

    1 iOS的播放音频方式: 1 AVAudioPlayer(只支持本地音乐播放)2 AVPlayer (既支持本地...

  • iOS音频

    iOS中支持的音频播放类型播放音效System Sound Service播放本地音频AVFoundataion播...

网友评论

      本文标题:iOS音频播放(1):概述

      本文链接:https://www.haomeiwen.com/subject/ynczkftx.html