Я пытаюсь реализовать воспроизведение звука PCM, полученного с удаленного сервера через сокет. Вот мой предыдущий вопрос ссылка. Это отлично работает, так как я использую круговой буфер, чтобы всегда подавать входящий буфер.
Однако у меня есть проблема, связанная с тем, что создается огромный шумовой звук, если у меня нет буфера, подаваемого на мой выход. Это происходит, когда я начинаю использовать AudioOutputUnitStart(_audioUnit) и когда нет буфера для воспроизведения.
Я подозреваю, что мне нужно исправить это в моей функции OutputRenderCallback ниже, или, может быть, мне нужно сделать что-то еще:
static OSStatus OutputRenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData){
Test *output = (__bridge Test*)inRefCon;
TPCircularBuffer *circularBuffer = [output outputShouldUseCircularBuffer];
if( !circularBuffer ){
SInt32 *left = (SInt32*)ioData->mBuffers[0].mData;
for(int i = 0; i < inNumberFrames; i++ ){
left[ i ] = 0.0f;
}
return noErr;
};
int32_t bytesToCopy = ioData->mBuffers[0].mDataByteSize;
SInt16* outputBuffer = ioData->mBuffers[0].mData;
uint32_t availableBytes;
SInt16 *sourceBuffer = TPCircularBufferTail(circularBuffer, &availableBytes);
int32_t amount = MIN(bytesToCopy,availableBytes);
memcpy(outputBuffer, sourceBuffer, amount);
TPCircularBufferConsume(circularBuffer,amount);
return noErr;
}
Я очень ценю вашу помощь. Спасибо.