android-ndk基音偏移

android-ndk基音偏移,android,audio,pitch-shifting,Android,Audio,Pitch Shifting,我正在为android开发一个应用程序,使用本机音高转换cpp代码,可在此处获得: www.dspdimension.com/admin/pitch-shift-using-the-ft/ 该应用程序将读取wav文件,改变其音高,然后将文件写回sd卡。 读取wav文件和写回方法工作正常,但当我应用音调偏移然后写入时,我只返回静态,即原始音频丢失,只听到静态 似乎在将数据从java传递到cpp代码时存在se问题 有人能帮我吗 cpp代码位于该链接处,我在cpp中创建了一个函数来使用该代码: JNI

我正在为android开发一个应用程序,使用本机音高转换cpp代码,可在此处获得:

www.dspdimension.com/admin/pitch-shift-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);

这里的数据是一个浮点数组,包含从wav文件中提取的数据,其范围为[-1.0,1.0

在没有看到任何代码的情况下,我怀疑是否有人能帮上忙o.6f是什么?这是实际的代码还是您刚刚重新键入了它的近似版本?0.6f是我想要进行音高转换的浮点值,根据代码文档,它可以在0.5到2.0范围内-当然-但您在上面的代码中有o.6f,而不是0.6f,这让我觉得这是一个重新键入的近似版本的代码,而不是实际的代码。你应该只发布实际的代码,即复制和粘贴。哦,对不起,是我的错误,它应该是0.6f,没有看到任何代码,我怀疑有人能帮上忙。什么是o.6f?这是实际的代码还是你刚刚重新输入的键入一个近似版本?0.6f是我想要用来进行音高偏移的浮点值,根据代码文档,它可以在0.5到2.0之间-当然-但是上面的代码中有o.6f,而不是0.6f,这让我认为这是代码的重新键入的近似版本,而不是实际代码。你应该永远只使用发布实际代码,即复制和粘贴。哦,对不起,是我的错误,它应该是0.6f,