/* Sound Functions */ ga_Sound* ga_sound_create(ga_Memory* in_memory, ga_Format* in_format) { ga_Sound* ret = gcX_ops->allocFunc(sizeof(ga_Sound)); ret->numSamples = ga_memory_size(in_memory) / ga_format_sampleSize(in_format); memcpy(&ret->format, in_format, sizeof(ga_Format)); ga_memory_acquire(in_memory); ret->memory = in_memory; ret->refMutex = gc_mutex_create(); ret->refCount = 1; return (ga_Sound*)ret; }
ga_DataSource* gau_data_source_create_memory(ga_Memory* in_memory) { gau_DataSourceMemory* ret = gcX_ops->allocFunc(sizeof(gau_DataSourceMemory)); ga_data_source_init(&ret->dataSrc); ret->dataSrc.flags = GA_FLAG_SEEKABLE | GA_FLAG_THREADSAFE; ret->dataSrc.readFunc = &gauX_data_source_memory_read; ret->dataSrc.seekFunc = &gauX_data_source_memory_seek; ret->dataSrc.tellFunc = &gauX_data_source_memory_tell; ret->dataSrc.closeFunc = &gauX_data_source_memory_close; ga_memory_acquire(in_memory); ret->context.memory = in_memory; ret->context.pos = 0; ret->context.memMutex = gc_mutex_create(); return (ga_DataSource*)ret; }