有人可以提供Android Native的AAudio(Android O)写函数示例吗?

时间:2017-10-06 15:41:37

标签: android audio android-ndk

由于Android O和AAudio相对较新,除了Android NDK API(其功能不如Android SDK API)以及AAudio的googlesamples示例外,没有太多文档或示例。我一直在看谷歌的例子,但是我想使用这个AAudioStream_write()函数,但他们没有给出任何例子。

以前是否有人使用过此写函数,并举例说明如何将其与sinewave或文件(例如.wav)一起使用?目前我刚刚创建了一个流,但我需要数据来输出声音。我在带有AudioTrack的Java层中完成了这个,但它与原生的不一样。

1 个答案:

答案 0 :(得分:1)

AAudio中的write()是一个阻塞I / O函数。这意味着您可以只编写数据,并在数据被消耗时返回。

如果在没有指定回调函数的情况下创建AAudio流,那么AAudio将期望您读取()或写入()流。

您应该创建一个专用于生成音频数据并写入流的线程。基本流程是:

timeout = 1000000000; // one second, for example
open_stream
while(result >= 0 && whatever) {
    generate_audio_data()
    result = AAudioStream_write(stream, data, numFrames, timeout)
}
close_stream

generate_audio_data()函数可以是合成器,也可以从文件中读取等。

建议对合成器使用回调,因为回调线程具有高优先级,而合成器往往具有可预测的性能。 如果您是从网络或文件流式传输,那么阻止读/写()可能会更好。务必使缓冲区大到足以覆盖网络延迟。否则,您将从下溢中获得音频故障。

更多信息在这里: https://developer.android.com/ndk/guides/audio/aaudio/aaudio#reading-writing-streams