Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 移动非交错浮动的基音_Ios_Objective C_Cocoa Touch_Audio_Core Audio - Fatal编程技术网

Ios 移动非交错浮动的基音

Ios 移动非交错浮动的基音,ios,objective-c,cocoa-touch,audio,core-audio,Ios,Objective C,Cocoa Touch,Audio,Core Audio,我知道如何在CoreAudio中移动音频的音调,但由于某些原因,当我处理非交互数据时,我只能移动一个通道。如果我试着改变左右声道,声音就会变得起伏。我似乎不明白它为什么会这样 我在渲染回调中有以下代码: [output.outputDataSource output:output shouldFillAudioBufferList:ioData withNumberOfFrames:inNumberFrames];//<-puts audio file frames in

我知道如何在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);
[output.outputDataSource输出:输出应填充音频缓冲列表:Iodatawithnumberofframes:inNumberFrames]//mNumberBuffers:ioData->mBuffers[0].mNumberChannels;
int frameSize=ioData->mBuffers[0].mDataByteSize/((output.outputASBD.mBitsPerChannel/8)*channelCount);
UInt32 frames=AEFloatConverterToFloat(_floatConverter,ioData,_floatBuffers,frameSize);
浮点*左=((浮点**)_floatBuffers)[0];
浮动*右=((浮动**)u浮动缓冲区)[1];
smbPitchShift(0.5,帧,1024,44100,左,左);

smbPitchShift(0.5,帧,1024,44100,右,右);//

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

我查看了基音转换函数的标题,看起来osamp参数用于调用之间的过度采样。因此,如果我读得正确,这意味着你要么使用两个独立的基音移位器(每个通道一个),要么将osamp改为零,从而导致质量损失。

这不是c。我把它推迟到Objto-C,它是客观的。C.WimMeli我认为错误的部分是C部分,函数是C++,我不理解第一行,或者是C或C++。@ WimMelok,我只是说主要的部分是错误的,没有ObjuleC开发人员会理解没有C或C++知识。我甚至评论了这个函数对右边的it@Wimmel:第一行是Object-C/C++消息发送(也称为函数调用)。其余的是C,尽管前缀为
\uuuu
的变量可以直接访问IVAR,IVAR是类属性的存储。两者都返回4096。我可以移动一个通道,并将第二个通道设置为第一个通道。但这意味着基本上是单声道的。