Android端使用AAduio实现高性能音频

本文详细介绍了Android AAudio API的使用,包括音频设备、共享模式、音频格式、创建音频流、性能优化等方面,旨在实现低延迟、高性能的音频应用。AAudio提供了独占和共享模式,支持PCM音频格式,通过AAudioStreamBuilder创建和管理音频流,并通过读写操作传输数据。文章还讨论了音频流状态转换、回调函数、错误处理和性能优化策略,如调整缓冲区大小、使用高优先级线程回调和设置性能模式。
摘要由CSDN通过智能技术生成

AAudio 是在 Android O 版本中引入的全新 Android C API,与AAudio类似的是oboe库。此 API 专为需要低延迟的高性能音频应用而设计。应用通过读取数据并将数据写入流来与 AAudio 进行通信。AAudio 在应用与 Android 设备的音频输入端及输出端之间传输音频数据。应用通过读取和写入以 AAudioStream 结构表示的音频流来传入和传出数据。这些读写操作可以是阻塞式调用或非阻塞式调用。

Android平台有AudioTrack、AAudio和OpenSL三种方式播放音频,如下图所示: img

1、AAudio介绍

1.1 音频设备

音频设备是硬件接口或虚拟端点,用作连续的数字音频数据流的来源或接收器。每个流都连接到单个音频设备。

我们可调用AudioManager方法 getDevices() 来发现可用的音频设备。Android 设备上的每个音频设备都具有唯一ID,我们可使用该ID将音频流与特定音频设备绑定。但在大多数情况下,我们可以让 AAudio 选择默认设备。连接到流的音频设备负责确定该流是用于输入还是输出,因为流只能在一个方向传输数据。定义流时,我们可以指定其方向。打开流时,Android 会检查确保音频设备与流方向一致。

1.2 共享模式

AAudio的stream流具有两种共享模式:

AAUDIO_SHARING_MODE_EXCLUSIVE 表示该流对其音频设备进行独占访问;该设备不可供任何其他音频流使用。如果音频设备已在使用当中,流可能无法对其进行独占访问。独占流的延迟时间往往较短,但连接断开的可能性也较大。如果不再需要独占流,应尽快关闭,以便其他应用访问该设备。独占流可以最大限度缩短延迟时间。 AAUDIO_SHARING_MODE_SHARED 允许AAudio混合音频。AAudio会将分配给同一设备的所有共享流混合。 我们可以在创建流时指定共享模式。默认情况下,共享模式为SHARED。

1.3 音频格式

通过流传递的数据具有如下的数字音频属性:

音频格式 采样率 声道数 AAudio支持两种音频格式:AAUDIO_FORMAT_PCM_I16和AAUDIO_FORMAT_PCM_FLOAT

1.4 创建音频流

AAudio 库遵循构建者设计模式,并提供 AAudioStreamBuilder。

1.4.1 创建 AAudioStreamBuilder:

AAudioStreamBuilder *builder;
aaudio_result_t result = AAudio_createStreamBuilder(&builder);

1.4.2 构建参数,其中参数选项如下:

AAudioStreamBuilder_setDeviceId(builder, deviceId);
AAudioStreamBuilder_setDirection(builder, direction);
AAudioStreamBuilder_setSharingMode(builder, mode);
AAudioStreamBuilder_setSampleRate(builder, sampleRate);
AAudioStreamBuilder_setChannelCount(builder, channelCount);
AAudioStreamBuilder_setFormat(builder, format);
AAudioStreamBuilder_setBufferCapacityInFrames(builder, frames);

1.4.3 用AAudioStreamBuilder创建流:

AAudioStream *stream;
result = AAudioStreamBuilder_openStream(builder, &stream);

1.4.4 删除AAudioStreamBuilder:

AAudioStreamBuilder_delete(builder);

1.5 使用AAudio音频流

1.5.1 状态转换

AAudio有5种状态:

  • 打开</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值