由于Android O和AAudio相对较新,除了Android NDK API(其功能不如Android SDK API)以及AAudio的googlesamples示例外,没有太多文档或示例。我一直在看谷歌的例子,但是我想使用这个AAudioStream_write()函数,但他们没有给出任何例子。
以前是否有人使用过此写函数,并举例说明如何将其与sinewave或文件(例如.wav)一起使用?目前我刚刚创建了一个流,但我需要数据来输出声音。我在带有AudioTrack的Java层中完成了这个,但它与原生的不一样。
答案 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