Mercurial > molko
annotate examples/example-audio/main.c @ 298:196264679079
misc: remove usage of bool
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 10 Mar 2021 18:49:08 +0100 |
parents | cd5bdb995052 |
children | 3638b39ef2bf |
rev | line source |
---|---|
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
2 * example-audio.c -- show how to use sounds and music |
103
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 |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
153
diff
changeset
|
19 #include <core/core.h> |
125
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
20 #include <core/event.h> |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
21 #include <core/game.h> |
203
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
22 #include <core/music.h> |
125
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
23 #include <core/painter.h> |
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
24 #include <core/panic.h> |
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
25 #include <core/sound.h> |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
26 #include <core/state.h> |
125
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
27 #include <core/sys.h> |
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
28 #include <core/util.h> |
d59efa737fcc
cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents:
115
diff
changeset
|
29 #include <core/window.h> |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
31 #include <ui/label.h> |
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
32 #include <ui/theme.h> |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
153
diff
changeset
|
33 #include <ui/ui.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
145
diff
changeset
|
34 |
263
cd5bdb995052
cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents:
241
diff
changeset
|
35 #define W 1280 |
cd5bdb995052
cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents:
241
diff
changeset
|
36 #define H 720 |
cd5bdb995052
cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents:
241
diff
changeset
|
37 #define PATH(r) util_pathf("%s/mlk-adventure/%s", sys_dir(SYS_DIR_DATA), r) |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
203
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
39 static struct music music; |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 static struct sound sound; |
203
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
41 |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
42 static struct label label_music = { |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
43 .text = "Music: <Space> play, <f> fade in, <s> fade out, <p> pause, <r> resume, <q> stop, <l> loop.", |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 .x = 10, |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 .y = 10, |
145
7f1af54bb35a
core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
46 .flags = LABEL_FLAGS_SHADOW |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 }; |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
203
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
49 static struct label label_sound = { |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
50 .text = "Sound: click anywhere to pop a sound.", |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
51 .x = 10, |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
52 .y = 30, |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
53 .flags = LABEL_FLAGS_SHADOW |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
54 }; |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
55 |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 static void |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 init(void) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 { |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
59 if (core_init("fr.malikania", "audio") < 0 || ui_init() < 0) |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 panic(); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
61 if (window_open("Example - Audio", W, H) < 0) |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
153
diff
changeset
|
62 panic(); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
63 if (music_open(&music, PATH("music/vabsounds-romance.ogg")) < 0 || |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
64 sound_open(&sound, PATH("sounds/fire.wav")) < 0) |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 panic(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 } |
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 static void |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 quit(void) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 window_finish(); |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
153
diff
changeset
|
72 ui_finish(); |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
153
diff
changeset
|
73 core_finish(); |
103
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 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 static void |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
77 handle(struct state *st, const union event *ev) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
78 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
79 (void)st; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
80 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
81 switch (ev->type) { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
82 case EVENT_CLICKDOWN: |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
83 if (sound_play(&sound, -1, 0) < 0) |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
84 panic(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
85 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
86 case EVENT_KEYDOWN: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
87 switch (ev->key.key) { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
88 case KEY_f: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
89 music_play(&music, 0, 500); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
90 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
91 case KEY_s: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
92 music_stop(500); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
93 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
94 case KEY_p: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
95 music_pause(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
96 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
97 case KEY_r: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
98 music_resume(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
99 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
100 case KEY_q: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
101 music_stop(0); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
102 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
103 case KEY_l: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
104 music_play(&music, MUSIC_LOOP, 0); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
105 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
106 case KEY_SPACE: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
107 music_play(&music, 0, 0); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
108 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
109 default: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
110 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
111 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
112 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
113 case EVENT_QUIT: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
114 game_quit(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
115 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
116 default: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
117 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
118 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
119 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
120 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
121 static void |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
122 draw(struct state *st) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
123 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
124 (void)st; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
125 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
126 painter_set_color(0x006554ff); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
127 painter_clear(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
128 label_draw(&label_music); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
129 label_draw(&label_sound); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
130 painter_present(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
131 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
132 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
133 static void |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 run(void) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 { |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
136 struct state state = { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
137 .handle = handle, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
138 .draw = draw |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
139 }; |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
263
diff
changeset
|
141 game_switch(&state, 1); |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
203
diff
changeset
|
142 game_loop(); |
203
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
143 |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
144 music_finish(&music); |
d3ef968745f5
core: rework audio API
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
145 sound_finish(&sound); |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 } |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 int |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 main(int argc, char **argv) |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 { |
135
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
151 (void)argc; |
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
152 (void)argv; |
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
153 |
103
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 init(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 run(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 quit(); |
68ce8e02061a
sound: add basic sound API
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 } |