android ndk音调转移

时间:2012-05-08 06:33:02

标签: android audio pitch-shifting

我正在使用本机提供的本地音高变换cpp代码为Android开发应用程序:

www.dspdimension.com/admin/pitch-shifting-using-the-ft /

应用程序将读取wav文件,更改其音高,然后在sd卡上写回文件。 读取wav文件和回写方法工作正常,但是当我应用音高转换然后写入时,我只回到静态,即原始音频丢失,只听到静电。

似乎在将数据从java传递到cpp代码时存在问题

任何人都可以帮我吗?

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);

这里的数据是一个float数组,包含从wav文件中提取的数据,它的范围是[-1.0,1.0)

0 个答案:

没有答案