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方法和听到声音输出之间的延时。
这里要区别 该类的一些方法:
play | pause | stop |
---|---|---|
立即播放 | 停止播放 | 停止播放 |
区别:
由上面可以看出 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] 音频计量
构建于 Core Audio 中的 C -based Audio Queue Services的最顶层。
如果需要在 网络流中播放音频、访问 原始音频样本 或者需要 非常低的延时。这些操作的时候是不能够胜任的。
- 播放包含内存版本的
Data
或者URL
ps: 该 **`URL`** 必须在沙盒之内或者改 **`URL`** 必须是用户系统库中的一个元素复制代码
ps: 一般处理音频的时候主要处理的是 意外事件 操作。
中断操作(各种中断操作)
监听 NSNotification.Name.AVAudioSessionInterruption
判断中断的类型进行相应的事件处理操作
- 播放线路改变 (切换耳机,音响等等)
监听 NSNotification.Name.AVAudioSessionRouteChange
判断切换的类型进行相应的事件处理操作,比如耳机拔掉等等
对音频的处理要遵循 HIG(Human Interface Guidelines
) 相关定义
录制音频
用到 AVAudioRecorder
类
需要提供的数据:
- 存储文件的路径path
URL
- 配置录音键值信息
- 异常捕捉
如同上面音频播放一样:
同样建议调用其:prepareToPlay
方法。
该方法执行底层 Audio Queue
初始化的必要过程,在指定的 URL
参数指定的位置创建一个文件,将录制启动时的延时降到最低
[x] 音频格式 在
AVFormatIDKey
中获取对于的音频格式.
大约37
种类型保真度越高的格式其文件就越大。合适的格式一方面保证质量也能更好的优化其存储空间 如:
kAudioFormatMPEG4AAC
与kAudioFormatAppleIMA4
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