由于Android O和AAudio相对较新,除了Android NDK API (实际上不如Android SDK API)和AAudio的good示例示例之外,没有太多的文档或示例。我一直在看谷歌的例子,但是我想使用这个AAudioStream_write()函数,但是他们没有给出任何例子。
有没有人使用过这个写函数,并可以给出一个例子,如何使用它与正弦波或文件(例如。.wav)?目前我刚刚创建了一个流,但我需要数据来输出声音。我已经用AudioTrack在Java层实现了这一点,但它与本机并不完全相同。
发布于 2018-05-18 03:31:36
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()函数可以是合成器,也可以从文件中读取,等等。
建议对合成器使用回调,因为回调线程具有高优先级,并且合成器往往具有可预测的性能。如果您是从网络或文件进行流式传输,那么阻塞read/write()可能更好。请确保您的缓冲区足够大,以覆盖网络延迟。否则,您将从下溢中获得音频毛刺。
更多信息在这里:https://developer.android.com/ndk/guides/audio/aaudio/aaudio#reading-writing-streams
https://stackoverflow.com/questions/46609365
复制相似问题