1

我对这个问题越来越疯狂。我正在使用 Dirac LE 执行音高转换,但该库总是会为结果转换添加大量点击。我需要在 AudioUnit 的回调函数中实时进行转换。

除了转换之外,所有设置都工作正常。

我认为问题在于从 8.24(AudioUnitSampleType)转换为短类型(由 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;
}

请问,任何人都可以发布一个工作示例吗?非常感谢!

4

0 回答 0