Mercurial > molko
view src/libmlk-core/core/music.c @ 419:1b4e61bdb9ab
core: introduce err.h
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 12 Oct 2022 15:06:18 +0200 |
parents | 222045c513ec |
children | bf20b77968fd |
line wrap: on
line source
/* * music.h -- music support * * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <assert.h> #include <string.h> #include "error.h" #include "music.h" #include "vfs.h" #include "vfs_p.h" #include "sys_p.h" #define SOURCE(mus) ((const struct audiostream *)mus->handle)->source int music_open(struct music *mus, const char *path) { assert(mus); assert(path); if (!(mus->handle = audiostream_open(path))) return -1; return 0; } int music_openmem(struct music *mus, const void *buffer, size_t buffersz) { assert(mus); assert(buffer); if (!(mus->handle = audiostream_openmem(buffer, buffersz))) return -1; return 0; } int music_openvfs(struct music *mus, struct vfs_file *file) { assert(mus); assert(vfs_file_ok(file)); // TODO: implement this. (void)mus; (void)file; return 0; } int music_ok(const struct music *mus) { return mus && mus->handle; } int music_play(struct music *mus, enum music_flags flags) { assert(mus); if (flags & MUSIC_LOOP) alSourcei(SOURCE(mus), AL_LOOPING, AL_TRUE); else alSourcei(SOURCE(mus), AL_LOOPING, AL_TRUE); alSourceRewind(SOURCE(mus)); alSourcePlay(SOURCE(mus)); return 0; } void music_pause(struct music *mus) { assert(music_ok(mus)); alSourcePause(SOURCE(mus)); } void music_resume(struct music *mus) { assert(music_ok(mus)); alSourcePlay(SOURCE(mus)); } void music_stop(struct music *mus) { assert(music_ok(mus)); alSourceStop(SOURCE(mus)); } void music_finish(struct music *mus) { assert(mus); if (mus->handle) { music_stop(mus); audiostream_finish(mus->handle); } memset(mus, 0, sizeof (*mus)); }