Я реализую передачу звука с помощью аудиоустройства RemoteIO, добавив обратный вызов рендеринга к входной области выходной шины (т.е. к динамикам).
Все работает плавно, ...
OSStatus RenderTone(
void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData)
{
SoundEngine * soundEngine = (SoundEngine *) inRefCon;
// grab data from the MIC (ie fill up ioData)
AudioUnit thisUnit = soundEngine->remoteIOUnit->audioUnit;
OSStatus err = AudioUnitRender(thisUnit,
ioActionFlags,
inTimeStamp,
1,
inNumberFrames,
ioData);
if (result)
{
printf("Error pulling mic data");
}
assert(ioData->mNumberBuffers > 0);
// only need the first buffer
const int channel = 0;
Float32 * buff = (Float32 *) ioData->mBuffers[channel].mData;
}
, пока я не добавлю эту последнюю строку.
Float32 * buff = (Float32 *) ioData->mBuffers[channel].mData;
С этой строкой нет ошибок, просто тишина.Без него я могу щелкнуть пальцами перед микрофоном и услышать его в наушниках.
РЕДАКТИРОВАТЬ: AudioBuffer buf0 = ioData-> mBuffers [0];// Достаточно вызвать сбой
Что происходит?
Это не ошибка, вызванная компилятором, оптимизирующим неиспользуемую переменную.Если я установлю buff ++;на следующей строке поведение такое же.хотя, возможно, компилятор все еще может обнаружить, что переменная фактически не используется.