转自:http://blog.csdn.net/zouxy09/article/details/7893162
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #include
- #include
- #include
- #include
- #include
- #include
-
-
-
-
-
-
-
-
-
- ALuint Buffer;
-
-
- ALuint Source;
-
-
-
-
-
-
-
-
-
-
- ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat SourceVel[] = { 0.0, 0.0, 0.0 };
-
-
-
- ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
-
-
-
-
-
-
- ALboolean LoadALData()
- {
-
-
- ALenum format;
- ALsizei size;
- ALvoid* data;
- ALsizei freq;
- ALboolean loop;
-
-
-
-
- alGenBuffers(1, &Buffer);
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alutLoadWAVFile("wavdata/FancyPants.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffer, format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
-
-
-
-
-
-
- alGenSources(1, &Source);
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alSourcei (Source, AL_BUFFER, Buffer );
- alSourcef (Source, AL_PITCH, 1.0f );
- alSourcef (Source, AL_GAIN, 1.0f );
- alSourcefv(Source, AL_POSITION, SourcePos);
- alSourcefv(Source, AL_VELOCITY, SourceVel);
- alSourcei (Source, AL_LOOPING, loop );
-
-
-
-
-
-
- if (alGetError() == AL_NO_ERROR)
- return AL_TRUE;
-
- return AL_FALSE;
-
- }
- void SetListenervalues()
- {
- alListenerfv(AL_POSITION, ListenerPos);
- alListenerfv(AL_VELOCITY, ListenerVel);
- alListenerfv(AL_ORIENTATION, ListenerOri);
- }
-
- void KillALData()
- {
- alDeleteBuffers(1, &Buffer);
- alDeleteSources(1, &Source);
- alutExit();
- }
-
- int main(int argc, char *argv[])
- {
-
-
- alutInit(&argc, argv);
- alGetError();
-
-
-
-
-
- if (LoadALData() == AL_FALSE)
- return -1;
-
- SetListenervalues();
-
-
- atexit(KillALData);
-
-
- ALubyte c = ' ';
-
- while (c != 'q')
- {
- c = getche();
-
- switch (c)
- {
-
- case 'p': alSourcePlay(Source); break;
-
-
- case 's': alSourceStop(Source); break;
-
-
- case 'h': alSourcePause(Source); break;
- };
- }
-
- return 0;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
-
- ALuint Buffer;
-
-
- ALuint Source;
-
-
- ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat SourceVel[] = { 0.0, 0.0, 0.1 };
-
-
- ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
-
-
- ALboolean LoadALData()
- {
-
- ALenum format;
- ALsizei size;
- ALvoid* data;
- ALsizei freq;
- ALboolean loop;
-
-
-
- alGenBuffers(1, &Buffer);
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alutLoadWAVFile("wavdata/Footsteps.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffer, format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
-
-
- alGenSources(1, &Source);
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alSourcei (Source, AL_BUFFER, Buffer );
- alSourcef (Source, AL_PITCH, 1.0f );
- alSourcef (Source, AL_GAIN, 1.0f );
- alSourcefv(Source, AL_POSITION, SourcePos);
- alSourcefv(Source, AL_VELOCITY, SourceVel);
- alSourcei (Source, AL_LOOPING, AL_TRUE );
-
-
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- return AL_TRUE;
- }
-
-
-
- void SetListenervalues()
- {
- alListenerfv(AL_POSITION, ListenerPos);
- alListenerfv(AL_VELOCITY, ListenerVel);
- alListenerfv(AL_ORIENTATION, ListenerOri);
- }
-
- void KillALData()
- {
- alDeleteBuffers(1, &Buffer);
- alDeleteSources(1, &Source);
- alutExit();
- }
-
- int main(int argc, char *argv[])
- {
-
- alutInit(NULL,0);
- alGetError();
-
-
- if (LoadALData() == AL_FALSE)
- return 0;
-
- SetListenervalues();
-
-
- atexit(KillALData);
-
-
- alSourcePlay(Source);
-
-
- ALint time = 0;
- ALint elapse = 0;
-
- while (!kbhit())
- {
- elapse += clock() - time;
- time += elapse;
-
- if (elapse > 50)
- {
- elapse = 0;
-
- SourcePos[0] += SourceVel[0];
- SourcePos[1] += SourceVel[1];
- SourcePos[2] += SourceVel[2];
-
- alSourcefv(Source, AL_POSITION, SourcePos);
- }
- }
-
-
- return 0;
- }
-
-
- We do this by slowly incrementing the position by it's velocity over
- time. The time is sampled by checking the system clock which gives
- us a tick count. It shouldn't be necessary to change this, but if the
- audio clip fades too fast you might want to change 50 to some higher n
- umber. Pressing any key will end the loop
-
-
-
-
-
-
-
-
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
-
- #define NUM_BUFFERS 3
-
-
- #define NUM_SOURCES 3
-
-
- #define BATTLE 0
- #define GUN1 1
- #define GUN2 2
-
-
- ALuint Buffers[NUM_BUFFERS];
-
-
- ALuint Sources[NUM_SOURCES];
-
-
- ALfloat SourcesPos[NUM_SOURCES][3];
-
-
- ALfloat SourcesVel[NUM_SOURCES][3];
-
-
-
- ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
-
-
- ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
-
-
-
- ALboolean LoadALData()
- {
-
-
- ALenum format;
- ALsizei size;
- ALvoid* data;
- ALsizei freq;
- ALboolean loop;
-
-
-
- alGenBuffers(NUM_BUFFERS, Buffers);
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alutLoadWAVFile("wavdata/Battle.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[BATTLE], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/Gun1.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[GUN1], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/Gun2.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[GUN2], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
-
-
- alGenSources(NUM_SOURCES, Sources);
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alSourcei (Sources[BATTLE], AL_BUFFER, Buffers[BATTLE] );
- alSourcef (Sources[BATTLE], AL_PITCH, 1.0 );
- alSourcef (Sources[BATTLE], AL_GAIN, 1.0 );
- alSourcefv(Sources[BATTLE], AL_POSITION, SourcePos[BATTLE]);
- alSourcefv(Sources[BATTLE], AL_VELOCITY, SourceVel[BATTLE]);
- alSourcei (Sources[BATTLE], AL_LOOPING, AL_TRUE );
-
- alSourcei (Sources[GUN1], AL_BUFFER, Buffers[GUN1] );
- alSourcef (Sources[GUN1], AL_PITCH, 1.0 );
- alSourcef (Sources[GUN1], AL_GAIN, 1.0 );
- alSourcefv(Sources[GUN1], AL_POSITION, SourcePos[GUN1]);
- alSourcefv(Sources[GUN1], AL_VELOCITY, SourceVel[GUN1]);
- alSourcei (Sources[GUN1], AL_LOOPING, AL_FALSE );
-
- alSourcei (Sources[GUN2], AL_BUFFER, Buffers[GUN2] );
- alSourcef (Sources[GUN2], AL_PITCH, 1.0 );
- alSourcef (Sources[GUN2], AL_GAIN, 1.0 );
- alSourcefv(Sources[GUN2], AL_POSITION, SourcePos[GUN2]);
- alSourcefv(Sources[GUN2], AL_VELOCITY, SourceVel[GUN2]);
- alSourcei (Sources[GUN2], AL_LOOPING, AL_FALSE );
-
-
-
- if( alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- return AL_TRUE;
- }
-
-
- void SetListenervalues()
- {
- alListenerfv(AL_POSITION, ListenerPos);
- alListenerfv(AL_VELOCITY, ListenerVel);
- alListenerfv(AL_ORIENTATION, ListenerOri);
- }
-
- void KillALData()
- {
- alDeleteBuffers(NUM_BUFFERS, &Buffers[0]);
- alDeleteSources(NUM_SOURCES, &Sources[0]);
- alutExit();
- }
-
- int main(int argc, char *argv[])
- {
-
- alutInit(NULL, 0);
- alGetError();
-
-
- if (LoadALData() == AL_FALSE)
- return 0;
-
- SetListenervalues();
-
-
- atexit(KillALData);
-
-
- alSourcePlay(Sources[BATTLE]);
-
-
-
- ALint play;
-
- while (!kbhit())
- {
- for (int i = 1; i < NUM_SOURCES; i++)
- {
- alGetSourcei(Sources[i], AL_SOURCE_STATE, &play);
-
- if (play != AL_PLAYING)
- {
-
-
- double theta = (double) (rand() % 360) * 3.14 / 180.0;
-
- SourcePos[i][0] = -float(cos(theta));
- SourcePos[i][1] = -float(rand()%2);
- SourcePos[i][2] = -float(sin(theta));
-
- alSourcefv(Sources[i], AL_POSITION, SourcePos[i] );
-
- alSourcePlay(Sourcev[i]);
- }
- }
- }
-
- return 0;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ALCdevice* pDevice;
-
- ALCubyte DeviceName[] = "DirectSound3D";
-
- pDevice = alcOpenDevice(DeviceName);
-
-
-
-
-
-
-
-
-
-
- ALCcontext* pContext;
-
- pContext = alcCreateContext(pDevice, NULL);
-
- alcMakeContextCurrent(pContext);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ALcontext* pCurContext;
- pCurContext = alcGetCurrentContext();
-
- ALdevice* pCurDevice;
- pCurDevice = alcGetContextsDevice(pCurContext);
-
-
-
- alcSuspendContext(pContext);
-
- alcProcessContext(pContext);
-
-
-
-
-
- alcMakeContextCurrent(NULL);
- alcDestroyContext(pContext);
- alcCloseDevice(pDevice);
-
-
-
-
- ALenum alcGetError(ALvoid);
-
- ALboolean alcIsExtensionPresent(ALCdevice* device, ALubyte* extName);
-
- ALvoid* alcGetProcAddress(ALCdevice* device, ALubyte* funcName);
-
- ALenum alcGetEnumvalue(ALCdevice* device, ALubyte* enumName);
-
- ALubyte* alcGetString(ALCdevice* device, ALenum token);
-
- ALvoid alcGetIntegerv(ALCdevice* device, ALenum token, ALsizei size, ALint* dest);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #define THUNDER 0
- #define WATERDROP 1
- #define STREAM 2
- #define RAIN 3
- #define CHIMES 4
- #define OCEAN 5
-
- #define NUM_BUFFERS 6
-
-
-
- ALuint Buffers[NUM_BUFFERS];
-
-
- vector Sources;
-
-
-
-
- ALboolean InitOpenAL()
- {
- ALCdevice* pDevice;
- ALCcontext* pContext;
- ALCubyte* deviceSpecifier;
- ALCubyte deviceName[] = "DirectSound3D";
-
-
- pDevice = alcOpenDevice(deviceName);
-
-
- deviceSpecifier = alcGetString(pDevice, ALC_DEVICE_SPECIFIER);
-
- printf("Using device '%s'./n", szDeviceSpecifier);
-
-
- pContext = alcCreateContext(pDevice, NULL);
-
-
- alcMakeContextCurrent(pContext);
-
-
- if (alcGetError() != ALC_NO_ERROR)
- return AL_FALSE;
-
- return AL_TRUE;
- }
-
-
-
-
- void ExitOpenAL()
- {
- ALCcontext* pCurContext;
- ALCdevice* pCurDevice;
-
-
- pCurContext = alcGetCurrentContext();
-
-
- pCurDevice = alcGetContextsDevice(pCurContext);
-
-
- alcMakeContextCurrent(NULL);
-
-
- alcDestroyContext(pCurContext);
- alcCloseDevice(pCurDevice);
- }
-
-
-
-
-
- ALboolean LoadALData()
- {
-
- ALenum format;
- ALsizei size;
- ALvoid* data;
- ALsizei freq;
- ALboolean loop;
-
-
- alGenBuffers(NUM_BUFFERS, Buffers);
-
- if(alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- alutLoadWAVFile("wavdata/thunder.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[THUNDER], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/waterdrop.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[WATERDROP], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/stream.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[STREAM], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/rain.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[RAIN], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/ocean.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[OCEAN], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
- alutLoadWAVFile("wavdata/chimes.wav", &format, &data, &size, &freq, &loop);
- alBufferData(Buffers[CHIMES], format, data, size, freq);
- alutUnloadWAV(format, data, size, freq);
-
-
- if (alGetError() != AL_NO_ERROR)
- return AL_FALSE;
-
- return AL_TRUE;
- }
-
-
- void AddSource(ALint type)
- {
- ALuint source;
-
- alGenSources(1, &source);
-
- if (alGetError() != AL_NO_ERROR)
- {
- printf("Error generating audio source.");
- exit(-1);
- }
-
- alSourcei (source, AL_BUFFER, Buffers[type]);
- alSourcef (source, AL_PITCH, 1.0 );
- alSourcef (source, AL_GAIN, 1.0 );
- alSourcefv(source, AL_POSITION, SourcePos );
- alSourcefv(source, AL_VELOCITY, SourceVel );
- alSourcei (source, AL_LOOPING, AL_TRUE );
-
- alSourcePlay(source);
-
- Sources.push_back(source);
- }
-
-
-
-
- void KillALData()
- {
- for (vector::iterator iter = Sources.begin(); iter != Sources.end(); ++iter)
- alDeleteSources(1, iter);
- Sources.clear();
- alDeleteBuffers(NUM_BUFFERS, Buffers);
- ExitOpenAL();
- }
-
-
-
- ALubyte c = ' ';
-
- while (c != 'q')
- {
- c = getche();
-
- switch (c)
- {
- case 'w': AddSource(WATERDROP); break;
- case 't': AddSource(THUNDER); break;
- case 's': AddSource(STREAM); break;
- case 'r': AddSource(RAIN); break;
- case 'o': AddSource(OCEAN); break;
- case 'c': AddSource(CHIMES); break;
- };
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- string GetALErrorString(ALenum err);
-
-
-
-
-
-
- ALuint LoadALBuffer(string path);
-
-
-
-
-
-
- ALuint GetLoadedALBuffer(string path);
-
-
-
-
-
-
- ALuint LoadALSample(string path, bool loop);
-
-
-
-
-
-
- void KillALLoadedData();
-
-
-
-
- bool LoadALData();
-
-
-
-
- void KillALData();
-
-
-
-
-
- vector LoadedFiles;
- vector Buffers;
- vector Sources;
-
-
-
-
-
- string GetALErrorString(ALenum err)
- {
- switch(err)
- {
- case AL_NO_ERROR:
- return string("AL_NO_ERROR");
- break;
-
- case AL_INVALID_NAME:
- return string("AL_INVALID_NAME");
- break;
-
- case AL_INVALID_ENUM:
- return string("AL_INVALID_ENUM");
- break;
-
- case AL_INVALID_value:
- return string("AL_INVALID_value");
- break;
-
- case AL_INVALID_OPERATION:
- return string("AL_INVALID_OPERATION");
- break;
-
- case AL_OUT_OF_MEMORY:
- return string("AL_OUT_OF_MEMORY");
- break;
- };
- }
-
-
-
- string GetALCErrorString(ALenum err)
- {
- switch(err)
- {
- case ALC_NO_ERROR:
- return string("AL_NO_ERROR");
- break;
-
- case ALC_INVALID_DEVICE:
- return string("ALC_INVALID_DEVICE");
- break;
-
- case ALC_INVALID_CONTEXT:
- return string("ALC_INVALID_CONTEXT");
- break;
-
- case ALC_INVALID_ENUM:
- return string("ALC_INVALID_ENUM");
- break;
-
- case ALC_INVALID_value:
- return string("ALC_INVALID_value");
- break;
-
- case ALC_OUT_OF_MEMORY:
- return string("ALC_OUT_OF_MEMORY");
- break;
- };
- }
-
-
-
-
-
- ALuint LoadALBuffer(string path)
- {
-
- ALenum format;
- ALsizei size;
- ALvoid* data;
- ALsizei freq;
- ALboolean loop;
-
-
- ALuint buffer;
- ALenum result;
-
-
- alGenBuffers(1, &buffer);
-
- if ((result = alGetError()) != AL_NO_ERROR)
- throw GetALErrorString(result);
-
-
- alutLoadWAVFile(szFilePath, &format, &data, &size, &freq, &loop);
-
- if ((result = alGetError()) != AL_NO_ERROR)
- throw GetALErrorString(result);
-
-
- alBufferData(buffer, format, data, size, freq);
-
- if ((result = alGetError()) != AL_NO_ERROR)
- throw GetALErrorString(result);
-
-
- alutUnloadWAV(format, data, size, freq);
-
- if ((result = alGetError()) != AL_NO_ERROR)
- throw GetALErrorString(result);
-
-
- return buffer;
- }
-
-
-
-
- ALuint GetLoadedALBuffer(string path)
- {
- int count = 0;
-
- ALuint buffer;
-
-
-
- for(vector::iterator iter = LoadedFiles.begin(); iter != LoadedFiles.end(); ++iter, count++)
- {
-
- if(*iter == path)
- return Buffers[count];
- }
-
-
- buffer = LoadALBuffer(path);
-
-
- Buffers.push_back(buffer);
-
- LoadedFiles.push_back(path);
-
- return buffer;
- }
-
-
-
-
-
-
- ALuint LoadALSample(string path, bool loop)
- {
- ALuint source;
- ALuint buffer;
- ALenum result;
-
-
- buffer = GetLoadedALBuffer(path);
-
-
- alGenSources(1 &source);
-
- if ((result = alGetError()) != AL_NO_ERROR)
- throw GetALErrorString(result);
-
-
- alSourcei (source, AL_BUFFER, buffer );
- alSourcef (source, AL_PITCH, 1.0 );
- alSourcef (source, AL_GAIN, 1.0 );
- alSourcefv(source, AL_POSITION, SourcePos);
- alSourcefv(source, AL_VELOCITY, SourceVel);
- alSourcei (source, AL_LOOPING, loop );
-
-
- Sources.push_back(source);
-
-
- return source;
- }
-
-
-
-
- void KillALLoadedData()
- {
- LoadedFiles.clear();
- }
-
-
-
- ALuint phaser1;
- ALuint phaser2;
-
- void LoadALData()
- {
-
- phaser1 = LoadALSample("wavdata/phaser.wav", false);
- phaser2 = LoadALSample("wavdata/phaser.wav", true);
-
- KillLoadedALData();
- }
-
-
-
-
-
- void KillALData()
- {
-
- for (vector::iterator iter = Buffers.begin(); iter != Buffers.end(); ++iter)
- alDeleteBuffers(1, iter);
-
-
- for (vector::iterator iter = Sources.begin(); iter != Sources.end(); ++iter)
- alDeleteBuffers(1, iter);
-
-
- Buffers.clear();
- Sources.clear();
- }
-
- try
- {
- InitOpenAL();
-
- LoadALData();
- }
- catch(string err)
- {
- cout << "OpenAL error: " << err.c_str() << endl;
- }
-
-
-
-
-
-
-
-
-
-
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。