Skip to content
Open

Sound #558

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions GameEngine/EngineCoreTest/EngineCoreTest.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(Platform)\$(Configuration)\</IntDir>
<IncludePath>$(SolutionDir)Vendors/OpenGL/include;$(SolutionDir)GameEngine/Engine;$(SolutionDir)GameEngine;$(ProjectDir);$(SolutionDir)Vendors;$(SolutionDir)Vendors/TinyObjLoader;$(IncludePath);$(SolutionDir)Vendors/boost_1_55_0;$(SolutionDir)Vendors\fmod\inc</IncludePath>
<IncludePath>$(SolutionDir)Vendors/OpenGL/include;$(SolutionDir)GameEngine/Engine;$(SolutionDir)GameEngine;$(ProjectDir);$(SolutionDir)Vendors;$(SolutionDir)Vendors/TinyObjLoader;$(IncludePath);$(SolutionDir)Vendors/boost_1_55_0</IncludePath>
<LibraryPath>$(SolutionDir)Vendors/OpenGL/lib/x64;$(SolutionDir)Vendors\fmod\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)</LibraryPath>
<SourcePath>$(SolutionDir)/ResourcesForTests;</SourcePath>
</PropertyGroup>
Expand All @@ -83,8 +83,8 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Retail|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(Platform)\$(Configuration)\</IntDir>
<LibraryPath>$(SolutionDir)Vendors/OpenGL/lib/x64;$(SolutionDir)Vendors\fmod\lib;$(SolutionDir)Vendors/bullet\lib\x64Release;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(LibraryPath)</LibraryPath>
<IncludePath>$(SolutionDir)Vendors/OpenGL/include;$(SolutionDir)GameEngine/Engine;$(SolutionDir)GameEngine;$(ProjectDir);$(SolutionDir)Vendors;$(SolutionDir)Vendors/TinyObjLoader;$(IncludePath);$(SolutionDir)Vendors/boost_1_55_0;$(SolutionDir)Vendors\bullet\src;$(SolutionDir)Vendors\fmod\inc</IncludePath>
<LibraryPath>$(SolutionDir)Vendors/OpenGL/lib/x64;$(SolutionDir)Vendors/bullet\lib\x64Release;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(LibraryPath)</LibraryPath>
<IncludePath>$(SolutionDir)Vendors/OpenGL/include;$(SolutionDir)GameEngine/Engine;$(SolutionDir)GameEngine;$(ProjectDir);$(SolutionDir)Vendors;$(SolutionDir)Vendors/TinyObjLoader;$(IncludePath);$(SolutionDir)Vendors/boost_1_55_0;$(SolutionDir)Vendors\bullet\src</IncludePath>
<SourcePath>$(SolutionDir)/ResourcesForTests;</SourcePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
Expand All @@ -104,7 +104,7 @@
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>Ws2_32.lib;minizip.lib;zlib.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;fmodex64_vc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>Ws2_32.lib;minizip.lib;zlib.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<SubSystem>Console</SubSystem>
<Profile>true</Profile>
Expand All @@ -131,7 +131,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>Ws2_32.lib;minizip.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;fmodex64_vc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>Ws2_32.lib;minizip.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>$(SolutionDir)Vendors\zlib\lib\windows\x64;$(SolutionDir)Vendors\minizip\lib\windows\x64;C:\Program Files (x86)\Visual Leak Detector\lib\Win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
Expand All @@ -156,7 +156,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>minizip.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;fmodex64_vc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>minizip.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>$(SolutionDir)Vendors\zlib\lib\windows\x64;$(SolutionDir)Vendors\minizip\lib\windows\x64;C:\Program Files (x86)\Visual Leak Detector\lib\Win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
Expand All @@ -181,7 +181,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>minizip.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;fmodex64_vc.lib;BulletCollision.lib;BulletDynamics.lib;BulletFileLoader.lib;BulletWorldImporter.lib;BulletMultiThreaded.lib;ConvexDecomposition.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>minizip.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;opengl32.lib;glu32.lib;glew32.lib;sdl2.lib;sdl2main.lib;BulletCollision.lib;BulletDynamics.lib;BulletFileLoader.lib;BulletWorldImporter.lib;BulletMultiThreaded.lib;ConvexDecomposition.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>$(SolutionDir)Vendors\zlib\lib\windows\x64;$(SolutionDir)Vendors\minizip\lib\windows\x64;C:\Program Files (x86)\Visual Leak Detector\lib\Win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
Expand Down
99 changes: 57 additions & 42 deletions GameEngine/GameEngine/Engine/Audio/Audio.cpp
Original file line number Diff line number Diff line change
@@ -1,61 +1,76 @@
#include <Audio/Audio.hh>
#include <Audio/AudioManager.hh>
#include "Audio.hh"

Audio::Audio(std::shared_ptr<AudioManager> manager, const OldFile &file, AudioType type, const std::string &name)
: _manager(manager)
, _file(file)
, _name(name.empty() ? file.getShortFileName() : name)
, _audio(nullptr)
, _audioType(type)
Audio::Audio(SoLoud::Wav & sample) :
_sample(sample),
_volume(1.0f),
_speed(1.0f),
_pan(1.0f),
_looping(false),
_handle(0),
_state(STOP)
{
assert(type != AUDIO_TYPE_UNDEFINED && "Audio type is undefined");
assert(manager != nullptr && "Audio manager is null");
}

Audio::~Audio()
{
if (!_audio)
return;
_audio->release();
}

bool Audio::load(AudioSpatialType type)
SoLoud::Wav & Audio::getSample(void) const
{
if (_audio)
return true;
FMOD::Sound *audio = nullptr;
if (_audioType == AUDIO_SOUND)
{
_manager->getSystem()->createSound(_file.getFullName().c_str(), type, 0, &audio);
}
else if (_audioType == AUDIO_STREAM)
{
_manager->getSystem()->createStream(_file.getFullName().c_str(), type, 0, &audio);
}
if (audio == nullptr)
{
std::cerr << "FMOD failed to load audio." << std::endl;
return false;
}
_audio = std::shared_ptr<FMOD::Sound>(audio);
return true;
return this->_sample;
}

const OldFile &Audio::getPath() const
float Audio::getVolume(void) const
{
return _file;
return this->_volume;
}

const std::string &Audio::getName() const
float Audio::getSpeed(void) const
{
return _name;
return this->_speed;
}

FMOD::Channel *Audio::play(ChannelGroupType channelGroup, bool now)
float Audio::getPan(void) const
{
FMOD::Channel *channel = nullptr;
_manager->getSystem()->playSound(FMOD_CHANNEL_FREE, _audio.get(), true, &channel);
channel->setChannelGroup(_manager->getChannelGroup(channelGroup));
channel->setPaused(!now);
return channel;
return this->_pan;
}

int Audio::getHandle(void) const
{
return this->_handle;
}

bool Audio::getLooping(void) const
{
return this->_looping;
}

void Audio::setSample(SoLoud::Wav & other)
{
this->_sample = other;
}

void Audio::setVolume(float other)
{
this->_volume = other;
}

void Audio::setSpeed(float other)
{
this->_speed = other;
}

void Audio::setPan(float other)
{
this->_pan = other;
}

void Audio::setHandle(int other)
{
this->_handle = other;
}

void Audio::setLooping(bool other)
{
this->_looping = other;
}
63 changes: 32 additions & 31 deletions GameEngine/GameEngine/Engine/Audio/Audio.hh
Original file line number Diff line number Diff line change
@@ -1,42 +1,43 @@
#pragma once

#include <Utils/OldFile.hpp>
#include <fmod.hpp>
#include <memory>
#include <cassert>
#include <Audio/FmodError.hpp>
#include <Audio/ChannelGroupType.hpp>

class AudioManager;
#include <soloud_wav.h>

class Audio
{
public:
enum AudioType
enum SoundPlayState
{
AUDIO_TYPE_UNDEFINED = 0
, AUDIO_SOUND = 1
, AUDIO_STREAM = 2
STOP = 0,
PLAY = 1,
PAUSE = 2
};

enum AudioSpatialType
{
AUDIO_SPACE_UNDEFINED = 0
, AUDIO_2D = FMOD_2D
, AUDIO_3D = FMOD_3D
};

public:
Audio(std::shared_ptr<AudioManager> manager, const OldFile &file, AudioType type, const std::string &name = "");
Audio(SoLoud::Wav & sample);
~Audio();
bool load(AudioSpatialType type);
FMOD::Channel *play(ChannelGroupType channelGroup, bool now);
const OldFile &getPath() const;
const std::string &getName() const;

SoLoud::Wav & getSample(void) const;
float getVolume(void) const;
float getSpeed(void) const;
float getPan(void) const;
bool getLooping(void) const;
int getHandle(void) const;
SoundPlayState getState(void) const;

void setSample(SoLoud::Wav & other);
void setVolume(float other);
void setSpeed(float other);
void setPan(float other);
void setLooping(bool other);
void setHandle(int other);
void setState(SoundPlayState other);

private:
std::shared_ptr<AudioManager> _manager;
OldFile _file;
const std::string _name;
std::shared_ptr<FMOD::Sound> _audio;
AudioType _audioType;
};
SoLoud::Wav &_sample;
float _volume;
float _speed;
float _pan;
bool _looping;
int _handle;
SoundPlayState _state;
};

Loading