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