annotate libcore/core/music.h @ 229:e71039d820a7

doc: improve documentation
author David Demelier <markand@malikania.fr>
date Thu, 19 Nov 2020 16:46:26 +0100
parents dd7c8d4321a3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
203
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * music.h -- music support
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef MOLKO_CORE_MUSIC_H
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MOLKO_CORE_MUSIC_H
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file music.h
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Music support.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 * This module provide support for playing music. In contrast to sounds only one
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 * music can be played at a time.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <stdbool.h>
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <stddef.h>
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * \brief Music flags.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 enum music_flags {
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 MUSIC_NONE, /*!< No flags. */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 MUSIC_LOOP = (1 << 0) /*!< Loop the music. */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 };
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 * \brief Music object handle.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 struct music {
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 void *handle; /*!< (*) Implementation handle. */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 };
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 * Open a music file.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 * \pre mus != NULL
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 * \pre path != NULL
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * \param mus the music object to initialize
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * \param path the path to the music file
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * \return False on errors.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 bool
226
dd7c8d4321a3 misc: miscellaneous cleanups
David Demelier <markand@malikania.fr>
parents: 203
diff changeset
58 music_open(struct music *mus, const char *path);
203
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 * Open a music from a buffer.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 * \pre mus != NULL
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 * \pre buffer != NULL
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * \param mus the music object to initialize
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 * \param buffer the buffer
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 * \param buffersz the buffer size
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 * \return False on errors.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 * \warning The buffer must exists until the sound object is closed.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 bool
226
dd7c8d4321a3 misc: miscellaneous cleanups
David Demelier <markand@malikania.fr>
parents: 203
diff changeset
72 music_openmem(struct music *mus, const void *buffer, size_t buffersz);
203
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 * Check if this music handle is properly loaded.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * \param mus the music to check (may be NULL)
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 bool
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 music_ok(const struct music *mus);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 * Start playing the given music
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 * This function will resume the playback since the beginning and will stop the
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 * current music. If the music playing is currently fading out this function
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 * will block until it has finished.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 * \pre mus != NULL
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * \param mus the music to start
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 * \param flags optional flags
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * \param fadein a fade in delay in milliseconds (0 to disable)
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 * \return False on errors.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 bool
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 music_play(struct music *mus, enum music_flags flags, unsigned int fadein);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 * Tells if music is playing.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 * You can call this function with any music even one that is not currently
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 * playing.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 bool
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 music_playing(void);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
106
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 * Pause the music playback.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 void
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 music_pause(void);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
112
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 * Resume the music playback.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 void
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 music_resume(void);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
118
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 * Stop the sound music.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 *
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 * \param fadeout a fade out delay in milliseconds (0 to disable)
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 void
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 music_stop(unsigned int fadeout);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
126
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 /**
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 * Close the associated resources.
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 *
229
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
130 * \pre mus != NULL
e71039d820a7 doc: improve documentation
David Demelier <markand@malikania.fr>
parents: 226
diff changeset
131 * \param mus the music object
203
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 */
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 void
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 music_finish(struct music *mus);
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
135
d3ef968745f5 core: rework audio API
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 #endif /* !MOLKO_CORE_MUSIC_H */