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

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

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 : 音频数据从音频设备输入到手机 , 这是手机接收声音的过程 ;


目录
相关文章
|
3天前
|
Android开发
Android Mediatek 增加Recovery模式下读cmdline的强制工厂重置选项
Android Mediatek 增加Recovery模式下读cmdline的强制工厂重置选项
13 0
|
3月前
|
XML 前端开发 测试技术
Android基础知识:解释Android的MVC和MVP模式。
Android基础知识:解释Android的MVC和MVP模式。
32 0
|
2天前
|
运维 网络协议 Linux
Android 双网卡配置为连接到Android主机的PC提供外网访问(1)
Android 双网卡配置为连接到Android主机的PC提供外网访问(1)
14 0
|
3天前
|
Android开发
Android 动态修改参数配置
Android 动态修改参数配置
11 0
|
4月前
|
Java 开发工具 Android开发
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
163 0
|
4月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
151 0
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
18天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。