2 * OpenAL cross platform audio library
3 * Copyright (C) 1999-2000 by authors.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 * Or go to http://www.gnu.org/copyleft/lgpl.html
26 #include "alListener.h"
29 AL_API ALvoid AL_APIENTRY
alListenerf(ALenum eParam
, ALfloat flValue
)
33 Context
= GetContextRef();
39 if(flValue
>= 0.0f
&& isfinite(flValue
))
41 Context
->Listener
.Gain
= flValue
;
42 Context
->UpdateSources
= AL_TRUE
;
45 alSetError(Context
, AL_INVALID_VALUE
);
48 case AL_METERS_PER_UNIT
:
49 if(flValue
> 0.0f
&& isfinite(flValue
))
51 Context
->Listener
.MetersPerUnit
= flValue
;
52 Context
->UpdateSources
= AL_TRUE
;
55 alSetError(Context
, AL_INVALID_VALUE
);
59 alSetError(Context
, AL_INVALID_ENUM
);
63 ALCcontext_DecRef(Context
);
67 AL_API ALvoid AL_APIENTRY
alListener3f(ALenum eParam
, ALfloat flValue1
, ALfloat flValue2
, ALfloat flValue3
)
71 Context
= GetContextRef();
77 if(isfinite(flValue1
) && isfinite(flValue2
) && isfinite(flValue3
))
80 Context
->Listener
.Position
[0] = flValue1
;
81 Context
->Listener
.Position
[1] = flValue2
;
82 Context
->Listener
.Position
[2] = flValue3
;
83 Context
->UpdateSources
= AL_TRUE
;
84 UnlockContext(Context
);
87 alSetError(Context
, AL_INVALID_VALUE
);
91 if(isfinite(flValue1
) && isfinite(flValue2
) && isfinite(flValue3
))
94 Context
->Listener
.Velocity
[0] = flValue1
;
95 Context
->Listener
.Velocity
[1] = flValue2
;
96 Context
->Listener
.Velocity
[2] = flValue3
;
97 Context
->UpdateSources
= AL_TRUE
;
98 UnlockContext(Context
);
101 alSetError(Context
, AL_INVALID_VALUE
);
105 alSetError(Context
, AL_INVALID_ENUM
);
109 ALCcontext_DecRef(Context
);
113 AL_API ALvoid AL_APIENTRY
alListenerfv(ALenum eParam
, const ALfloat
*pflValues
)
122 case AL_METERS_PER_UNIT
:
123 alListenerf(eParam
, pflValues
[0]);
128 alListener3f(eParam
, pflValues
[0], pflValues
[1], pflValues
[2]);
133 Context
= GetContextRef();
141 if(isfinite(pflValues
[0]) && isfinite(pflValues
[1]) &&
142 isfinite(pflValues
[2]) && isfinite(pflValues
[3]) &&
143 isfinite(pflValues
[4]) && isfinite(pflValues
[5]))
145 LockContext(Context
);
147 Context
->Listener
.Forward
[0] = pflValues
[0];
148 Context
->Listener
.Forward
[1] = pflValues
[1];
149 Context
->Listener
.Forward
[2] = pflValues
[2];
150 Context
->Listener
.Up
[0] = pflValues
[3];
151 Context
->Listener
.Up
[1] = pflValues
[4];
152 Context
->Listener
.Up
[2] = pflValues
[5];
153 Context
->UpdateSources
= AL_TRUE
;
154 UnlockContext(Context
);
157 alSetError(Context
, AL_INVALID_VALUE
);
161 alSetError(Context
, AL_INVALID_ENUM
);
166 alSetError(Context
, AL_INVALID_VALUE
);
168 ALCcontext_DecRef(Context
);
172 AL_API ALvoid AL_APIENTRY
alListeneri(ALenum eParam
, ALint lValue
)
178 Context
= GetContextRef();
184 alSetError(Context
, AL_INVALID_ENUM
);
188 ALCcontext_DecRef(Context
);
192 AL_API
void AL_APIENTRY
alListener3i(ALenum eParam
, ALint lValue1
, ALint lValue2
, ALint lValue3
)
200 alListener3f(eParam
, (ALfloat
)lValue1
, (ALfloat
)lValue2
, (ALfloat
)lValue3
);
204 Context
= GetContextRef();
210 alSetError(Context
, AL_INVALID_ENUM
);
214 ALCcontext_DecRef(Context
);
218 AL_API
void AL_APIENTRY
alListeneriv( ALenum eParam
, const ALint
* plValues
)
229 alListener3f(eParam
, (ALfloat
)plValues
[0], (ALfloat
)plValues
[1], (ALfloat
)plValues
[2]);
233 flValues
[0] = (ALfloat
)plValues
[0];
234 flValues
[1] = (ALfloat
)plValues
[1];
235 flValues
[2] = (ALfloat
)plValues
[2];
236 flValues
[3] = (ALfloat
)plValues
[3];
237 flValues
[4] = (ALfloat
)plValues
[4];
238 flValues
[5] = (ALfloat
)plValues
[5];
239 alListenerfv(eParam
, flValues
);
244 Context
= GetContextRef();
252 alSetError(Context
, AL_INVALID_ENUM
);
257 alSetError(Context
, AL_INVALID_VALUE
);
259 ALCcontext_DecRef(Context
);
263 AL_API ALvoid AL_APIENTRY
alGetListenerf(ALenum eParam
, ALfloat
*pflValue
)
267 Context
= GetContextRef();
275 *pflValue
= Context
->Listener
.Gain
;
278 case AL_METERS_PER_UNIT
:
279 *pflValue
= Context
->Listener
.MetersPerUnit
;
283 alSetError(Context
, AL_INVALID_ENUM
);
288 alSetError(Context
, AL_INVALID_VALUE
);
290 ALCcontext_DecRef(Context
);
294 AL_API ALvoid AL_APIENTRY
alGetListener3f(ALenum eParam
, ALfloat
*pflValue1
, ALfloat
*pflValue2
, ALfloat
*pflValue3
)
298 Context
= GetContextRef();
301 if(pflValue1
&& pflValue2
&& pflValue3
)
306 LockContext(Context
);
307 *pflValue1
= Context
->Listener
.Position
[0];
308 *pflValue2
= Context
->Listener
.Position
[1];
309 *pflValue3
= Context
->Listener
.Position
[2];
310 UnlockContext(Context
);
314 LockContext(Context
);
315 *pflValue1
= Context
->Listener
.Velocity
[0];
316 *pflValue2
= Context
->Listener
.Velocity
[1];
317 *pflValue3
= Context
->Listener
.Velocity
[2];
318 UnlockContext(Context
);
322 alSetError(Context
, AL_INVALID_ENUM
);
327 alSetError(Context
, AL_INVALID_VALUE
);
329 ALCcontext_DecRef(Context
);
333 AL_API ALvoid AL_APIENTRY
alGetListenerfv(ALenum eParam
, ALfloat
*pflValues
)
340 case AL_METERS_PER_UNIT
:
341 alGetListenerf(eParam
, pflValues
);
346 alGetListener3f(eParam
, pflValues
+0, pflValues
+1, pflValues
+2);
350 Context
= GetContextRef();
358 LockContext(Context
);
360 pflValues
[0] = Context
->Listener
.Forward
[0];
361 pflValues
[1] = Context
->Listener
.Forward
[1];
362 pflValues
[2] = Context
->Listener
.Forward
[2];
363 pflValues
[3] = Context
->Listener
.Up
[0];
364 pflValues
[4] = Context
->Listener
.Up
[1];
365 pflValues
[5] = Context
->Listener
.Up
[2];
366 UnlockContext(Context
);
370 alSetError(Context
, AL_INVALID_ENUM
);
375 alSetError(Context
, AL_INVALID_VALUE
);
377 ALCcontext_DecRef(Context
);
381 AL_API ALvoid AL_APIENTRY
alGetListeneri(ALenum eParam
, ALint
*plValue
)
385 Context
= GetContextRef();
393 alSetError(Context
, AL_INVALID_ENUM
);
398 alSetError(Context
, AL_INVALID_VALUE
);
400 ALCcontext_DecRef(Context
);
404 AL_API
void AL_APIENTRY
alGetListener3i(ALenum eParam
, ALint
*plValue1
, ALint
*plValue2
, ALint
*plValue3
)
408 Context
= GetContextRef();
411 if(plValue1
&& plValue2
&& plValue3
)
416 LockContext(Context
);
417 *plValue1
= (ALint
)Context
->Listener
.Position
[0];
418 *plValue2
= (ALint
)Context
->Listener
.Position
[1];
419 *plValue3
= (ALint
)Context
->Listener
.Position
[2];
420 UnlockContext(Context
);
424 LockContext(Context
);
425 *plValue1
= (ALint
)Context
->Listener
.Velocity
[0];
426 *plValue2
= (ALint
)Context
->Listener
.Velocity
[1];
427 *plValue3
= (ALint
)Context
->Listener
.Velocity
[2];
428 UnlockContext(Context
);
432 alSetError(Context
, AL_INVALID_ENUM
);
437 alSetError(Context
, AL_INVALID_VALUE
);
439 ALCcontext_DecRef(Context
);
443 AL_API
void AL_APIENTRY
alGetListeneriv(ALenum eParam
, ALint
* plValues
)
451 alGetListener3i(eParam
, plValues
+0, plValues
+1, plValues
+2);
455 Context
= GetContextRef();
463 LockContext(Context
);
465 plValues
[0] = (ALint
)Context
->Listener
.Forward
[0];
466 plValues
[1] = (ALint
)Context
->Listener
.Forward
[1];
467 plValues
[2] = (ALint
)Context
->Listener
.Forward
[2];
468 plValues
[3] = (ALint
)Context
->Listener
.Up
[0];
469 plValues
[4] = (ALint
)Context
->Listener
.Up
[1];
470 plValues
[5] = (ALint
)Context
->Listener
.Up
[2];
471 UnlockContext(Context
);
475 alSetError(Context
, AL_INVALID_ENUM
);
480 alSetError(Context
, AL_INVALID_VALUE
);
482 ALCcontext_DecRef(Context
);