由于Android O和AAudio相对较新,因此除了Android NDK API(实际上不如Android SDK API)和AAudio的googlesamples示异常(exception),没有太多文档或示例。我一直在看google的示例,但是我想使用这个AAudioStream_write()函数,但他们没有给出任何示例。

以前有人使用过此写入功能,并且可以举例说明如何与正弦波或文件(例如.wav)一起使用吗?目前,我刚刚创建了一个流,但是我需要数据来输出声音。我已经在Java层中使用AudioTrack做到了这一点,但它与本机实际上并不相同。

最佳答案

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

08-18 09:39