0

我正在使用令人惊叹的 Superpowered 库 (SuperpoweredAndroidAudioIO) 进行低延迟音频录制。虽然基本概念对我来说很清楚,但我想将录制的音频(到达缓冲区)传回 Java 中的 InputStream(不录制到文件),然后我可以从中读取录制的音频并进行处理。

我想这个问题也可以更普遍地问 - 如何从 C++ 中定期更新的缓冲区中提供 Java 中的 InputStream?

4

1 回答 1

0

好吧,我在评论中收到的建议原来是一个简单且有效的解决方案: 在 C++ 中创建管道:

 if (pipe(pipefd) == -1) {
    __android_log_print(ANDROID_LOG_VERBOSE, "C++", "Error creating pipe");
 }
...

将文件描述符传递给 Java:

...
    return pipefd[0];
...

然后在 Java/Android 中:

private ParcelFileDescriptor.AutoCloseInputStream underlyingStream;
ParcelFileDescriptor pfd = ParcelFileDescriptor.adoptFd(getFD());
underlyingStream = new ParcelFileDescriptor.AutoCloseInputStream(pfd);

对我来说效果很好,但当然我仍然很高兴收到其他建议。

于 2017-12-03T10:04:00.720 回答