开发者社区> 韩曙亮> 正文

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )(二)
【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )(二)
33 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
17050 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24840 0
【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )(一)
【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )(一)
39 0
如何配置Android Studio的各种颜色设置
1、设置主界面的颜色 Android Studio 左上角--->File--->Settings(快捷键Ctrl+Alt+S)打开配置界面 AndrroidStudio设置界面 点击Editor--->General--->点击右侧代码区...
1274 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18072 0
设置Android设备在睡眠期间始终保持WLAN开启的代码实现
MainActivity如下:package cc.ab; import android.os.Bundle; import android.provider.
925 0
+关注
韩曙亮
专注 Android 领域
2605
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载