Mercurial > molko
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 |
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 | 50 ALCdevice *mlk__audio_dev = NULL; |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 200 if (!(mlk__audio_dev = alcOpenDevice(NULL))) |
486 | 201 return MLK_ERR_OPENAL; |
471 | 202 if (!(mlk__audio_ctx = alcCreateContext(mlk__audio_dev, NULL))) |
486 | 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 | 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 | 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 | 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 | 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 | 258 if (mlk__audio_ctx) { |
259 alcDestroyContext(mlk__audio_ctx); | |
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 | 262 if (mlk__audio_dev) { |
263 alcCloseDevice(mlk__audio_dev); | |
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 | 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 | 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 | 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 | 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 | 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 } |