From 117010b9fe46256d3093bc7d503fc7d6aaf81128 Mon Sep 17 00:00:00 2001 From: Aaldert Date: Sun, 5 Jun 2016 23:49:06 +0200 Subject: [PATCH] OpenAl Werkt! en Setup enzo --- CrystalPoint.cpp | 4 + CrystalPoint.h | 6 ++ CrystalPoint.vcxproj | 12 ++- CrystalPoint.vcxproj.filters | 15 +++ Enemy.cpp | 18 ++-- Enemy.h | 4 +- Main.cpp | 2 + OpenAL.cpp | 180 ----------------------------------- OpenAL.h | 29 ------ Sound.cpp | 139 +++++++++++++++++++++++++++ Sound.h | 22 +++++ SoundSystem.cpp | 56 +++++++++++ SoundSystem.h | 25 +++++ WAVE/bond.wav | Bin 0 -> 73772 bytes World.cpp | 12 ++- World.h | 1 + WorldHandler.cpp | 1 + worlds/small.json | 31 +++--- 18 files changed, 320 insertions(+), 237 deletions(-) delete mode 100644 OpenAL.cpp delete mode 100644 OpenAL.h create mode 100644 Sound.cpp create mode 100644 Sound.h create mode 100644 SoundSystem.cpp create mode 100644 SoundSystem.h create mode 100644 WAVE/bond.wav diff --git a/CrystalPoint.cpp b/CrystalPoint.cpp index cf24833..867a0b6 100644 --- a/CrystalPoint.cpp +++ b/CrystalPoint.cpp @@ -9,6 +9,8 @@ int CrystalPoint::width = 0; int CrystalPoint::height = 0; +SoundSystem CrystalPoint::sound_system; + void CrystalPoint::init() { player = Player::getInstance(); @@ -90,6 +92,8 @@ void CrystalPoint::update() mouseOffset = Vec2f(0, 0); prevKeyboardState = keyboardState; glutPostRedisplay(); + + sound_system.SetListener(player->position, Vec3f(), Vec3f()); } diff --git a/CrystalPoint.h b/CrystalPoint.h index da4a3b8..5437d5c 100644 --- a/CrystalPoint.h +++ b/CrystalPoint.h @@ -1,8 +1,10 @@ #pragma once class WorldHandler; +class SoundSystem; class Player; #include "Vector.h" +#include "SoundSystem.h" class KeyboardState { @@ -33,4 +35,8 @@ public: float lastFrameTime; + static SoundSystem& GetSoundSystem() { return sound_system; } + +private: + static SoundSystem sound_system; }; \ No newline at end of file diff --git a/CrystalPoint.vcxproj b/CrystalPoint.vcxproj index 7784d07..87f744b 100644 --- a/CrystalPoint.vcxproj +++ b/CrystalPoint.vcxproj @@ -89,12 +89,13 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - freeglut/include + freeglut/include; openAL/include Console true - freeglut/lib + freeglut/lib; openAL/libs/Win32 + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;OpenAL32.lib;%(AdditionalDependencies) @@ -163,7 +164,8 @@ - + + @@ -181,7 +183,8 @@ - + + @@ -196,6 +199,7 @@ + diff --git a/CrystalPoint.vcxproj.filters b/CrystalPoint.vcxproj.filters index 57a4a5b..698daee 100644 --- a/CrystalPoint.vcxproj.filters +++ b/CrystalPoint.vcxproj.filters @@ -69,6 +69,12 @@ Source Files\World + + Source Files + + + Source Files + @@ -119,6 +125,12 @@ Header Files + + Header Files + + + Header Files + @@ -138,5 +150,8 @@ Resource Files + + Resource Files + \ No newline at end of file diff --git a/Enemy.cpp b/Enemy.cpp index ad5243a..61376ea 100644 --- a/Enemy.cpp +++ b/Enemy.cpp @@ -1,8 +1,8 @@ #define _USE_MATH_DEFINES #include -#include "OpenAL.h" #include "Enemy.h" #include "Model.h" +#include "CrystalPoint.h" #include Enemy::Enemy(const std::string &fileName, @@ -19,7 +19,7 @@ Enemy::Enemy(const std::string &fileName, speed = 1; radius = 10; hasTarget = false; -// openal = new OpenAL(); + hit_sound_id = CrystalPoint::GetSoundSystem().LoadSound("WAVE/Sound.wav", false); } @@ -61,14 +61,11 @@ void Enemy::inEyeSight(Vec3f & TargetPosition) bool Enemy::hasCollison(Vec3f &) { - + return false; } void Enemy::update(float delta) { -// if (!openal->isMusicPlaying()) { -// openal->playMusic(); -// } if (hasTarget) { @@ -91,5 +88,12 @@ void Enemy::update(float delta) position.z += dz; } rotation.y = atan2f(dx, dz) * 180 / M_PI; - } + } + + if (false) + { + Sound* sound = CrystalPoint::GetSoundSystem().GetSound(hit_sound_id); + sound->SetPos(position, Vec3f()); + sound->Play(); + } } diff --git a/Enemy.h b/Enemy.h index a92bb13..d7886da 100644 --- a/Enemy.h +++ b/Enemy.h @@ -3,7 +3,6 @@ #include "Entity.h" #include #include "Vector.h" -#include "OpenAL.h" class Enemy : public Entity { @@ -20,5 +19,8 @@ public: void inEyeSight(Vec3f &); bool hasCollison(Vec3f &); + +private: + int hit_sound_id; }; diff --git a/Main.cpp b/Main.cpp index d89aa26..f911678 100644 --- a/Main.cpp +++ b/Main.cpp @@ -54,6 +54,8 @@ int main(int argc, char* argv[]) CrystalPoint::width = GLUT_WINDOW_WIDTH; glutMainLoop(); + + delete app; return 0; } diff --git a/OpenAL.cpp b/OpenAL.cpp deleted file mode 100644 index 613fb7c..0000000 --- a/OpenAL.cpp +++ /dev/null @@ -1,180 +0,0 @@ -#include "OpenAL.h" -#include -#include -#include -#include -#include - -SoundSystem::SoundSystem(): - device(nullptr), - context(nullptr) -{ - device = alcOpenDevice(nullptr); - if (!device) - return; - context = alcCreateContext(device, nullptr); - if (!context) - return; - alcMakeContextCurrent(context); -} - -SoundSystem::~SoundSystem() -{ - alcMakeContextCurrent(nullptr); //Make no context current - alcDestroyContext(context); //Destroy the OpenAL Context - alcCloseDevice(device); //Close the OpenAL Device -} - - - - - -void SoundSystem::Play(ESoundID inID) -{ - ALuint buffer; - alGenBuffers(1, &buffer); //Generate one OpenAL Buffer and link to "buffer" - ALuint source; - alGenSources(1, &source); //Generate one OpenAL Source and link to "source" - if (alGetError() != AL_NO_ERROR) return ; //Error during buffer/source generation - - //Figure out the format of the WAVE file - ALenum format = 0; //The audio format (bits per sample, number of channels) - if (bitsPerSample == 8) - { - if (channels == 1) - format = AL_FORMAT_MONO8; - else if (channels == 2) - format = AL_FORMAT_STEREO8; - } - else if (bitsPerSample == 16) - { - if (channels == 1) - format = AL_FORMAT_MONO16; - else if (channels == 2) - format = AL_FORMAT_STEREO16; - } - if (!format) return; //Not valid format - - ALuint frequency = sampleRate; //The Sample Rate of the WAVE file - alBufferData(buffer, format, buf, dataSize, frequency); //Store the sound data in the OpenAL Buffer - if (alGetError() != AL_NO_ERROR) - return EndWithError("Error loading ALBuffer"); //Error during buffer loading - - //Sound setting variables - ALfloat SourcePos[] = { 0.0, 0.0, 0.0 }; //Position of the source sound - ALfloat SourceVel[] = { 0.0, 0.0, 0.0 }; //Velocity of the source sound - ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 }; //Position of the listener - ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 }; //Velocity of the listener - ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 }; //Orientation of the listener - //First direction vector, then vector pointing up) - //Listener - alListenerfv(AL_POSITION, ListenerPos); //Set position of the listener - alListenerfv(AL_VELOCITY, ListenerVel); //Set velocity of the listener - alListenerfv(AL_ORIENTATION, ListenerOri); //Set orientation of the listener - - //Source - alSourcei(source, AL_BUFFER, buffer); //Link the buffer to the source - alSourcef(source, AL_PITCH, 1.0f); //Set the pitch of the source - alSourcef(source, AL_GAIN, 1.0f); //Set the gain of the source - alSourcefv(source, AL_POSITION, SourcePos); //Set the position of the source - alSourcefv(source, AL_VELOCITY, SourceVel); //Set the velocity of the source - alSourcei(source, AL_LOOPING, AL_FALSE); //Set if source is looping sound - - //PLAY - alSourcePlay(source); //Play the sound buffer linked to the source - if (alGetError() != AL_NO_ERROR) return EndWithError("Error playing sound"); //Error when playing sound - system("PAUSE"); //Pause to let the sound play - - //Clean-up - fclose(fp); //Close the WAVE file - delete[] buf; //Delete the sound data buffer - alDeleteSources(1, &source); //Delete the OpenAL Source - alDeleteBuffers(1, &buffer); //Delete the OpenAL Buffer - - return ; -} - - -void SoundSystem::Pause(ESoundID inID) -{ - -} - - -void SoundSystem::Stop(ESoundID inID) -{ - -} - - - - -const char* SoundSystem::GetWaveFile(ESoundID inID) -{ - -} - -bool SoundSystem::LoadWave(ESoundID inID) -{ - const char* path = GetWaveFile(inID); - - FILE *fp = fopen(path, "rb"); //Open the WAVE file - if (!fp) - return false; // Could not open file - - //Check that the WAVE file is OK - char type[4]; - fread(type, sizeof(char), 4, fp); // Reads the first bytes in the file - if (type[0] != 'R' || type[1] != 'I' || type[2] != 'F' || type[3] != 'F') // Should be "RIFF" - return false; // Not RIFF - - DWORD size; - fread(&size, sizeof(DWORD), 1, fp); // Continue to read the file - fread(type, sizeof(char), 4, fp); // Continue to read the file - if (type[0] != 'W' || type[1] != 'A' || type[2] != 'V' || type[3] != 'E') //This part should be "WAVE" - return false; //Not WAVE - - fread(type, sizeof(char), 4, fp); //Continue to read the file - if (type[0] != 'f' || type[1] != 'm' || type[2] != 't' || type[3] != ' ') //This part should be "fmt " - return false; //Not fmt - - //Now we know that the file is a acceptable WAVE file - //Info about the WAVE data is now read and stored - DWORD chunkSize; - fread(&chunkSize, sizeof(DWORD), 1, fp); - short formatType; - fread(&formatType, sizeof(short), 1, fp); - short channels; - fread(&channels, sizeof(short), 1, fp); - DWORD sampleRate; - fread(&sampleRate, sizeof(DWORD), 1, fp); - DWORD avgBytesPerSec; - fread(&avgBytesPerSec, sizeof(DWORD), 1, fp); - short bytesPerSample; - fread(&bytesPerSample, sizeof(short), 1, fp); - short bitsPerSample; - fread(&bitsPerSample, sizeof(short), 1, fp); - - fread(type, sizeof(char), 4, fp); - if (type[0] != 'd' || type[1] != 'a' || type[2] != 't' || type[3] != 'a') //This part should be "data" - return false; //not data - - DWORD dataSize; - fread(&dataSize, sizeof(DWORD), 1, fp); //The size of the sound data is read - - //Display the info about the WAVE file - std::cout << "Chunk Size: " << chunkSize << "\n"; - std::cout << "Format Type: " << formatType << "\n"; - std::cout << "Channels: " << channels << "\n"; - std::cout << "Sample Rate: " << sampleRate << "\n"; - std::cout << "Average Bytes Per Second: " << avgBytesPerSec << "\n"; - std::cout << "Bytes Per Sample: " << bytesPerSample << "\n"; - std::cout << "Bits Per Sample: " << bitsPerSample << "\n"; - std::cout << "Data Size: " << dataSize << "\n"; - - unsigned char* buf = new unsigned char[dataSize]; //Allocate memory for the sound data - std::cout << fread(buf, sizeof(BYTE), dataSize, fp) << " bytes loaded\n"; //Read the sound data and display the - - return true; -} - diff --git a/OpenAL.h b/OpenAL.h deleted file mode 100644 index 35b8953..0000000 --- a/OpenAL.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -struct ALCdevice; -struct ALCcontext; - -class SoundSystem -{ -public: - enum ESoundID - { - ES_Music1, - ES_Music2 - }; - - SoundSystem(); - ~SoundSystem(); - - void Play(ESoundID inID); - void Pause(ESoundID inID); - void Stop(ESoundID inID); - - -private: - const char* GetWaveFile(ESoundID inID); - bool LoadWave(ESoundID inID); - - ALCdevice* device; - ALCcontext* context; -}; diff --git a/Sound.cpp b/Sound.cpp new file mode 100644 index 0000000..cc990da --- /dev/null +++ b/Sound.cpp @@ -0,0 +1,139 @@ +#include "Sound.h" + +#include +#include +#include + +Sound::Sound(const char* inWavPath, bool inLooping): + buffer_id(0), + source_id(0), + is_looping(inLooping) + +{ + const char* path = inWavPath; + + FILE *fp = fopen(path, "rb"); // Open the WAVE file + if (!fp) + return; // Could not open file + + // Check that the WAVE file is OK + char type[4]; + fread(type, sizeof(char), 4, fp); // Reads the first bytes in the file + if (type[0] != 'R' || type[1] != 'I' || type[2] != 'F' || type[3] != 'F') // Should be "RIFF" + return; // Not RIFF + + DWORD size; + fread(&size, sizeof(DWORD), 1, fp); // Continue to read the file + fread(type, sizeof(char), 4, fp); // Continue to read the file + if (type[0] != 'W' || type[1] != 'A' || type[2] != 'V' || type[3] != 'E') // This part should be "WAVE" + return; // Not WAVE + + fread(type, sizeof(char), 4, fp); // Continue to read the file + if (type[0] != 'f' || type[1] != 'm' || type[2] != 't' || type[3] != ' ') // This part should be "fmt " + return; // Not fmt + + // Now we know that the file is a acceptable WAVE file + // Info about the WAVE data is now read and stored + DWORD chunkSize; + fread(&chunkSize, sizeof(DWORD), 1, fp); + short formatType; + fread(&formatType, sizeof(short), 1, fp); + short channels; + fread(&channels, sizeof(short), 1, fp); + DWORD sampleRate; + fread(&sampleRate, sizeof(DWORD), 1, fp); + DWORD avgBytesPerSec; + fread(&avgBytesPerSec, sizeof(DWORD), 1, fp); + short bytesPerSample; + fread(&bytesPerSample, sizeof(short), 1, fp); + short bitsPerSample; + fread(&bitsPerSample, sizeof(short), 1, fp); + ALenum format = 0; // The audio format (bits per sample, number of channels) + if (bitsPerSample == 8) + { + if (channels == 1) + format = AL_FORMAT_MONO8; + else if (channels == 2) + format = AL_FORMAT_STEREO8; + } + else if (bitsPerSample == 16) + { + if (channels == 1) + format = AL_FORMAT_MONO16; + else if (channels == 2) + format = AL_FORMAT_STEREO16; + } + if (!format) + return; // Not valid format + + fread(type, sizeof(char), 4, fp); + if (type[0] != 'd' || type[1] != 'a' || type[2] != 't' || type[3] != 'a') // This part should be "data" + return; // not data + + DWORD dataSize; + fread(&dataSize, sizeof(DWORD), 1, fp); // The size of the sound data is read + + // Display the info about the WAVE file + std::cout << "Chunk Size: " << chunkSize << "\n"; + std::cout << "Format Type: " << formatType << "\n"; + std::cout << "Channels: " << channels << "\n"; + std::cout << "Sample Rate: " << sampleRate << "\n"; + std::cout << "Average Bytes Per Second: " << avgBytesPerSec << "\n"; + std::cout << "Bytes Per Sample: " << bytesPerSample << "\n"; + std::cout << "Bits Per Sample: " << bitsPerSample << "\n"; + std::cout << "Data Size: " << dataSize << "\n"; + + unsigned char* buf = new unsigned char[dataSize]; // Allocate memory for the sound data + std::cout << fread(buf, sizeof(BYTE), dataSize, fp) << " bytes loaded\n"; // Read the sound data and display the + fclose(fp); + + alGenBuffers(1, &buffer_id); // Generate one OpenAL Buffer and link to "buffer" + alGenSources(1, &source_id); // Generate one OpenAL Source and link to "source" + if (alGetError() != AL_NO_ERROR) + return; // Error during buffer/source generation + + alBufferData(buffer_id, format, buf, dataSize, sampleRate); // Store the sound data in the OpenAL Buffer + if (alGetError() != AL_NO_ERROR) + return; // Error during buffer loading + + delete[] buf; // Delete the sound data buffer +} + + +Sound::~Sound() +{ + alSourceStop(source_id); + alDeleteSources(1, &source_id); // Delete the OpenAL Source + alDeleteBuffers(1, &buffer_id); // Delete the OpenAL Buffer +} + + +void Sound::SetPos(const Vec3f& inPos, const Vec3f& inVel) +{ + alSourcei(source_id, AL_BUFFER, buffer_id); // Link the buffer to the source + alSourcef(source_id, AL_PITCH, 1.0f); // Set the pitch of the source + alSourcef(source_id, AL_GAIN, 1.0f); // Set the gain of the source + alSourcefv(source_id, AL_POSITION, inPos.v); // Set the position of the source + alSourcefv(source_id, AL_VELOCITY, inVel.v); // Set the velocity of the source + alSourcei(source_id, AL_LOOPING, is_looping ? AL_TRUE : AL_FALSE); // Set if source is looping sound +} + + +void Sound::Play() +{ + alSourcePlay(source_id); + int e = alGetError(); // != AL_NO_ERROR) return; +} + + +void Sound::Pause() +{ + alSourcePause(source_id); +} + + +void Sound::Stop() +{ + alSourceStop(source_id); +} + diff --git a/Sound.h b/Sound.h new file mode 100644 index 0000000..74e2f9f --- /dev/null +++ b/Sound.h @@ -0,0 +1,22 @@ +#pragma once + +#include "vector.h" + +class Sound +{ +public: + Sound(const char* inWavPath, bool inLooping); + ~Sound(); + + void SetPos(const Vec3f& inPos, const Vec3f& inVel); + + void Play(); + void Pause(); + void Stop(); + +private: + unsigned int buffer_id; + unsigned int source_id; + + bool is_looping; +}; \ No newline at end of file diff --git a/SoundSystem.cpp b/SoundSystem.cpp new file mode 100644 index 0000000..bd207be --- /dev/null +++ b/SoundSystem.cpp @@ -0,0 +1,56 @@ +#include "SoundSystem.h" + +#include +#include +#include + + + +SoundSystem::SoundSystem(): + device(nullptr), + context(nullptr) +{ + device = alcOpenDevice(nullptr); + if (!device) + return; + context = alcCreateContext(device, nullptr); + if (!context) + return; + alcMakeContextCurrent(context); +} + + +SoundSystem::~SoundSystem() +{ + for (auto sound : sounds) + delete sound; + alcMakeContextCurrent(nullptr); + alcDestroyContext(context); + alcCloseDevice(device); +} + + +void SoundSystem::SetListener(const Vec3f& inPos, const Vec3f& inVel, const Vec3f& inOri) +{ + ALfloat orientation[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 }; + + alListenerfv(AL_POSITION, inPos.v); + alListenerfv(AL_VELOCITY, inVel.v); + alListenerfv(AL_ORIENTATION, orientation); +} + + +unsigned int SoundSystem::LoadSound(const char* inWavPath, bool inLooping) +{ + Sound* sound = new Sound(inWavPath, inLooping); + sounds.push_back(sound); + return sounds.size() - 1; +} + + +Sound* SoundSystem::GetSound(unsigned int inID) +{ + if (inID > sounds.size()) + return nullptr; + return sounds[inID]; +} diff --git a/SoundSystem.h b/SoundSystem.h new file mode 100644 index 0000000..d6908ce --- /dev/null +++ b/SoundSystem.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include +#include +#include "vector.h" +#include "Sound.h" + + +class SoundSystem +{ +public: + SoundSystem(); + ~SoundSystem(); + + void SetListener(const Vec3f& inPos, const Vec3f& inVel, const Vec3f& inOri); + + unsigned int LoadSound(const char* inWavPath, bool inLooping); + Sound* GetSound(unsigned int inID); + +private: + ALCdevice* device; + ALCcontext* context; + std::vector sounds; +}; diff --git a/WAVE/bond.wav b/WAVE/bond.wav new file mode 100644 index 0000000000000000000000000000000000000000..c478afed7f43a2667eed4396c96892c3bbea2883 GIT binary patch literal 73772 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 P #include -World::World(const std::string &fileName) +World::World(const std::string &fileName): + music_id(-1) { //Store player instance player = Player::getInstance(); @@ -113,6 +114,15 @@ World::World(const std::string &fileName) enemies.push_back(new Enemy(e["file"].asString(), position, rotation, scale)); } + + if (!v["world"]["music"].isNull()) + { + music_id = CrystalPoint::GetSoundSystem().LoadSound(v["world"]["music"].asString().c_str(), true); + Sound* music = CrystalPoint::GetSoundSystem().GetSound(music_id); + music->SetPos(Vec3f(), Vec3f()); + music->Play(); + } + } diff --git a/World.h b/World.h index 649e2d4..48f9506 100644 --- a/World.h +++ b/World.h @@ -17,6 +17,7 @@ private: Player* player; HeightMap* heightmap; Interface* interface; + int music_id; std::vector entities; std::vector enemies; diff --git a/WorldHandler.cpp b/WorldHandler.cpp index 97fa7a2..4b41fae 100644 --- a/WorldHandler.cpp +++ b/WorldHandler.cpp @@ -97,6 +97,7 @@ bool WorldHandler::isPlayerPositionValid(void) { if(!loadingWorld) return world->isPlayerPositionValid(); + return false; } float WorldHandler::getHeight(float x, float y) diff --git a/worlds/small.json b/worlds/small.json index 466db7c..274e4b6 100644 --- a/worlds/small.json +++ b/worlds/small.json @@ -1,17 +1,18 @@ { - "world": { - "heightmap": "worlds/small.png", - "object-templates": [ - { - "color":100, - "file": "models/boom/Boom.obj", - "collision": false - } - ] - }, - "player": { - "startposition": [ 20, 5, 20 ] - }, - "objects": [], - "enemies": [] + "world": { + "heightmap": "worlds/small.png", + "object-templates": [ + { + "color": 100, + "file": "models/boom/Boom.obj", + "collision": false + } + ], + "music": "WAVE/bond.wav" + }, + "player": { + "startposition": [ 20, 5, 20 ] + }, + "objects": [], + "enemies": [] } \ No newline at end of file