文章目录

  • I . AAudio 音频流创建流程
  • II . AAudio 音频流构建器 设置音频设备 ID AAudioStreamBuilder_setDeviceId
  • III . AAudio 音频设备 ID 获取
  • IV . AAudio 音频流 默认 音频设备设置
  • V . AAudio 音频流构建器 设置 音频流方向 AAudioStreamBuilder_setDirection
  • VI . AAudio 音频流方向
  • VII . AAudio 音频流构建器 设置 音频设备共享模式 AAudioStreamBuilder_setSharingMode
  • VIII . AAudio 音频设备 共享模式
  • IX . AAudio 音频流 性能模式 设置 AAudioStreamBuilder_setPerformanceMode

I . AAudio 音频流创建流程


使用 AAudio 音频库 , 首先需要导入 AAudio.h 头文件 ;

#include <AAudio.h>

创建 AAudio 音频流 , 需要先创建 AAudio 音频流构建器 , 然后在通过该构建器创建音频流 ;

    //创建构建器 , AAudio 音频流通过该构建器创建//声明 AAudio 音频流构建器 指针AAudioStreamBuilder *builder = nullptr;//创建 AAudio 音频流构建器 , 注意传入二维指针aaudio_result_t result = AAudio_createStreamBuilder(&builder);

设置音频设备 ID ;

    // 设置音频流设备 IDAAudioStreamBuilder_setDeviceId(builder, playbackDeviceId_);

设置音频流方向 ;

    // 设置音频流方向AAudioStreamBuilder_setDirection(builder, AAUDIO_DIRECTION_OUTPUT);

设置音频设备共享模式 ;

    // 设置共享模式 , 独占模式性能更高 , 延迟更低 ; 如果 该音频设备正在被使用 , 设置失败会自动设置成 共享模式AAudioStreamBuilder_setSharingMode(builder, AAUDIO_SHARING_MODE_EXCLUSIVE);

设置性能模式 ;

    // 设置性能模式AAudioStreamBuilder_setPerformanceMode(builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);

下面会着重对上面的流程细节进行详细解析 ;
每个方法的参数 , 原理 , 返回值 等细节都会讲解到 ;

II . AAudio 音频流构建器 设置音频设备 ID AAudioStreamBuilder_setDeviceId


设置 AAudio 音频流设备 ID :

  • ① 函数作用 : 设备 ID 用于标识音频设备 , 该方法是为 AAudio 音频流申请访问该音频设备 ;
  • ② 函数原型 :
AAUDIO_API void AAudioStreamBuilder_setDeviceId(AAudioStreamBuilder *builder,int32_t deviceId
)
  • ③ 参数 AAudioStreamBuilder *builder : AAudio 音频流构建器指针 , 注意是一级指针 ;
  • ④ 参数 int32_t deviceId : 音频设备 ID , 如果没有指定可以传入 AAUDIO_UNSPECIFIED 参数 , 使用默认音频设备 ;
  • ⑤ 代码示例 :
    // 设置音频流设备 IDAAudioStreamBuilder_setDeviceId(builder, playbackDeviceId_);

III . AAudio 音频设备 ID 获取


音频设备 ID 获取方法 :

  • ① 调用 Java API : 音频设备的 ID 可以调用 Java 的 API 中的 AudioManager 的 getDevices() 方法获取 Android 设备上的音频设备信息 ;
  • ② 返回值 : 其返回一个 AudioDeviceInfo 对象数组 , 该 AudioDeviceInfo 对象中就封装了音频设备 ID ;
  • ③ 提取音频设备 ID : 调用 AudioDeviceInfo 对象的 getId() 方法 , 即可获取 int 类型的 音频设备 ID , 在 C/C++ 中是 int32 类型 ;

IV . AAudio 音频流 默认 音频设备设置


AAudio 音频流 默认设备使用 :

  • ① 默认选项 : 这里除了指定一个实际的音频设备 ID 之外 , 还可以指定 AAUDIO_UNSPECIFIED 作为音频设备 ID ;
  • ② 默认设备 : 如果设置了该参数 , 系统会默认使用 Android 手机当前音频流的默认音频设备 ;
  • ③ 举例 : 如果当前音频流方向是输出 , 从内存 -> 音频设备 , 即发音 , 那么默认设备就是 耳机 > 自带喇叭 ;

V . AAudio 音频流构建器 设置 音频流方向 AAudioStreamBuilder_setDirection


AAudio 音频流方向设置 :

  • ① 函数原型 :
AAUDIO_API void AAudioStreamBuilder_setDirection(AAudioStreamBuilder *builder,aaudio_direction_t direction
)
  • ② 方法作用 : 设置 AAudio 音频流方向 , 音频输入 还是 音频输出 , 默认是音频输出 ;
  • ③ 参数 AAudioStreamBuilder *builder : AAudio 音频流构建器 ;
  • ④ 参数 aaudio_direction_t direction : 音频流方向枚举 , 取值 AAUDIO_DIRECTION_OUTPUT ( 音频输出 ) 或 AAUDIO_DIRECTION_INPUT ( 音频输入 ) ;
  • ⑤ 代码示例 :
    // 设置音频流方向AAudioStreamBuilder_setDirection(builder, AAUDIO_DIRECTION_OUTPUT);

VI . AAudio 音频流方向


AAudio 音频流方向 说明 : 该值 是 aaudio_direction_t 类型 , 该类型是 int32_t 类型 , 取值是一个枚举 ;

  • ① 枚举类型定义 :
enum {/*** Audio data will travel out of the device, for example through a speaker.*/AAUDIO_DIRECTION_OUTPUT,/*** Audio data will travel into the device, for example from a microphone.*/AAUDIO_DIRECTION_INPUT
};
typedef int32_t aaudio_direction_t;
  • ② AAUDIO_DIRECTION_OUTPUT : 音频数据输出到音频设备 , 这是手机发音的过程 ;
  • ③ AAUDIO_DIRECTION_INPUT : 音频数据从音频设备输入到手机 , 这是手机接收声音的过程 ;

VII . AAudio 音频流构建器 设置 音频设备共享模式 AAudioStreamBuilder_setSharingMode


AAudio 音频流设置 音频设备共享模式 :

  • ① 函数原型 :
AAUDIO_API void AAudioStreamBuilder_setSharingMode(AAudioStreamBuilder *builder,aaudio_sharing_mode_t sharingMode
)
  • ② 函数作用 : 设置音频设备的共享模式 ;
  • ③ 参数 AAudioStreamBuilder *builder : AAudio 音频流构建器 ;
  • ④ 参数 aaudio_sharing_mode_t sharingMode : 音频设备的共享模式 , AAUDIO_SHARING_MODE_SHARED ( 共享模式 ) , AAUDIO_SHARING_MODE_EXCLUSIVE ( 独占模式 ) ;
  • ⑤ 默认模式 : 如果不调用该方法设置 音频设备的共享模式 , 那么默认为 AAUDIO_SHARING_MODE_SHARED 模式 ;
  • ⑥ 设置失败的情况 : 如果该音频设备正在被其它音频流独占 , 那么该设置有可能会失败 ;
  • ⑦ 共享模式性能分析 : 音频设备 在 AAUDIO_SHARING_MODE_SHARED 共享模式下 , 音频的延迟会高于独占模式 ;
  • ⑧ 独占模式性能分析 : 音频设备 在 AAUDIO_SHARING_MODE_EXCLUSIVE 独占模式下 , 音频的延迟会降低的最低 , 性能很高 ;
  • ⑨ 独占模式下资源释放 : 在独占模式下 , 如果不适用音频设备 , 应该马上释放该资源 , 以免影响其它音频流使用该音频设备 ;
  • ⑩ 代码示例 :
    // 设置共享模式 , 独占模式性能更高 , 延迟更低 ; 如果 该音频设备正在被使用 , 设置失败会自动设置成 共享模式AAudioStreamBuilder_setSharingMode(builder, AAUDIO_SHARING_MODE_EXCLUSIVE);

VIII . AAudio 音频设备 共享模式


AAudio 音频设备共享模式 :

  • ① 代码定义 :
enum {/*** This will be the only stream using a particular source or sink.* This mode will provide the lowest possible latency.* You should close EXCLUSIVE streams immediately when you are not using them.*/AAUDIO_SHARING_MODE_EXCLUSIVE,/*** Multiple applications will be mixed by the AAudio Server.* This will have higher latency than the EXCLUSIVE mode.*/AAUDIO_SHARING_MODE_SHARED
};
typedef int32_t aaudio_sharing_mode_t;
  • ② int32_t 类型 : 音频设备共享模式 类型为 int32_t 类型 ;
  • ③ AAUDIO_SHARING_MODE_EXCLUSIVE 独占模式 :
    • a . 独占访问 : 只有该音频流能访问该音频设备 , 其它音频流拒绝访问 ;
    • b . 高性能 : 该模式下 音频流 性能高 , 延迟低 ;
    • c . 及时释放 : 如果不再使用该音频设备 , 需要马上释放音频流 , 以免影响其它音频流访问该音频设备 ;
  • ④ AAUDIO_SHARING_MODE_SHARED 共享模式 :
    • a . 同时访问 : 多个音频流可以同时访问该音频设备 ;
    • b . 性能低于独占模式 : 该模式下音频的延迟略高于独占模式 ;

IX . AAudio 音频流 性能模式 设置 AAudioStreamBuilder_setPerformanceMode


AAudioStreamBuilder_setPerformanceMode 设置性能模式 :

  • ① 函数原型 : 设置该 AAudio 音频流的性能模式 , 有省点模式 , 低延迟模式 , 和默认模式 三种选择 ;
AAUDIO_API void AAudioStreamBuilder_setPerformanceMode(AAudioStreamBuilder *builder,aaudio_performance_mode_t mode
)
  • ② 代码示例 :
    // 设置性能模式AAudioStreamBuilder_setPerformanceMode(builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);

性能模式参数 :

  • ① 代码定义 :
enum {/*** No particular performance needs. Default.*/AAUDIO_PERFORMANCE_MODE_NONE = 10,/*** Extending battery life is more important than low latency.** This mode is not supported in input streams.* For input, mode NONE will be used if this is requested.*/AAUDIO_PERFORMANCE_MODE_POWER_SAVING,/*** Reducing latency is more important than battery life.*/AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
};
typedef int32_t aaudio_performance_mode_t;
  • ② AAUDIO_PERFORMANCE_MODE_NONE : 默认值 , 没有设置特定的性能模式 ;
  • ③ AAUDIO_PERFORMANCE_MODE_POWER_SAVING : 省电模式 , 电池使用时长比低延迟性能更重要 , 在 输入流 的情况下不支持该设置 ;
  • ④ AAUDIO_PERFORMANCE_MODE_LOW_LATENCY : 低延迟 高性能 要不电池使用时间重要 ;

性能模式使用说明 :

  • ① 默认值 : 默认状态下 , 如果不调用该方法设置性能模式 , 默认值是 AAUDIO_PERFORMANCE_MODE_NONE ;
  • ② 获取性能模式 : 性能模式设置可能会失败 , 可以调用 AAudioStream_getPerformanceMode 方法获取最终的性能模式 ;

【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )相关推荐

  1. 【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 )

    文章目录 一.获得最佳延迟 二.Oboe 音频流 三.Oboe 音频设备 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started ② Oboe 全指 ...

  2. 【Android 高性能音频】AAudio 音频流 数据回调细节 ( 数据回调函数优先级 | 数据回调函数 | 采样率 | 采样数 | 缓冲区调整 | 线程不安全 )

    文章目录 I . 数据回调函数优先级 II . 数据回调函数 相关内容 III . 采样率 处理细节 IV . 数据回调函数 每次 采样个数 numFrames V . 数据回调函数 缓冲区 ( AA ...

  3. 【Android 高性能音频】AAudio 音频流 缓冲区 简介 ( AAudio 音频流内部缓冲区 | 缓冲区帧容量 | 缓冲区帧大小 | 音频数据读写缓冲区 )

    文章目录 I . AAudio 音频流内部缓冲区 与 音频数据读写缓冲区 概念 II . AAudio 音频流内部缓冲区 缓冲区帧容量 BufferCapacityInFrames 与 缓冲区帧大小 ...

  4. 【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 )

    文章目录 一.检查 Oboe 音频流属性 二.开始播放 三.停止播放 四.关闭音频流 五.重新配置 Oboe 音频流属性 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : G ...

  5. 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 音频流回调类 AudioStreamCallback )

    文章目录 一.包含头 Oboe 头文件 二.音频流构建器 AudioStreamBuilder 三.音频流回调 AudioStreamCallback Oboe GitHub 主页 : GitHub/ ...

  6. 【Android 高性能音频】高性能音频简介 ( 高性能音频问题引入 | 使用场景 | 相关开发库及技术 )

    文章目录 I 高性能音频使用场景 II 高性能音频开发库 III 相关开发资料 I 高性能音频使用场景 Android 手机的音频问题 : 1. 普通音频功能 : ① 常用音频开发方式 : 当前使用 ...

  7. 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 动态注册广播接收者监听耳机插拔事件 | 重新打开 Oboe 音频流 )

    文章目录 一.动态注册广播接收者监听耳机插拔事件 二.jni 层的 Oboe 播放器代码 ( 重新打开 Oboe 音频流 ) 三.相关资料 基于 [Android 高性能音频]Oboe 开发流程 ( ...

  8. 【Android 高性能音频】Oboe 开发流程 ( 创建并设置 AudioStreamCallback 对象 | 打开 Oboe 音频流 | 日志封装 logging_macros.h )

    文章目录 一.创建并设置 AudioStreamCallback 对象 二.打开 Oboe 音频流 三.日志封装 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getti ...

  9. 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )

    文章目录 一.GitHub 地址 二.Oboe C++ 代码 三.日志封装 四.Activity 代码 五.AndroidManifest.xml 配置文件 六.CMakeLists.txt 构建脚本 ...

  10. 【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )

    文章目录 一.Oboe 输出测试参数面板 二.Oboe 输出测试参数 API 及 设备选择 三.Oboe 输出测试参数 音频参数 四.Oboe 输出测试参数 播放偏好 五.Oboe 输出测试参数 ( ...

最新文章

  1. SharedPreferences小细节
  2. 执行超时已过期。完成操作之前已超时或服务器未响应。_OMG! 云服务器 CPU 100%了!肿么办?...
  3. 中文网页重设与排版:TYPO.CSS
  4. 4WD机器人运动控制MDK工程(实现ROS与STM32F407通信)
  5. Go基础-Go中的import
  6. 罗马数字转换器|罗马数字生成器
  7. ftp上传下载工具,6款最值得推荐的Windows端ftp上传下载工具
  8. Link warning:LNK4199 解决
  9. Excel中根据输入内容 自动填充时间、自动增加边框、自动添加背景颜色
  10. 如何将pdf转换成txt转换器破解版
  11. doors如何导入HTML文档,DOORS使用手册.doc
  12. Appium基础 — uiautomatorviewer定位工具
  13. 【COCI 2011】送票
  14. nrm安装成功后但是不能使用
  15. python变量的使用_python变量赋值的几种形式细节
  16. 服务器信息备份更新,电子病历服务器双机更换及实时备份与HIS服务器升级改造合同备案...
  17. 全国科技者工作日:关注科技工作者的工作与贡献,共创美好未来
  18. 进大公司还是进小公司
  19. C语言单链表代码实现
  20. macos安装joy工具

热门文章

  1. 基于Linux的Spark安装与环境配置
  2. 密钥生成工具类:RSA2 256位 加解密工具类 RsaUtils
  3. 咸鱼菌玩3D—样条曲线和贝塞尔曲线
  4. Python快捷键及配置环境变量
  5. JavaScript循环语句(二)
  6. 使用js删除表格中的一行的一个小练习
  7. java中高级工程师面试汇总
  8. python修改单个文件
  9. uniapp 数据统计,数据埋点,自定义事件埋点封装
  10. Web应用程序与桌面应用程序的区别