使用 C++数组直接在需要 byte[] 的 Java API 中
就目前情况而言,我有一个 C++ 应用程序,它有一个包含 PCM 音频数据的 unsigned char*
缓冲区。我需要使用此数据通过 JNI(从 C++ 到 Java)在 AudioTrack
实例上调用 Android API 方法 AudioTrack.write()
,我想避免这样做时要制作一份额外的副本。我可以这样做吗?
AudioTrack 接受 Java byte[] 作为其参数之一
,应该对应于我的 PCM 数据的参数 (unsigned char*
)。
抱歉,如果这是重复的......很难有效地搜索这种东西。
As it stands, I have a C++ app that has a unsigned char*
buffer containing PCM audio data. I need to call the Android API method AudioTrack.write()
on an instance of AudioTrack
over JNI (from C++ to Java) with this data, and I would like to avoid making an extra copy in doing so. Can I do this?
AudioTrack accepts as one of its arguments a Java byte[]
, the argument that should correspond to my PCM data (unsigned char*
).
Sorry if this is a duplicate... it's hard to effectively search for this kind of thing.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
像这样的事情应该做。
我还没有编译这个,明智的做法是检查语法和规范。
jbyteArray 字节数组;
byteArray = env->NewByteArray(audioDataLength);
env->SetByteArrayRegion(byteArray, 0, audioDataLength , (jbyte*) audioData);
其中audioDataLength是char*audioData的长度
Something like this should do.
I haven't compiled this, and it would be wise to check the syntax also with the specs.
jbyteArray byteArray;
byteArray = env->NewByteArray(audioDataLength);
env->SetByteArrayRegion(byteArray, 0, audioDataLength , (jbyte*) audioData);
Where audioDataLength is the length of the char* audioData