I . AAudio 音频流创建流程
使用 AAudio 音频库 , 首先需要导入 AAudio.h 头文件 ;
#include <AAudio.h>
创建 AAudio 音频流 , 需要先创建 AAudio 音频流构建器 , 然后在通过该构建器创建音频流 ;
//创建构建器 , AAudio 音频流通过该构建器创建 //声明 AAudio 音频流构建器 指针 AAudioStreamBuilder *builder = nullptr; //创建 AAudio 音频流构建器 , 注意传入二维指针 aaudio_result_t result = AAudio_createStreamBuilder(&builder);
设置音频设备 ID ;
// 设置音频流设备 ID AAudioStreamBuilder_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 参数 , 使用默认音频设备 ;
⑤ 代码示例 :
// 设置音频流设备 ID AAudioStreamBuilder_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 : 音频数据从音频设备输入到手机 , 这是手机接收声音的过程 ;