#ios #memory #audio #memory-management #buffer
#iOS #память #Аудио #управление памятью #буфер
Вопрос:
У меня есть тип данных AudioQueueBufferRef, и я хочу выделить память для буферов, но я не хочу связывать ее с очередью. Следовательно, я не могу использовать AudioQueueAllocateBufferWithPacketDescription. Каков общий способ выделения памяти для любого буфера?
Я попробовал malloc, но это не сработало
for(i=0;i<numBuffers;i ){
AudBuf[i] = (AudioQueueBufferRef)malloc(sizeof(AudioQueueBuffer));
}
Комментарии:
1. Я попробовал malloc, но это не сработало.
2. Что вы подразумеваете под "это не сработало"? Какую ошибку вы получаете и на каком этапе (компиляция, время выполнения и т.д.)?
3. Кроме того,
AudioQueueBuffer
это структура данных, которая содержит указатель на начало данных, поэтому использованиеsizeof
не является правильным способом выделения буфера.4. Но разве не так вы узнаете размер структуры. Я думаю, то, что вы говорите, - это AudioQueueBufferRef, который является указателем на AudioQueueBuffer. Итак, как мне выделить память для буфера? Не работает, например, я получаю EXC_BAD_ACCESS. Я предполагаю, потому что память не была выделена.
5.
malloc
получает в качестве входных данных количество байтов, которое вы хотите выделить. Если вы хотите, чтобы указательint *ip
указывал на массив из 1000 целых чисел, вам нужно выделить1000*sizeof(int)
байты. Это отличается отsizeof(ip)
, который даст вам размер типа данных "указатель на int". Вы должны знать тип данных ваших выборок и длину буфера, а затем выделятьnumOfSamples * sizeof(sampleDataType)
байты.
Ответ №1:
Взгляните на пример потока аудиофайлов от Apple.
Ответ №2:
AudioQueueBuffer dummyAQB;
audioQueueBuffer = malloc(sizeof(dummyAQB)*kNumAQBufs);