Андроид ндк смещение высоты тона

Я разрабатываю приложение для Android, используя собственный код cpp смещения высоты тона, доступный здесь:

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

приложение будет читать файлы WAV, изменять его высоту и затем записывать файл обратно на SD-карту. Чтение wav-файла и методы обратной записи работают нормально, но когда я применяю сдвиг высоты тона, а затем записываю, я возвращаю только статический сигнал, то есть исходный звук теряется и слышится только статический звук.

кажется, что есть проблема se при передаче данных из 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;
}

этот код вызывает метод smbPitchShift кода cpp.

из кода Java я передаю следующие значения:

float[] parr = new float[data.length];
parr = pitchShift(0.6f, (long)data.length, (long)2048, (long) 4, (float) sampleRate, data);

здесь data - массив с плавающей точкой, содержащий данные, извлеченные из wav-файла, и он находится в диапазоне [-1.0,1.0)

0 ответов

Другие вопросы по тегам