Вам не нужно разыгрывать его.Это нормально как (void *).Он содержит образцы 8,24-битных целочисленных значений с фиксированной точкой.Я знаю, что это может быть пугающим на первый взгляд.Другие свойства AudioBuffer описывают, если есть более одного канала.Если это так, они чередуются.
Что вы можете с этим сделать, это написать функцию обратного вызова рендеринга, как описано в Руководство по хостингу аудиоустройства , и начать подачу кадров из буфера ввывод, следовательно, добиться воспроизведения звука.Преимущество состоит в том, что вы можете манипулировать данными буфера перед отправкой их на выход, таким образом достигая специальных эффектов, таких как изменение скорости воспроизведения, смещение высоты тона, задержка, эхо и т. Д.
Вывод в функцию рендерингав простом случае это что-то вроде этого:
OSStatus renderInput(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
float *outA = (float*)ioData->mBuffers[0].mData;
float *outB = (float*)ioData->mBuffers[1].mData;
for (int i=0; i<inNumberFrames; i++) {
outA[i] = myBuffer.mData[i];
outB[i] = myBuffer.mData[i];
}
}
Это не обязательно пример рабочего кода, я просто написал это с самого начала.Но оно передает основную идею.