annotate libmlk-core/mlk/core/sys.c @ 540:876eee0eb0ad

core: doxygenize sys
author David Demelier <markand@malikania.fr>
date Sun, 05 Mar 2023 12:50:11 +0100
parents c2124ecb2423
children c7664b679a95
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * sys.c -- system routines
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 443
diff changeset
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr>
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
19 #include <mlk/util/util.h>
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
20
320
8f9937403749 misc: improve loading of data
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
21 #include <sys/stat.h>
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
22 #include <assert.h>
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
23 #include <errno.h>
56
43d1102a367e core: disable buffering on MinGW
David Demelier <markand@malikania.fr>
parents: 52
diff changeset
24 #include <stdio.h>
43d1102a367e core: disable buffering on MinGW
David Demelier <markand@malikania.fr>
parents: 52
diff changeset
25 #include <stdlib.h>
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
26 #include <string.h>
84
a6c2067709ce core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
27 #include <limits.h>
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
28
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
29 #if defined(MLK_OS_WINDOWS)
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
30 # include <shlwapi.h>
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
31 # include <windows.h>
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
32 #else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
33 # include <errno.h>
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
34 # include <string.h>
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
35 #endif
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
36
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include <SDL.h>
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #include <SDL_image.h>
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include <SDL_ttf.h>
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
41 #include <sndfile.h>
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
42
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
43 #include "alloc.h"
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
44 #include "err.h"
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
45 #include "panic.h"
204
c9fbb822d269 core: allocate sound channels at startup
David Demelier <markand@malikania.fr>
parents: 169
diff changeset
46 #include "sound.h"
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 #include "sys.h"
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
48 #include "sys_p.h"
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
49
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
50 ALCdevice *mlk__audio_dev = NULL;
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
51 ALCcontext *mlk__audio_ctx = NULL;
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
53 static struct {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
54 char organization[128];
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
55 char name[128];
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
56 } info = {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
57 .organization = "fr.malikania",
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
58 .name = "molko"
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
59 };
36
798baf7f3ec0 core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
60
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
61 struct viodata {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
62 const unsigned char *data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
63 const size_t datasz;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
64 sf_count_t offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
65 };
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
66
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
67 static inline char *
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
68 normalize(char *str)
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
69 {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
70 for (char *p = str; *p; ++p)
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
71 if (*p == '\\')
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
72 *p = '/';
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
73
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
74 return str;
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
75 }
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
76
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
77 static const char *
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
78 user_directory(enum mlk_sys_dir kind)
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
79 {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
80 /* Kept for future use. */
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
81 (void)kind;
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
82
540
876eee0eb0ad core: doxygenize sys
David Demelier <markand@malikania.fr>
parents: 524
diff changeset
83 static _Thread_local char path[MLK_PATH_MAX];
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
84 char *pref;
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
85
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
86 if ((pref = SDL_GetPrefPath(info.organization, info.name))) {
446
4607eea0eabc util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
87 mlk_util_strlcpy(path, pref, sizeof (path));
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
88 SDL_free(pref);
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
89 } else
446
4607eea0eabc util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
90 mlk_util_strlcpy(path, "./", sizeof (path));
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
91
279
5217c195c5b9 core: forgot to return the path
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
92 return path;
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
93 }
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
94
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
95 static inline int
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
96 mkpath(const char *path)
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
97 {
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
98 #ifdef _WIN32
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
99 /* TODO: add error using the convenient FormatMessage function. */
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
100 if (!CreateDirectoryA(path, NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
540
876eee0eb0ad core: doxygenize sys
David Demelier <markand@malikania.fr>
parents: 524
diff changeset
101 return MLK_ERR_ERRNO;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
102 #else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
103 if (mkdir(path, 0755) < 0 && errno != EEXIST)
486
d6757c30658e core: rework errors
David Demelier <markand@malikania.fr>
parents: 471
diff changeset
104 return MLK_ERR_ERRNO;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
105 #endif
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
106
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
107 return 0;
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
108 }
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
109
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
110 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
111 vio_get_filelen(void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
112 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
113 const struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
114
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
115 return (sf_count_t)vio->datasz;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
116 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
117
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
118 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
119 vio_seek(sf_count_t offset, int whence, void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
120 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
121 struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
122
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
123 switch (whence) {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
124 case SEEK_SET:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
125 vio->offset = offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
126 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
127 case SEEK_CUR:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
128 vio->offset += offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
129 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
130 case SEEK_END:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
131 vio->offset = vio->datasz - offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
132 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
133 default:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
134 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
135 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
136
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
137 return vio->offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
138 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
139
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
140 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
141 vio_read(void *ptr, sf_count_t count, void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
142 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
143 struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
144
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
145 memcpy(ptr, vio->data + vio->offset, count);
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
146 vio->offset += count;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
147
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
148 return count;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
149 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
150
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
151 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
152 vio_tell(void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
153 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
154 const struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
155
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
156 return vio->offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
157 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
158
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
159 static inline int
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
160 sndfile_to_err(int e)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
161 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
162 switch (e) {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
163 case SF_ERR_UNRECOGNISED_FORMAT:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
164 case SF_ERR_MALFORMED_FILE:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
165 case SF_ERR_UNSUPPORTED_ENCODING:
437
e1eebc6bf25d man: initial import
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
166 return MLK_ERR_FORMAT;
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
167 default:
437
e1eebc6bf25d man: initial import
David Demelier <markand@malikania.fr>
parents: 436
diff changeset
168 return MLK_ERR_NO_MEM;
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
169 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
170 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
171
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
172 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
173 mlk_sys_init(const char *organization, const char *name)
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
174 {
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
175 #if defined(__MINGW64__)
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
176 /* On MinGW buffering leads to painful debugging. */
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
177 setbuf(stderr, NULL);
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
178 setbuf(stdout, NULL);
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
179 #endif
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
180
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
181 /* Kept for future use. */
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
182 (void)organization;
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
183 (void)name;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
184
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
185 /* SDL2. */
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 442
diff changeset
186 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0)
486
d6757c30658e core: rework errors
David Demelier <markand@malikania.fr>
parents: 471
diff changeset
187 return MLK_ERR_SDL;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
188 if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG)
486
d6757c30658e core: rework errors
David Demelier <markand@malikania.fr>
parents: 471
diff changeset
189 return MLK_ERR_SDL;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
190 if (TTF_Init() < 0)
486
d6757c30658e core: rework errors
David Demelier <markand@malikania.fr>
parents: 471
diff changeset
191 return MLK_ERR_SDL;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
192
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
193 /* OpenAL. */
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
194 #if defined(MLK_OS_WINDOW)
394
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
195 SetEnvironmentVariable("ALSOFT_LOGLEVEL", "0");
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
196 #else
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
197 putenv("ALSOFT_LOGLEVEL=0");
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
198 #endif
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
199
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
200 if (!(mlk__audio_dev = alcOpenDevice(NULL)))
486
d6757c30658e core: rework errors
David Demelier <markand@malikania.fr>
parents: 471
diff changeset
201 return MLK_ERR_OPENAL;
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
202 if (!(mlk__audio_ctx = alcCreateContext(mlk__audio_dev, NULL)))
486
d6757c30658e core: rework errors
David Demelier <markand@malikania.fr>
parents: 471
diff changeset
203 return MLK_ERR_OPENAL;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
204
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
205 alcMakeContextCurrent(mlk__audio_ctx);
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
206
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
207 return 0;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
208 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
209
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
210 const char *
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
211 mlk_sys_dir(enum mlk_sys_dir kind)
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
212 {
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
213 return user_directory(kind);
84
a6c2067709ce core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
214 }
a6c2067709ce core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
215
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
216 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
217 mlk_sys_mkdir(const char *directory)
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
218 {
524
c2124ecb2423 util: prefix PATH_MAX to MLK_PATH_MAX
David Demelier <markand@malikania.fr>
parents: 486
diff changeset
219 char path[MLK_PATH_MAX], *p;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
220
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
221 /* Copy the directory to normalize and iterate over '/'. */
446
4607eea0eabc util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
222 mlk_util_strlcpy(path, directory, sizeof (path));
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
223 normalize(path);
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
224
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
225 #if defined(_WIN32)
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
226 /* Remove drive letter that we don't need. */
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
227 if ((p = strchr(path, ':')))
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
228 ++p;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
229 else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
230 p = path;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
231 #else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
232 p = path;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
233 #endif
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
234
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
235 for (p = p + 1; *p; ++p) {
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
236 if (*p == '/') {
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
237 *p = 0;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
238
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
239 if (mkpath(path) < 0)
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
240 return -1;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
241
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
242 *p = '/';
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
243 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
244 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
245
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
246 return mkpath(path);
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
247 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
248
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 void
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
250 mlk_sys_finish(void)
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 {
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 TTF_Quit();
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 IMG_Quit();
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 SDL_Quit();
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
255
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
256 alcMakeContextCurrent(NULL);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
257
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
258 if (mlk__audio_ctx) {
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
259 alcDestroyContext(mlk__audio_ctx);
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
260 mlk__audio_ctx = NULL;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
261 }
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
262 if (mlk__audio_dev) {
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
263 alcCloseDevice(mlk__audio_dev);
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
264 mlk__audio_dev = NULL;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
265 }
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 }
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
267
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
268 static int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
269 create_audiostream(struct mlk__audiostream **ptr, SNDFILE *file, const SF_INFO *info)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
270 {
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
271 struct mlk__audiostream *stream;
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
272 int ret = 0;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
273
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 438
diff changeset
274 stream = mlk_alloc_new(1, sizeof (*stream));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
275 stream->samplerate = info->samplerate;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
276 stream->samplesz = info->frames * info->channels;
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 438
diff changeset
277 stream->samples = mlk_alloc_new(stream->samplesz, sizeof (*stream->samples));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
278 stream->format = info->channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
279
380
31e2f6d35c34 core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents: 379
diff changeset
280 sf_command(file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE);
31e2f6d35c34 core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents: 379
diff changeset
281
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
282 if (sf_read_short(file, stream->samples, stream->samplesz) != stream->samplesz) {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
283 free(stream->samples);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
284 free(stream);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
285 stream = NULL;
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
286 ret = sndfile_to_err(sf_error(file));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
287 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
288
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
289 alGenBuffers(1, &stream->buffer);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
290 alBufferData(stream->buffer, stream->format, stream->samples,
380
31e2f6d35c34 core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents: 379
diff changeset
291 stream->samplesz * sizeof (*stream->samples), stream->samplerate);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
292 alGenSources(1, &stream->source);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
293 alSourcei(stream->source, AL_BUFFER, stream->buffer);
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
294
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
295 sf_close(file);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
296
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
297 *ptr = stream;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
298
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
299 return ret;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
300 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
301
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
302 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
303 mlk__audiostream_open(struct mlk__audiostream **stream, const char *path)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
304 {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
305 assert(path);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
306
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
307 SF_INFO info;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
308 SNDFILE *file;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
309
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
310 if (!(file = sf_open(path, SFM_READ, &info)))
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
311 return sf_error(NULL);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
312
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
313 return create_audiostream(stream, file, &info);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
314 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
315
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
316 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
317 mlk__audiostream_openmem(struct mlk__audiostream **stream, const void *data, size_t datasz)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
318 {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
319 assert(data);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
320
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
321 SF_VIRTUAL_IO io = {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
322 .get_filelen = vio_get_filelen,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
323 .seek = vio_seek,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
324 .read = vio_read,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
325 .tell = vio_tell
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
326 };
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
327 SF_INFO info;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
328 SNDFILE *file;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
329 struct viodata viodata = {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
330 .data = data,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
331 .datasz = datasz,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
332 };
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
333
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
334 if (!(file = sf_open_virtual(&io, SFM_READ, &info, &viodata)))
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
335 return sndfile_to_err(sf_error(NULL));;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
336
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
337 return create_audiostream(stream, file, &info);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
338 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
339
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
340 void
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
341 mlk__audiostream_finish(struct mlk__audiostream *s)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
342 {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
343 assert(s);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
344
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
345 alDeleteBuffers(1, &s->buffer);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
346 alSourcei(s->source, AL_BUFFER, 0);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
347 alDeleteSources(1, &s->source);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
348 }