Mercurial > sdl-ios-xcode
annotate src/audio/fusionsound/SDL_fsaudio.c @ 2947:fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
From: Couriersud
Subject: Fusionsound audio driver
attached is a diff containing a audio driver for the FusionSound
library. This sound library is closely related to DirectFB and uses the
same transport (fusion) as DirectFB when running applications "remote",
i.e. over the network. As such, it natively redirects sound where
DirectFB redirects video. This may be handy for everyone using SDL over
DirectFB.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 01 Jan 2009 21:34:22 +0000 |
parents | |
children | 816a7a65a59a |
rev | line source |
---|---|
2947
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2009 Sam Lantinga |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 /* Allow access to a raw mixing buffer */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 #ifdef HAVE_SIGNAL_H |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 #include <signal.h> |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #endif |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include <unistd.h> |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 #include "SDL_timer.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 #include "SDL_audio.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 #include "../SDL_audiomem.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #include "../SDL_audio_c.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 #include "SDL_fsaudio.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 //#define SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC "libfusionsound.so" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 #ifdef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 #include "SDL_name.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 #include "SDL_loadso.h" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 #else |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 #define SDL_NAME(X) X |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 #endif |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 /* The tag name used by fusionsoundc audio */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 #define SDL_FS_DRIVER_NAME "fusionsound" |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 /* Buffers to use - more than 2 gives a lot of latency */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 #define FUSION_BUFFERS (2) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 #ifdef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 static const char *fs_library = SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 static void *fs_handle = NULL; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 static DirectResult(*SDL_NAME(FusionSoundInit)) (int *argc, char *(*argv[])); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 static DirectResult(*SDL_NAME(FusionSoundCreate)) (IFusionSound ** |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 ret_interface); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 #define SDL_FS_SYM(x) { #x, (void **) (char *) &SDL_NAME(x) } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 static struct |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 const char *name; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 void **func; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 } fs_functions[] = { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 /* *INDENT-OFF* */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 SDL_FS_SYM(FusionSoundInit), |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 SDL_FS_SYM(FusionSoundCreate), |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 /* *INDENT-ON* */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 }; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 #undef SDL_FS_SYM |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 UnloadFusionSoundLibrary() |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 if (fs_handle != NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 SDL_UnloadObject(fs_handle); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 fs_handle = NULL; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 static int |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 LoadFusionSoundLibrary(void) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 int i, retval = -1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 if (fs_handle == NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 fs_handle = SDL_LoadObject(fs_library); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 if (fs_handle != NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 retval = 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 for (i = 0; i < SDL_arraysize(fs_functions); ++i) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 *fs_functions[i].func = |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 SDL_LoadFunction(fs_handle, fs_functions[i].name); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 if (!*fs_functions[i].func) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 retval = -1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 UnloadFusionSoundLibrary(); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 break; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 return retval; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 #else |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 UnloadFusionSoundLibrary() |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 return; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 static int |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 LoadFusionSoundLibrary(void) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 #endif /* SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 /* This function waits until it is possible to write a full sound buffer */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 SDL_FS_WaitDevice(_THIS) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 this->hidden->stream->Wait(this->hidden->stream, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 this->hidden->mixsamples); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 SDL_FS_PlayDevice(_THIS) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 DirectResult ret; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 ret = this->hidden->stream->Write(this->hidden->stream, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 this->hidden->mixbuf, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 this->hidden->mixsamples); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 /* If we couldn't write, assume fatal error for now */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 if (ret) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 this->enabled = 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 #ifdef DEBUG_AUDIO |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 fprintf(stderr, "Wrote %d bytes of audio data\n", this->hidden->mixlen); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 #endif |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 SDL_FS_WaitDone(_THIS) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 this->hidden->stream->Wait(this->hidden->stream, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 this->hidden->mixsamples * FUSION_BUFFERS); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 static Uint8 * |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 SDL_FS_GetDeviceBuf(_THIS) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 return (this->hidden->mixbuf); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 SDL_FS_CloseDevice(_THIS) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 if (this->hidden != NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 if (this->hidden->mixbuf != NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 SDL_FreeAudioMem(this->hidden->mixbuf); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 this->hidden->mixbuf = NULL; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 if (this->hidden->stream) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 this->hidden->stream->Release(this->hidden->stream); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 this->hidden->stream = NULL; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 if (this->hidden->fs) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 this->hidden->fs->Release(this->hidden->fs); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 this->hidden->fs = NULL; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 SDL_free(this->hidden); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 this->hidden = NULL; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 static int |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 SDL_FS_OpenDevice(_THIS, const char *devname, int iscapture) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 int bytes; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 SDL_AudioFormat test_format = 0, format = 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 FSSampleFormat fs_format; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 FSStreamDescription desc; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 DirectResult ret; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 /* Initialize all variables that we clean on shutdown */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 this->hidden = (struct SDL_PrivateAudioData *) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 SDL_malloc((sizeof *this->hidden)); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 if (this->hidden == NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 SDL_OutOfMemory(); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 SDL_memset(this->hidden, 0, (sizeof *this->hidden)); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 /* Try for a closest match on audio format */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 for (test_format = SDL_FirstAudioFormat(this->spec.format); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 !format && test_format;) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 #ifdef DEBUG_AUDIO |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 fprintf(stderr, "Trying format 0x%4.4x\n", test_format); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 #endif |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 switch (test_format) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 case AUDIO_U8: |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 fs_format = FSSF_U8; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 bytes = 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 format = 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 break; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 case AUDIO_S16SYS: |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 fs_format = FSSF_S16; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 bytes = 2; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 format = 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 break; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 case AUDIO_S32SYS: |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 fs_format = FSSF_S32; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 bytes = 4; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 format = 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 break; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 case AUDIO_F32SYS: |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 fs_format = FSSF_FLOAT; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 bytes = 4; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 format = 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 break; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 default: |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 format = 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 break; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 if (!format) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 test_format = SDL_NextAudioFormat(); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 if (format == 0) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 SDL_FS_CloseDevice(this); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 SDL_SetError("Couldn't find any hardware audio formats"); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 this->spec.format = test_format; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 /* Retrieve the main sound interface. */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 ret = SDL_NAME(FusionSoundCreate) (&this->hidden->fs); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 if (ret) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 SDL_FS_CloseDevice(this); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 SDL_SetError("Unable to initialize FusionSound: %d", ret); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 this->hidden->mixsamples = this->spec.size / bytes / this->spec.channels; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 /* Fill stream description. */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 desc.flags = FSSDF_SAMPLERATE | FSSDF_BUFFERSIZE | |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 FSSDF_CHANNELS | FSSDF_SAMPLEFORMAT | FSSDF_PREBUFFER; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 desc.samplerate = this->spec.freq; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 desc.buffersize = this->spec.size * FUSION_BUFFERS; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 desc.channels = this->spec.channels; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 desc.prebuffer = 10; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 desc.sampleformat = fs_format; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 ret = |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 this->hidden->fs->CreateStream(this->hidden->fs, &desc, |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 &this->hidden->stream); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 if (ret) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 SDL_FS_CloseDevice(this); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 SDL_SetError("Unable to create FusionSoundStream: %d", ret); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 /* See what we got */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 desc.flags = FSSDF_SAMPLERATE | FSSDF_BUFFERSIZE | |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 FSSDF_CHANNELS | FSSDF_SAMPLEFORMAT; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 ret = this->hidden->stream->GetDescription(this->hidden->stream, &desc); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 this->spec.freq = desc.samplerate; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 this->spec.size = |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 desc.buffersize / FUSION_BUFFERS * bytes * desc.channels; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 this->spec.channels = desc.channels; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 /* Calculate the final parameters for this audio specification */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 SDL_CalculateAudioSpec(&this->spec); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 /* Allocate mixing buffer */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 this->hidden->mixlen = this->spec.size; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 this->hidden->mixbuf = (Uint8 *) SDL_AllocAudioMem(this->hidden->mixlen); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 if (this->hidden->mixbuf == NULL) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 SDL_FS_CloseDevice(this); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 SDL_OutOfMemory(); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 SDL_memset(this->hidden->mixbuf, this->spec.silence, this->spec.size); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 /* We're ready to rock and roll. :-) */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 return 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 static void |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 SDL_FS_Deinitialize(void) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 UnloadFusionSoundLibrary(); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 static int |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 SDL_FS_Init(SDL_AudioDriverImpl * impl) |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 if (LoadFusionSoundLibrary() < 0) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 } else { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 DirectResult ret; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 ret = SDL_NAME(FusionSoundInit) (NULL, NULL); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 if (ret) { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 UnloadFusionSoundLibrary(); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 SDL_SetError |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 ("FusionSound: SDL_FS_init failed (FusionSoundInit: %d)", |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 ret); |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 return 0; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 /* Set the function pointers */ |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 impl->OpenDevice = SDL_FS_OpenDevice; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 impl->PlayDevice = SDL_FS_PlayDevice; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 impl->WaitDevice = SDL_FS_WaitDevice; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 impl->GetDeviceBuf = SDL_FS_GetDeviceBuf; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 impl->CloseDevice = SDL_FS_CloseDevice; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 impl->WaitDone = SDL_FS_WaitDone; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 impl->Deinitialize = SDL_FS_Deinitialize; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 impl->OnlyHasDefaultOutputDevice = 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 return 1; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 } |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 AudioBootStrap FUSIONSOUND_bootstrap = { |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 SDL_FS_DRIVER_NAME, "FusionSound", SDL_FS_Init, 0 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 }; |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 |
fec0db6c44b7
Date: Thu, 01 Jan 2009 21:32:12 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 /* vi: set ts=4 sw=4 expandtab: */ |