Mercurial > molko
annotate examples/example-audio/example-audio.c @ 500:d7855791a2b8
examples: prefix mlk
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 28 Feb 2023 15:35:17 +0100 |
parents | 41267f6e344d |
children | 7f7602bae0bd |
rev | line source |
---|---|
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * example-audio.c -- show how to use sounds and music |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
445
773a082f0b91
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
433
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
431
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
19 #include <mlk/core/core.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
20 #include <mlk/core/event.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
21 #include <mlk/core/game.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
22 #include <mlk/core/music.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
23 #include <mlk/core/painter.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
24 #include <mlk/core/panic.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
25 #include <mlk/core/sound.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
26 #include <mlk/core/state.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
27 #include <mlk/core/sys.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
28 #include <mlk/core/util.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
415
diff
changeset
|
29 #include <mlk/core/window.h> |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
433
862b15c3a3ae
ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
431
diff
changeset
|
31 #include <mlk/ui/label.h> |
862b15c3a3ae
ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
431
diff
changeset
|
32 #include <mlk/ui/theme.h> |
862b15c3a3ae
ui: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
431
diff
changeset
|
33 #include <mlk/ui/ui.h> |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
486 | 35 #include <mlk/example/example.h> |
36 #include <mlk/example/registry.h> | |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 |
469
0d6206cee6b9
core: state -> mlk_state
David Demelier <markand@malikania.fr>
parents:
467
diff
changeset
|
38 static struct mlk_state *states[1]; |
486 | 39 static struct mlk_music *music; |
40 static struct mlk_sound *sound; | |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
42 static struct mlk_label label_music = { |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 .text = "Music: <Space> play, <p> pause, <r> resume, <q> stop, <l> loop.", |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 .x = 10, |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 .y = 10, |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
46 .flags = MLK_LABEL_FLAGS_SHADOW |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 }; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
49 static struct mlk_label label_sound = { |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 .text = "Sound: click anywhere to pop a sound.", |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 .x = 10, |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 .y = 30, |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
53 .flags = MLK_LABEL_FLAGS_SHADOW |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 }; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 static void |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 init(void) |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 { |
486 | 59 int err; |
60 | |
61 if ((err = mlk_example_init("example-audio")) < 0) | |
62 mlk_panicf("mlk_example_init: %s", mlk_err_string(err)); | |
63 | |
500 | 64 sound = &mlk_registry_sounds[MLK_REGISTRY_SOUND_FIRE]; |
65 music = &mlk_registry_music[MLK_REGISTRY_MUSIC_ROMANCE]; | |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 static void |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 quit(void) |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { |
498
41267f6e344d
examples: use mlk_example_finish
David Demelier <markand@malikania.fr>
parents:
497
diff
changeset
|
71 mlk_example_finish(); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 static void |
469
0d6206cee6b9
core: state -> mlk_state
David Demelier <markand@malikania.fr>
parents:
467
diff
changeset
|
75 handle(struct mlk_state *st, const union mlk_event *ev) |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 { |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 (void)st; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 |
486 | 79 int err; |
80 | |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 switch (ev->type) { |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
82 case MLK_EVENT_CLICKDOWN: |
486 | 83 if ((err = mlk_sound_play(sound)) < 0) |
84 mlk_panic(err); | |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 break; |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
86 case MLK_EVENT_KEYDOWN: |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 switch (ev->key.key) { |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
88 case MLK_KEY_p: |
486 | 89 mlk_music_pause(music); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 break; |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
91 case MLK_KEY_r: |
486 | 92 mlk_music_resume(music); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 break; |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
94 case MLK_KEY_q: |
486 | 95 mlk_music_stop(music); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 break; |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
97 case MLK_KEY_l: |
486 | 98 mlk_music_play(music, MLK_MUSIC_LOOP); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 break; |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
100 case MLK_KEY_SPACE: |
486 | 101 mlk_music_play(music, 0); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 break; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 default: |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 break; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 break; |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
107 case MLK_EVENT_QUIT: |
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
108 mlk_game_quit(); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 break; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 default: |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 break; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 static void |
469
0d6206cee6b9
core: state -> mlk_state
David Demelier <markand@malikania.fr>
parents:
467
diff
changeset
|
116 draw(struct mlk_state *st) |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 { |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 (void)st; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
120 mlk_painter_set_color(0x006554ff); |
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
121 mlk_painter_clear(); |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
122 mlk_label_draw(&label_music); |
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
123 mlk_label_draw(&label_sound); |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
124 mlk_painter_present(); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 static void |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 run(void) |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 { |
469
0d6206cee6b9
core: state -> mlk_state
David Demelier <markand@malikania.fr>
parents:
467
diff
changeset
|
130 struct mlk_state state = { |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 .handle = handle, |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 .draw = draw |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 }; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 |
474
ca30ff96bbe0
core: util -> mlk_util
David Demelier <markand@malikania.fr>
parents:
469
diff
changeset
|
135 mlk_game_init(states, MLK_UTIL_SIZE(states)); |
459
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
136 mlk_game_push(&state); |
541cb950997b
examples: add libmlk-example library
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
137 mlk_game_loop(); |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 |
496 | 139 mlk_music_finish(music); |
140 mlk_sound_finish(sound); | |
415
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 } |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 int |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 main(int argc, char **argv) |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 { |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 (void)argc; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 (void)argv; |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 init(); |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 run(); |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 quit(); |
a5b98db4fd87
misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 } |