iOS smbPitchShift не работает

Поэтому я пытаюсь интегрировать известный алгоритм smbPitchShift в мой проект, но входной и выходной буфер одинаковы. Алгоритм smbPitchShift не изменяет выборки в буфере.

Вот что я делаю в обратном вызове после рендеринга:

OSStatus MyAURenderCallback (void                        *inRefCon,
                             AudioUnitRenderActionFlags  *ioActionFlags,
                             const AudioTimeStamp        *inTimeStamp,
                             UInt32                      inBusNumber,
                             UInt32                      inNumberFrames,
                             AudioBufferList             *ioData
                             )
{
    if (*ioActionFlags == kAudioUnitRenderAction_PostRender) {
        NSLog(@"render");
        SBPitchShifter *self = (__bridge SBPitchShifter *)inRefCon;

        float *fBuffer = (float *)(malloc(sizeof(float)*inNumberFrames));

        int stride = 2;
        vDSP_vflt16((SInt16 *)ioData->mBuffers[0].mData, stride, (float *)fBuffer, stride, inNumberFrames);

        smbPitchShift(2.0, inNumberFrames, inNumberFrames, 4, self.linearPCMASBD.mSampleRate, fBuffer, fBuffer);

        vDSP_vfixr16((float *)fBuffer, stride, (SInt16 *)ioData->mBuffers[0].mData, stride, inNumberFrames);

        free(fBuffer);
    }
    return noErr;
};

Звук звучит так же нормально, так как высота звука будет установлена ​​на 1. Есть идеи?:)

1 ответ

Решение

Я также попробовал флаг kAudioUnitRenderAction_PreRender, но он не сработал. Кажется, я использовал функции vDSP из фреймворка Accelerate неправильно. Я использовал AEFloatConverter, и это помогло;)

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