File: Sounds.cpp

package info (click to toggle)
lugaru 1.2-7.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 39,748 kB
  • sloc: cpp: 29,640; ansic: 537; sh: 34; xml: 28; makefile: 14
file content (124 lines) | stat: -rw-r--r-- 3,564 bytes parent folder | download | duplicates (5)
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);
}