Mercurial > molko
annotate libmlk-core/mlk/core/sys.c @ 578:f271681ce015
mlk-map: follow conventions
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 11 Mar 2023 11:20:46 +0100 |
parents | 8cf895e51fb6 |
children | 4349b591c3ac |
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 |
571
cba66f7d8a53
misc: various windows fixes
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
29 #if defined(_WIN32) |
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 |
571
cba66f7d8a53
misc: various windows fixes
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
83 static MLK_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) |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
101 return -1; |
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) |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
104 return mlk_errf("%s", strerror(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 |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
159 static void |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
160 audio_finish(void) |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
161 { |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
162 if (mlk__audio_ctx) { |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
163 alcMakeContextCurrent(NULL); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
164 alcDestroyContext(mlk__audio_ctx); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
165 mlk__audio_ctx = NULL; |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
166 } |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
167 if (mlk__audio_dev) { |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
168 alcCloseDevice(mlk__audio_dev); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
169 mlk__audio_dev = NULL; |
436
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 } |
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
172 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
173 int |
471 | 174 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
|
175 { |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
176 #if defined(__MINGW64__) |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
177 /* On MinGW buffering leads to painful debugging. */ |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
178 setbuf(stderr, NULL); |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
179 setbuf(stdout, NULL); |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
180 #endif |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
181 |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
182 /* Kept for future use. */ |
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
183 (void)organization; |
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
184 (void)name; |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
185 |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
186 /* SDL2. */ |
443
dfc65293d984
core: initial gamepad support
David Demelier <markand@malikania.fr>
parents:
442
diff
changeset
|
187 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
188 return mlk_errf("%s", SDL_GetError()); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
189 if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG) |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
190 return mlk_errf("%s", SDL_GetError()); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
191 if (TTF_Init() < 0) |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
192 return mlk_errf("%s", SDL_GetError()); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
193 |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
194 /* OpenAL. */ |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
195 #if defined(MLK_OS_WINDOW) |
394
8273c40a5691
core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents:
380
diff
changeset
|
196 SetEnvironmentVariable("ALSOFT_LOGLEVEL", "0"); |
8273c40a5691
core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents:
380
diff
changeset
|
197 #else |
8273c40a5691
core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents:
380
diff
changeset
|
198 putenv("ALSOFT_LOGLEVEL=0"); |
8273c40a5691
core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents:
380
diff
changeset
|
199 #endif |
8273c40a5691
core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents:
380
diff
changeset
|
200 |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
201 if (!(mlk__audio_dev = alcOpenDevice(NULL))) { |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
202 mlk_errf("unable to open audio device"); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
203 goto err; |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
204 } |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
205 if (!(mlk__audio_ctx = alcCreateContext(mlk__audio_dev, NULL))) { |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
206 mlk_errf("%s", alcGetError(mlk__audio_dev)); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
207 goto err; |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
208 } |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
209 if (alcMakeContextCurrent(mlk__audio_ctx) != ALC_TRUE) { |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
210 mlk_errf("%s", alcGetError(mlk__audio_dev)); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
211 goto err; |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
212 } |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
213 |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
214 return 0; |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
215 |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
216 err: |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
217 audio_finish(); |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
218 |
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
219 return -1; |
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 |
32
91bc2329ab0c
core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
222 const char * |
471 | 223 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
|
224 { |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
225 return user_directory(kind); |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
59
diff
changeset
|
226 } |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
59
diff
changeset
|
227 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
228 int |
471 | 229 mlk_sys_mkdir(const char *directory) |
255
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
230 { |
524
c2124ecb2423
util: prefix PATH_MAX to MLK_PATH_MAX
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
231 char path[MLK_PATH_MAX], *p; |
255
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
232 |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
233 /* Copy the directory to normalize and iterate over '/'. */ |
446
4607eea0eabc
util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
234 mlk_util_strlcpy(path, directory, sizeof (path)); |
255
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
235 normalize(path); |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
236 |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
237 #if defined(_WIN32) |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
238 /* Remove drive letter that we don't need. */ |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
239 if ((p = strchr(path, ':'))) |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
240 ++p; |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
241 else |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
242 p = path; |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
243 #else |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
244 p = path; |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
245 #endif |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
246 |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
247 for (p = p + 1; *p; ++p) { |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
248 if (*p == '/') { |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
249 *p = 0; |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
250 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
251 if (mkpath(path) < 0) |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
279
diff
changeset
|
252 return -1; |
255
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
253 |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
254 *p = '/'; |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
255 } |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
256 } |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
257 |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
258 return mkpath(path); |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
259 } |
d987a5fc4a3e
core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
260 |
23
bc9637a2601b
core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 void |
471 | 262 mlk_sys_finish(void) |
23
bc9637a2601b
core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 { |
bc9637a2601b
core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 TTF_Quit(); |
bc9637a2601b
core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 IMG_Quit(); |
bc9637a2601b
core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 SDL_Quit(); |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
267 |
574
8cf895e51fb6
win: various improvements
David Demelier <markand@malikania.fr>
parents:
571
diff
changeset
|
268 audio_finish(); |
23
bc9637a2601b
core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 } |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
270 |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
271 static int |
471 | 272 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
|
273 { |
471 | 274 struct mlk__audiostream *stream; |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
275 int ret = 0; |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
276 |
442
9c3b3935f0aa
core: rework allocations
David Demelier <markand@malikania.fr>
parents:
438
diff
changeset
|
277 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
|
278 stream->samplerate = info->samplerate; |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
279 stream->samplesz = info->frames * info->channels; |
442
9c3b3935f0aa
core: rework allocations
David Demelier <markand@malikania.fr>
parents:
438
diff
changeset
|
280 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
|
281 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
|
282 |
380
31e2f6d35c34
core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents:
379
diff
changeset
|
283 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
|
284 |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
285 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
|
286 free(stream->samples); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
287 free(stream); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
288 stream = NULL; |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
289 ret = mlk_errf("%s", sf_error(file)); |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
290 } |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
291 |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
292 alGenBuffers(1, &stream->buffer); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
293 alBufferData(stream->buffer, stream->format, stream->samples, |
380
31e2f6d35c34
core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents:
379
diff
changeset
|
294 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
|
295 alGenSources(1, &stream->source); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
296 alSourcei(stream->source, AL_BUFFER, stream->buffer); |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
297 |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
298 sf_close(file); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
299 |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
300 *ptr = stream; |
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
301 |
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
302 return ret; |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
303 } |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
304 |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
305 int |
471 | 306 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
|
307 { |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
308 assert(path); |
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 SF_INFO info; |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
311 SNDFILE *file; |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
312 |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
313 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
|
314 return sf_error(NULL); |
379
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 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
|
317 } |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
318 |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
319 int |
471 | 320 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
|
321 { |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
322 assert(data); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
323 |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
324 SF_VIRTUAL_IO io = { |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
325 .get_filelen = vio_get_filelen, |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
326 .seek = vio_seek, |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
327 .read = vio_read, |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
328 .tell = vio_tell |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
329 }; |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
330 SF_INFO info; |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
331 SNDFILE *file; |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
332 struct viodata viodata = { |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
333 .data = data, |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
334 .datasz = datasz, |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
335 }; |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
336 |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
337 if (!(file = sf_open_virtual(&io, SFM_READ, &info, &viodata))) |
547
c7664b679a95
misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents:
540
diff
changeset
|
338 return mlk_errf("%s", sf_strerror(NULL)); |
379
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
339 |
436
df92d5b056ce
core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents:
432
diff
changeset
|
340 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
|
341 } |
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 void |
471 | 344 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
|
345 { |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
346 assert(s); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
347 |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
348 alDeleteBuffers(1, &s->buffer); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
349 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
|
350 alDeleteSources(1, &s->source); |
67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
351 } |