Mercurial > molko
annotate libcore/core/sound.c @ 169:eb0a7ab71023
misc: extreme cleanup, closes #2506
While here, remove unneeded stuff.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 20 Oct 2020 17:39:13 +0200 |
parents | 789b23e01f52 |
children | d3ef968745f5 |
rev | line source |
---|---|
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * sound.c -- sound support |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdio.h> |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <SDL_mixer.h> |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
169
eb0a7ab71023
misc: extreme cleanup, closes #2506
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
24 #include "error.h" |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include "sound.h" |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 bool |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 sound_open(struct sound *snd, const char *path) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 assert(snd); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 assert(path); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 if (!(snd->handle = Mix_LoadMUS(path))) |
169
eb0a7ab71023
misc: extreme cleanup, closes #2506
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
34 return errorf("%s", SDL_GetError()); |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 return true; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 bool |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 sound_openmem(struct sound *snd, const void *buffer, size_t buffersz) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 assert(snd); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 assert(buffer); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 SDL_RWops *ops; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 if (!(ops = SDL_RWFromConstMem(buffer, buffersz)) || |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 !(snd->handle = Mix_LoadMUS_RW(ops, true))) |
169
eb0a7ab71023
misc: extreme cleanup, closes #2506
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
49 return errorf("%s", SDL_GetError()); |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 return true; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 bool |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 sound_play(struct sound *snd) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 assert(snd); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 int n = 1; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 if (snd->flags & SOUND_LOOP) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 n = -1; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 if (Mix_PlayMusic(snd->handle, n) < 0) |
169
eb0a7ab71023
misc: extreme cleanup, closes #2506
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
64 return errorf("%s", SDL_GetError()); |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 return true; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 void |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 sound_pause(struct sound *snd) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 /* Not needed yet. */ |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 (void)snd; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 Mix_PauseMusic(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 void |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 sound_resume(struct sound *snd) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 /* Not needed yet. */ |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 (void)snd; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 Mix_ResumeMusic(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 void |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 sound_stop(struct sound *snd) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 /* Not needed yet. */ |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 (void)snd; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 Mix_HaltMusic(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 void |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 sound_finish(struct sound *snd) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 assert(snd); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 if (snd->handle) { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 Mix_HaltMusic(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 Mix_FreeMusic(snd->handle); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 memset(snd, 0, sizeof (*snd)); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 } |