AV Foundation 的剖析 1.0

1.文本阅读功能

用到 AVSpeechSynthesizer

  • [x] 发音类型
  • [x] 发音速率
  • [x] 音调
  • [x] 阅读间隙

2.播放和录制音频文件

播放

音频会话在didFinishLaunchingWithOptions中配置

设置后台播放: Plist 文件中添加 Required background modes类型的数组,添加 App plays audio or streams audio/video using AirPlay 即可

用到 AVAudioPlayer

prepareToPlay:

创建 AVAudioPlayer 实例的时候建议调用其 prepareToPlay,
得到的好处是:可以取得音频硬件并预加载 Audio Queue的缓冲区
当调用play方法的时候会隐性激活,但是在创建时准备播放器可以降低调用play方法和听到声音输出之间的延时。
这里要区别 该类的一些方法:

playpausestop
立即播放停止播放停止播放

区别:

由上面可以看出 pause 与 stop 都会对播放暂停进行操作,通过pause 和stop方法暂停的 通过 play 都会继续播放。其主要区别在于底层上的一些处理,用stop 方法会撤销调用 prepareToPlay时所做的设置。

  • [x] 音量
  • [x] pan 值 立体声播放控制 -1.0 ~ 1.0.默认居中。
  • [x] 播放率 0.5半速 ~ 2.0 (2倍速)
  • [x] 循环 设置 numberOfLoops 大于0的值是循环的次数。-1是无限循环
  • [x] 音频计量
  1. 构建于 Core Audio 中的 C -based Audio Queue Services的最顶层。

  2. 如果需要在 网络流中播放音频、访问 原始音频样本 或者需要 非常低的延时。这些操作的时候是不能够胜任的。

  3. 播放包含内存版本的 Data 或者 URL
    ps: 该 **`URL`** 必须在沙盒之内或者改 **`URL`** 必须是用户系统库中的一个元素复制代码

ps: 一般处理音频的时候主要处理的是 意外事件 操作。

  1. 中断操作(各种中断操作)
    监听 NSNotification.Name.AVAudioSessionInterruption

    判断中断的类型进行相应的事件处理操作

  2. 播放线路改变 (切换耳机,音响等等)
    监听 NSNotification.Name.AVAudioSessionRouteChange

    判断切换的类型进行相应的事件处理操作,比如耳机拔掉等等

对音频的处理要遵循 HIGHuman Interface Guidelines) 相关定义

录制音频

用到 AVAudioRecorder

需要提供的数据:

  • 存储文件的路径path URL
  • 配置录音键值信息
  • 异常捕捉

如同上面音频播放一样:
同样建议调用其:prepareToPlay 方法。
该方法执行底层 Audio Queue 初始化的必要过程,在指定的 URL参数指定的位置创建一个文件,将录制启动时的延时降到最低

  • [x] 音频格式 在AVFormatIDKey 中获取对于的音频格式.
    大约 37 种类型

    保真度越高的格式其文件就越大。合适的格式一方面保证质量也能更好的优化其存储空间 如:kAudioFormatMPEG4AACkAudioFormatAppleIMA4
    PS: URL 后缀格式一定要与 所选择的格式对应上。

  • [x] 采样率 AVSampleRateKey 上一个专题中对其进行了详细说明。

    设置合适的采样率是质量的保证
    推荐: 8_000、16_000、22_050、44_100

  • [x] 通道数 AVNumberOfChannelsKey

    默认值是1
    1:单声道录制 (一般推荐)
    2:立体声录制

PS: 不能使用 AVAudioSessionCategorySoloAmbient 该分类是只读的,不支持音频输入

根据其功能的划分使用:我们如果需要录音又要对外播放的时候。那就考虑 AVAudioSessionCategorySoloAmbient 这个分类

同样操作麦克风需要 权限的申请

Audio Metering

AVAudioPlayer
AVAudioRecorder

这两个类实用的功能是能够对音频进行测量。 Audio Metering可以让开发者读取音频的平均分贝和峰值分贝数据,并使用这些数据以可视化方式将声音的大小呈现给最终的用户。

3.AVAsset AV Foundation 最重要的类

是 AV Foundation 的核心
AVAsset 是一个抽象的和不可改变的类,定义了媒体资源混合的呈现方式,将媒体资源的静态属性模块化成一个整体。

AVAsset

  • 让你处理音视频文件的时候不用考虑其格式问题,只有资源的概念;这样不管处理怎么样的媒体文件你只有统一的对象而言。
  • 其隐藏了资源的位置信息,只会通过 URL进行初始化来创建一个资源;这样在不考虑位置的前提下合理地获取及载入媒体。
  • 本身不是媒体资源,但是其可作为时基媒体的容器。是由一个或者多个带有描述信息的媒体组成:AVAssetTrack

    AVAssetTrack 最常见的形态就是音频和视频流,也可以用于表示文本,副标题和隐藏字幕等媒体类型。

资源

1.AVAsset 上面说过它是一个抽象类,它不能被直接实例化。通过 URL 实例如:
let asset = AVAsset(url: URL(string: "https://www.baidu.com/")!)
通过 URL 进行实例的时候,实际上创建的只是 AVURLAsset

2.AVURLAsset
创建的时候允许通过字典来进行有条件的进行资源创建,下面例子中 AVURLAssetPreferPreciseDurationAndTimingKey 表示提供时长和计时信息。
let asset = AVURLAsset(url: url, options: [AVURLAssetPreferPreciseDurationAndTimingKey : true])
...

博客内容上多一点。
有后续兴趣可以关注 博客:
blog.aiyinyu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值