Voice_pool* new_Voice_pool(uint16_t size) { //assert(size >= 0); Voice_pool* pool = memory_alloc_item(Voice_pool); if (pool == NULL) return NULL; pool->size = size; pool->state_size = 0; pool->new_group_id = 0; pool->voices = NULL; pool->group_iter_offset = 0; pool->group_iter = *VOICE_GROUP_AUTO; if (size > 0) { pool->voices = memory_alloc_items(Voice, size); if (pool->voices == NULL) { memory_free(pool); return NULL; } } for (int i = 0; i < size; ++i) { pool->voices[i] = new_Voice(); if (pool->voices[i] == NULL) { for (--i; i >= 0; --i) { del_Voice(pool->voices[i]); } memory_free(pool->voices); memory_free(pool); return NULL; } } return pool; }
Audio_buffer* new_Audio_buffer(uint32_t size) { //assert(size >= 0); assert(size <= KQT_AUDIO_BUFFER_SIZE_MAX); Audio_buffer* buffer = memory_alloc_item(Audio_buffer); if (buffer == NULL) return NULL; // Sanitise fields buffer->size = size; for (int i = 0; i < KQT_BUFFERS_MAX; ++i) buffer->bufs[i] = NULL; // Init buffers if (buffer->size > 0) { for (int i = 0; i < KQT_BUFFERS_MAX; ++i) { buffer->bufs[i] = memory_alloc_items(kqt_frame, size); if (buffer->bufs[i] == NULL) { //fprintf(stderr, "Calling destroy at %s:%d\n", __FILE__, __LINE__); del_Audio_buffer(buffer); return NULL; } } } // fprintf(stderr, "Created buffer %p with arrays %p and %p\n", // (void*)buffer, (void*)buffer->bufs[0], (void*)buffer->bufs[1]); Audio_buffer_clear(buffer, 0, size); return buffer; }