使用 C++数组直接在需要 byte[] 的 Java API 中

发布于 2025-01-08 07:14:51 字数 452 浏览 0 评论 0原文

就目前情况而言,我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

病毒体 2025-01-15 07:14:51

像这样的事情应该做。
我还没有编译这个,明智的做法是检查语法和规范。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文