Как я могу записать сэмплы в AudioBuffer в Core Audio?

У меня есть код, который должен записать 16-битные сэмплы PCM из памяти в AudioBuffer.

// 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, которые я загружаю, используя соответствующий механизм.

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

1 ответ

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

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

Другие вопросы по тегам