152 lines
4.6 KiB
C++
Executable File
152 lines
4.6 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef _PLATFORMAUDIO_H_
|
|
#define _PLATFORMAUDIO_H_
|
|
|
|
#ifndef _PLATFORM_H_
|
|
#include "platform/platform.h"
|
|
#endif
|
|
|
|
#ifndef _PLATFORMAL_H_
|
|
#include "platform/platformAL.h"
|
|
#endif
|
|
|
|
#ifndef _MMATH_H_
|
|
#include "math/mMath.h"
|
|
#endif
|
|
|
|
#ifndef _BITSET_H_
|
|
#include "core/bitSet.h"
|
|
#endif
|
|
|
|
typedef U32 AUDIOHANDLE;
|
|
#define NULL_AUDIOHANDLE 0
|
|
|
|
//--------------------------------------------------------------------------
|
|
|
|
namespace Audio
|
|
{
|
|
enum Constants {
|
|
|
|
NumAudioTypes = 32
|
|
};
|
|
|
|
//--------------------------------------
|
|
// sound property description
|
|
struct Description
|
|
{
|
|
F32 mVolume; // 0-1 1=loudest volume
|
|
bool mIsLooping;
|
|
bool mIsStreaming;
|
|
bool mIs3D;
|
|
|
|
F32 mReferenceDistance;
|
|
F32 mMaxDistance;
|
|
U32 mConeInsideAngle;
|
|
U32 mConeOutsideAngle;
|
|
F32 mConeOutsideVolume;
|
|
Point3F mConeVector;
|
|
|
|
// environment info
|
|
F32 mEnvironmentLevel;
|
|
|
|
// used by 'AudioEmitter' class
|
|
S32 mLoopCount;
|
|
S32 mMinLoopGap;
|
|
S32 mMaxLoopGap;
|
|
|
|
// each 'type' can have its own volume
|
|
S32 mType;
|
|
};
|
|
|
|
void initOpenAL();
|
|
void shutdownOpenAL();
|
|
void destroy();
|
|
}
|
|
|
|
class AudioDescription;
|
|
class AudioProfile;
|
|
class AudioEnvironment;
|
|
class AudioSampleEnvironment;
|
|
class AudioStreamSource;
|
|
|
|
AUDIOHANDLE alxCreateSource(const Audio::Description *desc, const char *filename, const MatrixF *transform=NULL, AudioSampleEnvironment * sampleEnvironment = 0);
|
|
AUDIOHANDLE alxCreateSource(AudioDescription *descObject, const char *filename, const MatrixF *transform=NULL, AudioSampleEnvironment * sampleEnvironment = 0);
|
|
AUDIOHANDLE alxCreateSource(const AudioProfile *profile, const MatrixF *transform=NULL);
|
|
AudioStreamSource* alxFindAudioStreamSource(AUDIOHANDLE handle);
|
|
|
|
AUDIOHANDLE alxPlay(AUDIOHANDLE handle);
|
|
void alxStop(AUDIOHANDLE handle);
|
|
void alxStopAll();
|
|
|
|
// one-shot helper alxPlay functions, create and play in one call
|
|
AUDIOHANDLE alxPlay(const AudioProfile *profile, const MatrixF *transform=NULL, const Point3F *velocity=NULL);
|
|
|
|
// Source
|
|
void alxSourcef(AUDIOHANDLE handle, ALenum pname, ALfloat value);
|
|
void alxSourcefv(AUDIOHANDLE handle, ALenum pname, ALfloat *values);
|
|
void alxSource3f(AUDIOHANDLE handle, ALenum pname, ALfloat value1, ALfloat value2, ALfloat value3);
|
|
void alxSourcei(AUDIOHANDLE handle, ALenum pname, ALint value);
|
|
void alxSourceMatrixF(AUDIOHANDLE handle, const MatrixF *transform);
|
|
|
|
void alxGetSourcef(AUDIOHANDLE handle, ALenum pname, ALfloat *value);
|
|
void alxGetSourcefv(AUDIOHANDLE handle, ALenum pname, ALfloat *values);
|
|
void alxGetSource3f(AUDIOHANDLE handle, ALenum pname, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
|
void alxGetSourcei(AUDIOHANDLE handle, ALenum pname, ALint *value);
|
|
|
|
/** alSource3f access extension for use with Point3F's
|
|
*/
|
|
inline void alxSourcePoint3F(AUDIOHANDLE handle, ALenum pname, const Point3F *value)
|
|
{
|
|
alxSource3f(handle, pname, value->x, value->y, value->z);
|
|
}
|
|
|
|
/** alGetSource3f access extension for use with Point3F's
|
|
*/
|
|
inline void alxSourceGetPoint3F(AUDIOHANDLE handle, ALenum pname, Point3F * value)
|
|
{
|
|
alxGetSource3f(handle, pname, &value->x, &value->y, &value->z);
|
|
}
|
|
|
|
// Listener
|
|
void alxListenerMatrixF(const MatrixF *transform);
|
|
void alxListenerf(ALenum param, ALfloat value);
|
|
void alxGetListenerf(ALenum param, ALfloat *value);
|
|
|
|
|
|
/** alListener3f access extension for use with Point3F's
|
|
*/
|
|
inline void alxListenerPoint3F(ALenum pname, const Point3F *value)
|
|
{
|
|
alListener3f(pname, value->x, value->y, value->z);
|
|
}
|
|
|
|
/** alGetListener3f access extension for use with Point3F's
|
|
*/
|
|
inline void alxGetListenerPoint3F(ALenum pname, Point3F *value)
|
|
{
|
|
alGetListener3f(pname, &value->x, &value->y, &value->z);
|
|
}
|
|
|
|
// Environment
|
|
void alxEnvironmenti(ALenum pname, ALint value);
|
|
void alxEnvironmentf(ALenum pname, ALfloat value);
|
|
void alxGetEnvironmenti(ALenum pname, ALint * value);
|
|
void alxGetEnvironmentf(ALenum pname, ALfloat * value);
|
|
|
|
void alxSetEnvironment(const AudioEnvironment * environment);
|
|
const AudioEnvironment * alxGetEnvironment();
|
|
|
|
// misc
|
|
void alxUpdateTypeGain(U32 type);
|
|
bool alxIsValidHandle(AUDIOHANDLE handle);
|
|
bool alxIsPlaying(AUDIOHANDLE handle);
|
|
void alxUpdate();
|
|
F32 alxGetStreamPosition( AUDIOHANDLE handle );
|
|
F32 alxGetStreamDuration( AUDIOHANDLE handle );
|
|
|
|
#endif // _H_PLATFORMAUDIO_
|