我知道如何在CoreAudio中移动音频的音调,但是由于某些原因,当我处理非交织数据时,我只能移动一个声道。如果我尝试左右移动声道,声音会变得不连贯。我似乎无法理解为什么会这样。

我在渲染回调中有以下代码:

        [output.outputDataSource output:output shouldFillAudioBufferList:ioData withNumberOfFrames:inNumberFrames];//<-puts audio file frames in ioData w/ EZAudio
        int channelCount = output.outputASBD.mFormatFlags & kAudioFormatFlagIsNonInterleaved ? ioData->mNumberBuffers : ioData->mBuffers[0].mNumberChannels;
        int frameSize = ioData->mBuffers[0].mDataByteSize / ((output.outputASBD.mBitsPerChannel/8) * channelCount);
        UInt32 frames = AEFloatConverterToFloat(_floatConverter,ioData,_floatBuffers,frameSize);
        float *left = ((float **) _floatBuffers)[0];
        float *right = ((float **) _floatBuffers)[1];
        smbPitchShift(0.5, frames, 1024, 4, 44100, left, left);
        smbPitchShift(0.5, frames, 1024, 4, 44100, right, right);//<- If I take this out the left side sounds okay. vice-versa
        AEFloatConverterFromFloat(_floatConverter, _floatBuffers, ioData, frameSize);

音高转换功能也在这里-> http://blogs.zynaptiq.com/bernsee/repo/smbPitchShift.cpp

最佳答案

frameSize变量是什么?你不能相信NumberFrames吗?无论哪种方式,我都会检查inNumberFrames,frameSize和frame是否对您的转换都一致。您还在上次转换时使用frameSize而不是frame。如果两个通道都受影响,我想您的转换器有故障。

07-27 13:40