我知道如何在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。如果两个通道都受影响,我想您的转换器有故障。