annotate src/audio/dmedia/SDL_irixaudio.c @ 3798:c8b3d3d13ed1 SDL-ryan-multiple-audio-device

Audio bootstraps can now specify that a driver is only to be used if explicitly requested (for things like the "disk" driver that is always available but you would never want to default to using). Trimmed out code that can be handled by stubs in the core. The "dummy" driver is pretty damned small now. :)
author Ryan C. Gordon <icculus@icculus.org>
date Wed, 04 Oct 2006 21:27:53 +0000
parents adf732f1f016
children 1f156fd874fa
rev   line source
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1 /*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
3 Copyright (C) 1997-2006 Sam Lantinga
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
6 modify it under the terms of the GNU Lesser General Public
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
9
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
13 Lesser General Public License for more details.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
14
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
15 You should have received a copy of the GNU Lesser General Public
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
16 License along with this library; if not, write to the Free Software
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 903
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
18
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
19 Sam Lantinga
252
e8157fcb3114 Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents: 148
diff changeset
20 slouken@libsdl.org
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
21 */
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
22 #include <errno.h>
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1361
diff changeset
23 #include "SDL_config.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
24
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
25 /* Allow access to a raw mixing buffer (For IRIX 6.5 and higher) */
903
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
26 /* patch for IRIX 5 by Georg Schwarz 18/07/2004 */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
27
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
28 #include "SDL_timer.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
29 #include "SDL_audio.h"
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
30 #include "../SDL_audiomem.h"
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
31 #include "../SDL_audio_c.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
32 #include "SDL_irixaudio.h"
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
33
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
34
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
35 #ifndef AL_RESOURCE /* as a test whether we use the old IRIX audio libraries */
903
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
36 #define OLD_IRIX_AUDIO
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
37 #define alClosePort(x) ALcloseport(x)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
38 #define alFreeConfig(x) ALfreeconfig(x)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
39 #define alGetFillable(x) ALgetfillable(x)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
40 #define alNewConfig() ALnewconfig()
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
41 #define alOpenPort(x,y,z) ALopenport(x,y,z)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
42 #define alSetChannels(x,y) ALsetchannels(x,y)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
43 #define alSetQueueSize(x,y) ALsetqueuesize(x,y)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
44 #define alSetSampFmt(x,y) ALsetsampfmt(x,y)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
45 #define alSetWidth(x,y) ALsetwidth(x,y)
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
46 #endif
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
47
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
48 /* Audio driver functions */
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
49 static int AL_OpenAudio(_THIS, SDL_AudioSpec * spec);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
50 static void AL_WaitAudio(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
51 static void AL_PlayAudio(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
52 static Uint8 *AL_GetAudioBuf(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
53 static void AL_CloseAudio(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
54
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
55 /* Audio driver bootstrap functions */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
56
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
57 static int
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
58 Audio_Available(void)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
59 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
60 return 1;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
61 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
62
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
63 static void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
64 Audio_DeleteDevice(SDL_AudioDevice * device)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
65 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
66 SDL_free(device->hidden);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
67 SDL_free(device);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
68 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
69
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
70 static SDL_AudioDevice *
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
71 Audio_CreateDevice(int devindex)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
72 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
73 SDL_AudioDevice *this;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
74
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
75 /* Initialize all variables that we clean on shutdown */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
76 this = (SDL_AudioDevice *) SDL_malloc(sizeof(SDL_AudioDevice));
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
77 if (this) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
78 SDL_memset(this, 0, (sizeof *this));
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
79 this->hidden = (struct SDL_PrivateAudioData *)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
80 SDL_malloc((sizeof *this->hidden));
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
81 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
82 if ((this == NULL) || (this->hidden == NULL)) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
83 SDL_OutOfMemory();
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
84 if (this) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
85 SDL_free(this);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
86 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
87 return (0);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
88 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
89 SDL_memset(this->hidden, 0, (sizeof *this->hidden));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
90
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
91 /* Set the function pointers */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
92 this->OpenAudio = AL_OpenAudio;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
93 this->WaitAudio = AL_WaitAudio;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
94 this->PlayAudio = AL_PlayAudio;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
95 this->GetAudioBuf = AL_GetAudioBuf;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
96 this->CloseAudio = AL_CloseAudio;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
97
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
98 this->free = Audio_DeleteDevice;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
99
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
100 return this;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
101 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
102
148
8758b8d42cd9 Audio subsystem no longer assumes sun audio API on UNIX systems
Sam Lantinga <slouken@libsdl.org>
parents: 0
diff changeset
103 AudioBootStrap DMEDIA_bootstrap = {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
104 "AL", "IRIX DMedia audio",
3798
c8b3d3d13ed1 Audio bootstraps can now specify that a driver is only to be used if
Ryan C. Gordon <icculus@icculus.org>
parents: 2043
diff changeset
105 Audio_Available, Audio_CreateDevice, 0
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
106 };
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
107
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
108
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
109 void static
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
110 AL_WaitAudio(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
111 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
112 Sint32 timeleft;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
113
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
114 timeleft = this->spec.samples - alGetFillable(audio_port);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
115 if (timeleft > 0) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
116 timeleft /= (this->spec.freq / 1000);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
117 SDL_Delay((Uint32) timeleft);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
118 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
119 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
120
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
121 static void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
122 AL_PlayAudio(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
123 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
124 /* Write the audio data out */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
125 if (alWriteFrames(audio_port, mixbuf, this->spec.samples) < 0) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
126 /* Assume fatal error, for now */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
127 this->enabled = 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
128 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
129 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
130
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
131 static Uint8 *
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
132 AL_GetAudioBuf(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
133 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
134 return (mixbuf);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
135 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
136
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
137 static void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
138 AL_CloseAudio(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
139 {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
140 if (mixbuf != NULL) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
141 SDL_FreeAudioMem(mixbuf);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
142 mixbuf = NULL;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
143 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
144 if (audio_port != NULL) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
145 alClosePort(audio_port);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
146 audio_port = NULL;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
147 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
148 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
149
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
150 static int
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
151 AL_OpenAudio(_THIS, SDL_AudioSpec * spec)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
152 {
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
153 SDL_AudioFormat test_format = SDL_FirstAudioFormat(spec->format);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
154 long width = 0;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
155 long fmt = 0;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
156 int valid = 0;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
157
903
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
158 #ifdef OLD_IRIX_AUDIO
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
159 {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
160 long audio_param[2];
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
161 audio_param[0] = AL_OUTPUT_RATE;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
162 audio_param[1] = spec->freq;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
163 valid = (ALsetparams(AL_DEFAULT_DEVICE, audio_param, 2) < 0);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
164 }
903
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
165 #else
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
166 {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
167 ALpv audio_param;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
168 audio_param.param = AL_RATE;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
169 audio_param.value.i = spec->freq;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
170 valid = (alSetParams(AL_DEFAULT_OUTPUT, &audio_param, 1) < 0);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
171 }
903
6e6248801043 Date: Sun, 18 Jul 2004 16:46:44 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 605
diff changeset
172 #endif
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
173
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
174 while ((!valid) && (test_format)) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
175 valid = 1;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
176 spec->format = test_format;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
177
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
178 switch (test_format) {
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
179 case AUDIO_S8:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
180 width = AL_SAMPLE_8;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
181 fmt = AL_SAMPFMT_TWOSCOMP;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
182 break;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
183
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
184 case AUDIO_S16SYS:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
185 width = AL_SAMPLE_16;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
186 fmt = AL_SAMPFMT_TWOSCOMP;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
187 break;
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
188
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
189 case AUDIO_F32SYS:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
190 width = 0; /* not used here... */
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
191 fmt = AL_SAMPFMT_FLOAT;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
192 break;
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
193
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
194 /* Docs say there is int24, but not int32.... */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
195
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
196 default:
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
197 valid = 0;
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
198 test_format = SDL_NextAudioFormat();
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
199 break;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
200 }
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
201
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
202 if (valid) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
203 ALconfig audio_config = alNewConfig();
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
204 valid = 0;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
205 if (audio_config) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
206 if (alSetChannels(audio_config, spec->channels) < 0) {
2043
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
207 if (spec->channels > 2) { /* can't handle > stereo? */
adf732f1f016 Formatting update
Sam Lantinga <slouken@libsdl.org>
parents: 2002
diff changeset
208 spec->channels = 2; /* try again below. */
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
209 }
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
210 }
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
211
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
212 if ((alSetSampFmt(audio_config, fmt) >= 0) &&
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
213 ((!width) || (alSetWidth(audio_config, width) >= 0)) &&
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
214 (alSetQueueSize(audio_config, spec->samples * 2) >= 0) &&
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
215 (alSetChannels(audio_config, spec->channels) >= 0)) {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
216
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
217 audio_port = alOpenPort("SDL audio", "w", audio_config);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
218 if (audio_port == NULL) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
219 /* docs say AL_BAD_CHANNELS happens here, too. */
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
220 int err = oserror();
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
221 if (err == AL_BAD_CHANNELS) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
222 spec->channels = 2;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
223 alSetChannels(audio_config, spec->channels);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
224 audio_port = alOpenPort("SDL audio", "w",
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
225 audio_config);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
226 }
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
227 }
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
228
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
229 if (audio_port != NULL) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
230 valid = 1;
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
231 }
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
232 }
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
233
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
234 alFreeConfig(audio_config);
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
235 }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
236 }
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
237 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
238
2002
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
239 if (!valid) {
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
240 SDL_SetError("Unsupported audio format");
7590aaf89a60 Cleaned up IRIX audio driver, added float32 support and fallbacks when
Ryan C. Gordon <icculus@icculus.org>
parents: 1895
diff changeset
241 return (-1);
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
242 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
243
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
244 /* Update the fragment size as size in bytes */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
245 SDL_CalculateAudioSpec(spec);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
246
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
247 /* Allocate mixing buffer */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
248 mixbuf = (Uint8 *) SDL_AllocAudioMem(spec->size);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
249 if (mixbuf == NULL) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
250 SDL_OutOfMemory();
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
251 return (-1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
252 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
253 SDL_memset(mixbuf, spec->silence, spec->size);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
254
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
255 /* We're ready to rock and roll. :-) */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
256 return (0);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
257 }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
258
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
259 /* vi: set ts=4 sw=4 expandtab: */