android - 在 Java-Android 和 JNI 之间发送/接收音频数组

标签 android c++ audio java-native-interface recording

我是 Android 编程领域的新手,我已经在 Internet 上对 Android 中的 JNI 实现进行了全面搜索。顺便说一句,有很多方法可以做到这一点,而且我没有找到太多关于 Android 的 C/C++ 中的 DSP 的文档。

我已经从录音(PCM 到 float )中获取了音频数据,我想将数据发送到 C/C++ 函数来处理这些数据。转换后,我想将数组返回到 Java Activity 以播放结果。是否有任何关于使用 JNI 发送和接收数组的简单示例或文档?

我正在使用 Windows 7、Eclipse 和 Cygwin。

提前致谢

最佳答案

应该很简单,

要将 byteArray 从 Java 传输到 C++,您可以考虑以下示例:

第 1 步:在将调用 native 方法的 java 类中声明该方法(在我的示例中是一个简单的 zip)

private native byte[] jniZipString(byte[] unpackedData, int datasize);

第 2 步:在 C++ 中使用 javah.exe 生成 header 和实现 [注意] 从 bin/classes foler 调用 javah(因为你的代码是为 android

javah -jni com.example.JavaClassWithNativeMethods

第三步:在C++中接收字节数组并转换为C++字节数组

jbyte* tempPointer = env->GetByteArrayElements(jInput, 0);
const char* cinput = (const char*) tempPointer;
int dataSize = (int)env->GetArrayLength(jInput)

第四步:处理您的数据

whatever you do to process the bytearray

第五步:将结果字节数组返回给java

jbyteArray result = (env)->NewByteArray(newDataSize);
(env)->SetByteArrayRegion(result, 0, newDataSize, (jbyte *) processedCharArray); 
return result;

关于android - 在 Java-Android 和 JNI 之间发送/接收音频数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506552/

相关文章:

html - 如何制作单击时播放音频的图像

将 PCM 16 位 LE 转换为 WAV

android - Ruffle 在移动浏览器(Chrome)上不起作用

c++ - 调用 QGLWidget::setFormat = 无绘图

android - EditText 没有自动更正等

c# - 如何在没有 Visual Studio 的情况下进行调试?

c++ - 是否可以在引发异常时记录异常?

touch - 在Kendo UI Mobile中单击时启用点击声音

java - 如何在我的 android 库中包含依赖项

android - 新屏幕不接收触地事件