2015-01-03 2 views
0

У меня есть код, которому необходимо записать 16-битные образцы PCM из памяти в AudioBuffer.Как я могу записать образцы в AudioBuffer в Core Audio?

// Completely override the output callback function 
- (void) 
       output:(EZOutput *)output 
callbackWithActionFlags:(AudioUnitRenderActionFlags *)ioActionFlags 
      inTimeStamp:(const AudioTimeStamp *)inTimeStamp 
      inBusNumber:(UInt32)inBusNumber 
     inNumberFrames:(UInt32)inNumberFrames 
       ioData:(AudioBufferList *)ioData { 
    for (int i = 0; i < ioData->mNumberBuffers; i++) { 
     AudioBuffer audioBuffer = ioData->mBuffers[i]; 
     for (int j = 0; j < audioBuffer.mDataByteSize; j++) { 
      audioBuffer.mData[j]; //void* how do I know what this expects?? 
     } 
    } 
    // Fill the ioData with your audio data from anywhere 
} 

Я использую рамки EZAUdio от https://github.com/syedhali/EZAudio, чтобы помочь воспроизвести некоторые PCM аудио данные, которые я загрузить с помощью properietary механизма.

Как я могу хранить буфер типа void *? Это не просто указатель на произвольное местоположение.

ответ

0

Формат данных, которые ожидает буфер, указан -audioStreamBasicDescription в EZOutput. Это возвращает структуру AudioStreamBasicDescription, которую вы можете прочитать для определения количества каналов, битов на канал и т. Д.

Чтобы написать void *, вы передаете его соответствующему типу перед записью, если вы обрабатываете отдельные образцы, или вы звоните memcpy, если ваш звук уже подготовлен.