返回首页

AAudio

时间:2019-09-30 来源:原创/投稿/转载作者:管理员点击: 162

  AAudio 是在 Android O 版本中引入的全新 Android C API。 此 API 是专为需要低延迟的高性能音频应用而设计。 应用通过读取并将数据写入流来与 AAudio 进行通信。

  AAudio 在您的应用与 Android 设备的音频输入端及输出端之间移动音频数据。 您的应用通过读取和写入以 AAudioStream 结构表示的音频流来传入和传出数据。 这些读取/写入调用可以是阻塞式调用或非阻塞式调用。

  音频设备是硬件接口或虚拟端点,用作连续的数字音频数据流的来源或接收器。 请勿将音频设备(内置麦克风或蓝牙耳机)与运行应用的Android 设备(手机或智能手表)混淆。

  Android 设备上的每个音频设备都具有唯一 ID。 您可使用该 ID 将音频流与特定音频设备绑定。 但是,在大多数情况下,您可以让 AAudio 选择默认的主要设备,无需自己指定。

  连接到流的音频设备确定该流是用于输入还是输出。 流只能在一个方向上移动数据。 定义流时,您还可以设置其方向。 打开流时,Android 会执行检查,确保音频设备与流方向一致。

  表示该流对其音频设备进行独占访问;该设备不可供任何其他音频流使用。 如果音频设备已在使用当中,流可能无法对其进行独占访问。 独占流的延迟时间往往较短,但连接断开的可能性也较大。 如果不再需要独占流,应尽快予以关闭,以便其他应用访问该设备。 独占流可以最大限度缩短延迟时间。

  允许 AAudio 混合音频。 AAudio 会将分配给同一设备的所有共享流混合。

  您可以在创建流时明确设置共享模式。 默认情况下,共享模式为SHARED。

  AAudio 可以独立执行样本转换。 例如,如果应用写入 FLOAT 数据,但 HAL 使用 PCM_I16,AAudio 可以自动转换样本。 转换可以在任一方向上发生。 如果应用要处理音频输入,最好验证输入格式,做好必要时转换数据的准备,如以下示例所示:

  如果您未指定 deviceId,则默认为主要输出设备。 如果您未指定流方向,则会默认为输出流。 对于所有其他参数,您可明确设置值,也可以完全不指定参数或将其设置为AAUDIO_UNSPECIFIED,让系统指派最佳值。

  创建流之后,验证其配置。 如果您已指定样本格式、采样率或每帧采样数,则这些设置不会变更。 如果您已指定共享模式或缓冲区容量,这些设置可能会变更,具体取决于流的音频设备能力,以及运行该流的 Android 设备。 作为一种良好的防御性编程习惯,您应该先检查流的配置,然后再使用。 您可使用相应函数检索与每项构建器设置对应的流设置:

  AAudio 流一般有五种稳定状态(本节末将介绍错误状态 Disconnected):

  仅当流处于 Started 状态时,数据才会通过流来流动。 要转换流所处的状态,请使用以下其中一个请求转换状态的函数:

【责任编辑:管理员】
随机推荐 更多>>