当前位置: 首页 > news >正文

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

相关文章:

  • 红旗Linux+Oracle10g
  • vue30-单一事件管理组件通信: vuex
  • C#和ASP.Net面试题目集锦
  • java 基础概念 -- 数组与内存控制
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • mysql wait_timeout和interactive_timeout总结
  • scrapy-splash抓取动态数据例子十
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • 使用隐含Trace参数诊断Oracle Data Pump(expdp)故障
  • 当Java代码遇上抽象、重载加重写,一切都不美好了
  • 毕业(247)
  • 对安装好的RHEL7进行简单配置
  • 第一章 理解设计模式
  • Gogs
  • [转]俞敏洪在北京大学2008年开学典礼上的演讲辞
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Apache的基本使用
  • ComponentOne 2017 V2版本正式发布
  • CSS实用技巧
  • java概述
  • Java-详解HashMap
  • Java小白进阶笔记(3)-初级面向对象
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Nodejs和JavaWeb协助开发
  • PHP的类修饰符与访问修饰符
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 第2章 网络文档
  • 构建二叉树进行数值数组的去重及优化
  • 机器学习学习笔记一
  • 世界上最简单的无等待算法(getAndIncrement)
  • 算法-插入排序
  • 我感觉这是史上最牛的防sql注入方法类
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (003)SlickEdit Unity的补全
  • (1)虚拟机的安装与使用,linux系统安装
  • (2015)JS ES6 必知的十个 特性
  • (TOJ2804)Even? Odd?
  • (补)B+树一些思想
  • (第27天)Oracle 数据泵转换分区表
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法二)滑动窗口
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ..回顾17,展望18
  • .a文件和.so文件
  • .net 4.0发布后不能正常显示图片问题
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net mvc部分视图
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛