我正在使用惊人的Superpowered库(SuperpoweredAndroidAudioIO)进行低延迟的音频录制。虽然基本概念对我来说很清楚,但我希望将录制的音频(到达缓冲区)传递回Java中的InputStream (无需录制到文件中),然后我可以从中读取录制的音频并处理它。
我想这个问题也可以更普遍地被问到 - 如何用C ++定期更新的缓冲区为Java输入一个InputStream?
答案 0 :(得分: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);
对我来说工作很好,但我当然仍然乐意接受其他建议。