Как я могу записать сэмплы в 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
если ваше аудио уже подготовлено.