как вы выделяете память для буфера в iOS

#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);