我对这个问题感到疯狂。我正在使用Dirac LE来执行音高变换,但是库总是会为最终转换添加大量点击。我需要在AudioUnit的Callback函数中实时进行转换。
除转换外,所有设置都正常。
我认为问题是从8.24(AudioUnitSampleType)转换为short类型(由Dirac使用)并返回到8.24。
for(int i=0; i<inNumberFrames; i++) {
faudioIn[0][i] = (SInt16)(outSamplesChannelLeft[i] >> 9);
faudioIn2[0][i] = (SInt16)(outSamplesChannelRight[i] >> 9);
}
long framesOut = DiracFxProcess(1.0, 1.0, faudioIn, faudioOut, inNumberFrames, THIS.mDirac1);
long framesOut2 = DiracFxProcess(1.0, 1.0, faudioIn2, faudioOut2, inNumberFrames, THIS.mDirac2);
for(int i=0; i<inNumberFrames; i++) {
UInt32 val = (faudioOut[0][i]<0)?0xFF000000:0x00000000;
outSamplesChannelLeft[i] = (faudioOut[0][i] << 9 ) | val;
val = (faudioOut2[0][i]<0)?0xFF000000:0x00000000;
outSamplesChannelRight[i] = (faudioOut2[0][i] << 9) | val;
}
拜托,任何人都可以发布一个有效的例子吗? 非常感谢!