1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/*
Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file)
This file is part of Lugaru.
Lugaru is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Lugaru is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Lugaru. If not, see <http://www.gnu.org/licenses/>.
*/
#include "Audio/Sounds.hpp"
#include "Audio/openal_wrapper.hpp"
#include "Utils/Folders.hpp"
struct OPENAL_SAMPLE* samp[sounds_count];
extern XYZ envsound[30];
extern float envsoundvol[30];
extern int numenvsounds;
extern float envsoundlife[30];
int footstepsound, footstepsound2, footstepsound3, footstepsound4;
int channels[100];
static const char* sound_data[sounds_count] = {
#define DECLARE_SOUND(id, filename) filename,
#include "Sounds.def"
#undef DECLARE_SOUND
};
// FIXME: dimensionality is not a property of the sound sample.
// This should be decided at the time of playback
static int snd_mode(int snd)
{
switch (snd) {
case alarmsound:
case consolefailsound:
case consolesuccesssound:
case firestartsound:
case fireendsound:
return OPENAL_2D;
default:
return OPENAL_HW3D;
}
}
void loadAllSounds()
{
for (int i = 0; i < sounds_count; i++) {
std::string buf = std::string("Sounds/") + sound_data[i];
samp[i] = OPENAL_Sample_Load(OPENAL_FREE,
Folders::getResourcePath(buf).c_str(),
snd_mode(i),
0, 0);
}
footstepsound = footstepsn1;
footstepsound2 = footstepsn2;
footstepsound3 = footstepst1;
footstepsound4 = footstepst2;
// Huh?
// OPENAL_Sample_SetMode(samp[whooshsound], OPENAL_LOOP_NORMAL);
for (int i = stream_firesound; i <= stream_menutheme; i++) {
OPENAL_Stream_SetMode(samp[i], OPENAL_LOOP_NORMAL);
}
}
void addEnvSound(XYZ coords, float vol, float life)
{
envsound[numenvsounds] = coords;
envsoundvol[numenvsounds] = vol;
envsoundlife[numenvsounds] = life;
numenvsounds++;
}
void emit_sound_at(int soundid, const XYZ& pos, float vol)
{
PlaySoundEx(soundid, samp[soundid], NULL, true);
OPENAL_3D_SetAttributes_(channels[soundid], pos);
OPENAL_SetVolume(channels[soundid], vol);
OPENAL_SetPaused(channels[soundid], false);
}
void emit_sound_np(int soundid, float vol)
{
PlaySoundEx(soundid, samp[soundid], NULL, true);
OPENAL_SetVolume(channels[soundid], vol);
OPENAL_SetPaused(channels[soundid], false);
}
void emit_stream_at(int soundid, const XYZ& pos, float vol)
{
PlayStreamEx(soundid, samp[soundid], NULL, true);
OPENAL_3D_SetAttributes_(channels[soundid], pos);
OPENAL_SetVolume(channels[soundid], vol);
OPENAL_SetPaused(channels[soundid], false);
}
void emit_stream_np(int soundid, float vol)
{
PlayStreamEx(soundid, samp[soundid], NULL, true);
OPENAL_SetVolume(channels[soundid], vol);
OPENAL_SetPaused(channels[soundid], false);
}
void resume_stream(int soundid)
{
OPENAL_SetPaused(channels[soundid], false);
}
void pause_sound(int soundid)
{
OPENAL_SetPaused(channels[soundid], true);
}
|