Android NDK sample 之 android-wavemaker

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

文章作者:魏超

发布时间:2021年08月14日 - 12:08

最后更新:2021年08月14日 - 13:08

原始链接:http://www.weichao.io/2021/08/14/Android-NDK-sample-之-android-wavemaker/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

---------------------本文结束---------------------