我正在使用此处提供的本机音高转换 cpp 代码为 android 开发应用程序:
www.dspdimension.com/admin/pitch-shifting-using-the-ft/
该应用程序将读取 wav 文件,更改其音高,然后将文件写回 sd 卡上。读取 wav 文件和回写方法工作正常,但是当我应用音高偏移然后写入时,我只返回静态,即原始音频丢失并且只听到静态..
似乎在将数据从 java 传递到 cpp 代码时存在 se 问题
谁能帮我这个?
cpp 代码在那个链接上,我在 cpp 中创建了一个函数来使用该代码:
JNIEXPORT jfloatArray JNICALL Java_com_pitch_PitchActivity_pitchShift (JNIEnv * pEnv, jobject pThis, jfloat pitchShift, jlong numSampsToProcess, jlong fftFrameSize, jlong osamp, jfloat sampleRate, jfloatArray inputdata) {
jfloat* ind,ata = pEnv->GetFloatArrayElements(inputdata,0);
float outdata[numSampsToProcess];
jfloatArray res;
res = pEnv->NewFloatArray(numSampsToProcess);
memset(outdata, 0, numSampsToProcess*sizeof(float));
smbPitchShift(pitchShift, numSampsToProcess, fftFrameSize, osamp, sampleRate, indata, outdata);
pEnv->SetFloatArrayRegion(res, 0, numSampsToProcess, outdata);
return res;
}
此代码调用 cpp 代码的 smbPitchShift 方法。
从 java 代码中,我传递了以下值:
float[] parr = new float[data.length];
parr = pitchShift(0.6f, (long)data.length, (long)2048, (long) 4, (float) sampleRate, data);
这里的data是一个float数组,包含从wav文件中提取的数据,范围为[-1.0,1.0)