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, и это помогло;)