Go to the documentation of this file.00001 #include "OpenAL.h"
00002 #include <stdio.h>
00003
00004 #include <sys/types.h>
00005 #include <sys/stat.h>
00006
00007 #if HAVE_STAT
00008 # if HAVE_UNISTD_H
00009 # include <unistd.h>
00010 # endif
00011 # define structStat struct stat
00012 #elif HAVE__STAT || WIN32
00013 # ifdef UNICODE
00014 # define stat(p,b) _wstat((p),(b))
00015 # else
00016 # define stat(p,b) _stat((p),(b))
00017 # endif
00018 # define structStat struct _stat
00019 #else
00020 # error No stat-like function on this platform
00021 #endif
00022
00023 namespace REAL
00024 {
00025 namespace AUDIO
00026 {
00027 struct InputStream
00028 {
00029 ALboolean isFileStream;
00030 rchar *fileName;
00031 size_t remainingLength;
00032 union
00033 {
00034 FILE *fileDescriptor;
00035 const ALvoid *data;
00036 } u;
00037 };
00038
00039 struct BufferData
00040 {
00041 ALvoid *data;
00042 size_t length;
00043 ALint numChannels;
00044 ALint bitsPerSample;
00045 ALfloat sampleFrequency;
00046 };
00047
00048 typedef enum
00049 {
00050 LittleEndian,
00051 BigEndian,
00052 UnknwonEndian
00053 } Endianess;
00054
00055 typedef short Int16BigEndian;
00056 typedef unsigned short UInt16LittleEndian;
00057 typedef int Int32BigEndian;
00058 typedef unsigned int UInt32LittleEndian;
00059
00060
00061 static Endianess endianess(void)
00062 {
00063 union
00064 {
00065 long l;
00066 char c[sizeof(long)];
00067 } u;
00068
00069 u.l = 1;
00070 return (u.c[0] == 1) ? LittleEndian :
00071 ((u.c[sizeof(long) - 1] == 1) ? BigEndian : UnknwonEndian);
00072 }
00073
00074 typedef ALvoid *Codec(ALvoid *data, size_t length, ALint numChannels, ALint bitsPerSample, ALfloat sampleFrequency);
00075 Codec _alutCodecLinear;
00076 Codec _alutCodecPCM8s;
00077 Codec _alutCodecPCM16;
00078 Codec _alutCodecULaw;
00079 Codec _alutCodecALaw;
00080
00081 FILEFORMAT getFormatByExt(rchar* ext);
00082
00083 BufferData* loadRawFile(InputStream *stream);
00084 BufferData* loadWavFile(InputStream *stream);
00085 BufferData* loadAUFile(InputStream *stream);
00086 BufferData* loadFile(InputStream *stream);
00087 ALuint alutCreateBufferFromFile(rchar *fileName);
00088 InputStream* _alutInputStreamConstructFromFile(rchar *fileName);
00089 ALboolean _alutInputStreamDestroy(InputStream *stream);
00090 ALboolean streamRead(InputStream *stream, void *ptr, size_t numBytesToRead);
00091 ALvoid* _alutInputStreamRead(InputStream *stream, size_t length);
00092 BufferData* _alutBufferDataConstruct(ALvoid *data, size_t length, ALint numChannels,
00093 ALint bitsPerSample, ALfloat sampleFrequency);
00094 ALvoid* _alutCodecLinear(ALvoid *data, size_t length, ALint numChannels,
00095 ALint bitsPerSample, ALfloat sampleFrequency);
00096 ALboolean _alutInputStreamReadInt32BE(InputStream *stream, int *value);
00097 ALboolean _alutInputStreamReadUInt16LE(InputStream *stream, unsigned short *value);
00098 ALboolean _alutInputStreamReadUInt32LE(InputStream *stream, unsigned int *value);
00099 ALboolean _alutInputStreamSkip (InputStream *stream, size_t numBytesToSkip);
00100 ALboolean _alutInputStreamEOF(InputStream *stream);
00101 ALuint _alutCreateBufferFromInputStream (InputStream *stream);
00102 }
00103 }