Android NDK sample 之 android-wavemaker

本文最后更新于:1 年前

Reference


启动页

手指在空白区域按下时播放声音,抬起后停止播放声音。


AAudio 基础

状态机

API

Functions|描述|评论
–|–
AAudio_createStreamBuilder|创建可用于打开流的 StreamBuilder。|deviceId 最初未指定,这意味着将使用当前的默认设备。
默认方向是 AAUDIO_DIRECTION_OUTPUT。默认共享模式为 AAUDIO_SHARING_MODE_SHARED。 数据格式、samplesPerFrames 和 sampleRate 未指定,将在设备打开时由设备选择。
AAudioStreamBuilder_delete() 在您使用完构建器后必须调用。
AAudioStreamBuilder_setFormat|请求样本数据格式,例如 AAUDIO_FORMAT_PCM_I16。|如果不调用此函数,则默认值为 AAUDIO_UNSPECIFIED。然后在打开流时会选择最佳值。打开具有未指定值的流后,应用程序必须查询实际值,该值可能因设备而异。
如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。
AAudioStreamBuilder_setChannelCount|为流请求多个通道。|如果不调用此函数,默认值为 AAUDIO_UNSPECIFIED。然后将在打开流时选择最佳值。打开具有未指定值的流后,应用程序必须查询实际值,该值可能因设备而异。
如果指定了确切值,则打开的流将使用该值。 如果无法使用指定值打开流,则打开将失败。
AAudioStreamBuilder_setPerformanceMode|设置请求的性能模式。|支持的模式有 AAUDIO_PERFORMANCE_MODE_NONE、AAUDIO_PERFORMANCE_MODE_POWER_SAVING * 和 AAUDIO_PERFORMANCE_MODE_LOW_LATENCY。
如果不调用此函数,默认值为 AAUDIO_PERFORMANCE_MODE_NONE。
您可能无法获得您请求的模式。您可以调用 AAudioStream_getPerformanceMode() 来找出流的最终模式。
AAudioStreamBuilder_setDataCallback|请求 AAudio 在流运行时调用此函数。|请注意,使用此回调时,音频数据将作为参数传入或传出函数。因此,您不能在具有活动数据回调的同一流上调用 AAudioStream_write() 或 AAudioStream_read()。
回调函数将在 AAudioStream_requestStart() 被调用后开始被调用。调用 AAudioStream_requestPause() 或 AAudioStream_requestStop() 后,它将停止调用。
此回调函数将在 AAudio 拥有的实时线程上调用。低延迟流可能具有比普通流更高优先级的回调线程。 有关详细信息,请参阅 AAudioStream_dataCallback。
请注意,永远不会从多个线程同时调用 AAudio 回调。
AAudioStreamBuilder_setErrorCallback|如果发生任何错误或流断开,请求 AAudio 调用此函数。|例如,如果耳机或 USB 设备被拔出导致流的设备不可用或“断开连接”,则会调用它。另一个可能的错误原因是超时或意外的内部错误。
作为响应,此函数应发出信号或创建另一个线程来停止和关闭此流。然后另一个线程可以在另一个设备上重新打开一个流。不要直接从此回调停止或关闭流,或重新打开新流。
由于应用程序的操作,例如停止或关闭流,将不会调用此回调。
请注意,永远不会从多个线程同时调用 AAudio 回调。
AAudioStreamBuilder_openStream|根据 StreamBuilder 中的选项打开流。|完成流后必须调用 AAudioStream_close() 以恢复内存并释放相关资源。
AAudioStream_getSampleRate|
AAudioStream_setBufferSizeInFrames|这可用于通过更改将发生阻塞的阈值来调整缓冲区的延迟。|通过将其与 AAudioStream_getXRunCount() 相结合,可以在运行时为每个设备调整延迟。
这不能设置为高于 AAudioStream_getBufferCapacityInFrames()。
请注意,您可能无法获得您要求的确切尺寸。您可以检查返回值或调用 AAudioStream_getBufferSizeInFrames() 以查看实际最终大小是多少。
AAudioStream_requestStart|异步请求开始播放流。|对于输出流,应该在开始之前写入流以填充缓冲区。否则会下溢。在此调用之后,状态将处于 AAUDIO_STREAM_STATE_STARTING 或 AAUDIO_STREAM_STATE_STARTED。
AAudioStreamBuilder_delete|删除与 StreamBuilder 关联的资源。
AAudioStream_requestStop|流停止的异步请求。|当前缓冲的所有数据播放完毕后,流将停止。在此调用之后,状态将处于 AAUDIO_STREAM_STATE_STOPPING 或 AAUDIO_STREAM_STATE_STOPPED。
AAudioStream_close|删除与 AAudioStreamBuilder_openStream() 创建的流关联的内部数据结构。|如果 AAudioStream_release() 没有被调用,那么它会被自动调用。


代码

android-wavemaker


分析



Android NDK sample 之 android-wavemaker
https://weichao.io/4b5e292bd6f0/
作者
魏超
发布于
2021年8月14日
更新于
2022年12月4日
许可协议