Example #1
0
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;
}
Example #2
0
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;
}