bool audio_loadStream(audio_StreamSource *source, char const * filename) { // TODO select approprate decoder (there is only one right now though!) source->decoder = streamDecoders[0]; char const* infile = filesystem_locateReadableFile(filename); bool good = source->decoder->openFile(infile, &source->decoderData); if(!good) { return false; } audio_SourceCommon_init(&source->common); alGenBuffers(preloadBufferCount, source->buffers); initialPreload(source); source->looping = false; // Make copy of filename (allows simple free on the filename when closing a stream) source->filename = malloc(sizeof(char) * (strlen(filename) + 1)); strcpy(source->filename, filename); return good; }
void audio_StaticSource_clone(audio_StaticSource const* oldSrc, audio_StaticSource * newSrc) { audio_SourceCommon_init(&newSrc->common); audio_StaticBuffer_ref(oldSrc->buffer); newSrc->buffer = oldSrc->buffer; alSourcei(newSrc->common.source, AL_BUFFER, newSrc->buffer->buffer); }
bool audio_loadStream(audio_StreamSource *source, char const * filename) { // TODO select approprate decoder (there only one right now though!) source->decoder = streamDecoders[0]; bool good = source->decoder->openFile(filename, &source->decoderData); if(!good) { return false; } audio_SourceCommon_init(&source->common); alGenBuffers(2, source->buffers); initialPreload(source); source->looping = false; source->filename = malloc(sizeof(char) * (strlen(filename) + 1)); strcpy(source->filename, filename); return good; }
bool audio_loadStatic(audio_StaticSource *source, char const * filename) { while(filename[0] == '/') { ++filename; } char const* infile = filesystem_locateReadableFile(filename); audio_SourceCommon_init(&source->common); source->buffer = audio_StaticBuffer_new(); // decoder shall close the file bool loaded = staticDecoders[0]->loadFile(source->buffer->buffer, infile); if(!loaded) { audio_StaticBuffer_free(source->buffer); audio_SourceCommon_free(&source->common); return false; } alSourcei(source->common.source, AL_BUFFER, source->buffer->buffer); return true; }