summaryrefslogtreecommitdiffstats
path: root/src/sound/sound.h
blob: be6355856671b76442432ef9773fc0e211d15a7c (plain)
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
// *
// * This program 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 3 of the License, or
// * (at your option) any later version.
// *
// * This program 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 this program. If not, see  http://www.gnu.org/licenses/.

// sound.h

#pragma once


#include "math/vector.h"


class CInstanceManager;

namespace Snd {

const int MAXFILES	= 200;
const int MAXSOUND	= 32;
const int MAXVOLUME	= 20;
const int MAXOPER	= 4;


enum Sound
{
	SOUND_CLICK		= 0,
	SOUND_BOUM		= 1,
	SOUND_EXPLO		= 2,
	SOUND_FLYh		= 3,	// human
	SOUND_FLY		= 4,
	SOUND_STEPs		= 5,	// smooth
	SOUND_MOTORw		= 6,	// wheel
	SOUND_MOTORt		= 7,	// tank
	SOUND_MOTORr		= 8,	// roller
	SOUND_ERROR		= 9,
	SOUND_CONVERT		= 10,
	SOUND_ENERGY		= 11,
	SOUND_PLOUF		= 12,
	SOUND_BLUP		= 13,
	SOUND_WARNING		= 14,
	SOUND_DERRICK		= 15,
	SOUND_LABO		= 16,
	SOUND_STATION		= 17,
	SOUND_REPAIR		= 18,
	SOUND_RESEARCH		= 19,
	SOUND_INSECTs		= 20,	// spider
	SOUND_BURN		= 21,
	SOUND_TZOING		= 22,
	SOUND_GGG		= 23,
	SOUND_MANIP		= 24,
	SOUND_FIRE		= 25,	// shooting with fireball
	SOUND_HUMAN1		= 26,	// breathing
	SOUND_STEPw		= 27,	// water
	SOUND_SWIM		= 28,
	SOUND_RADAR		= 29,
	SOUND_BUILD		= 30,
	SOUND_ALARM		= 31,	// energy alarm
	SOUND_SLIDE		= 32,
	SOUND_EXPLOi		= 33,	// insect
	SOUND_INSECTa		= 34,	// ant
	SOUND_INSECTb		= 35,	// bee
	SOUND_INSECTw		= 36,	// worm
	SOUND_INSECTm		= 37,	// mother
	SOUND_TREMBLE		= 38,
	SOUND_PSHHH		= 39,
	SOUND_NUCLEAR		= 40,
	SOUND_INFO		= 41,
	SOUND_OPEN		= 42,
	SOUND_CLOSE		= 43,
	SOUND_FACTORY		= 44,
	SOUND_EGG		= 45,
	SOUND_MOTORs		= 46,	// submarine
	SOUND_MOTORi		= 47,	// insect (legs)
	SOUND_SHIELD		= 48,
	SOUND_FIREi		= 49,	// shooting with orgaball (insect)
	SOUND_GUNDEL		= 50,
	SOUND_PSHHH2		= 51,	// shield
	SOUND_MESSAGE		= 52,
	SOUND_BOUMm		= 53,	// metal
	SOUND_BOUMv		= 54,	// plant
	SOUND_BOUMs		= 55,	// smooth
	SOUND_EXPLOl		= 56,	// little
	SOUND_EXPLOlp		= 57,	// little power
	SOUND_EXPLOp		= 58,	// power
	SOUND_STEPh		= 59,	// hard
	SOUND_STEPm		= 60,	// metal
	SOUND_POWERON		= 61,
	SOUND_POWEROFF		= 62,
	SOUND_AIE		= 63,
	SOUND_WAYPOINT		= 64,
	SOUND_RECOVER		= 65,
	SOUND_DEADi		= 66,
	SOUND_JOSTLE		= 67,
	SOUND_GFLAT		= 68,
	SOUND_DEADg		= 69,	// shooting death
	SOUND_DEADw		= 70,	// drowning
	SOUND_FLYf		= 71,	// reactor fail
	SOUND_ALARMt		= 72,	// temperature alarm
	SOUND_FINDING		= 73,	// finds a cache object
	SOUND_THUMP		= 74,
	SOUND_TOUCH		= 75,
	SOUND_BLITZ		= 76,
	SOUND_MUSHROOM		= 77,
	SOUND_FIREp		= 78,	// shooting with phazer
	SOUND_EXPLOg1		= 79,	// impact gun 1
	SOUND_EXPLOg2		= 80,	// impact gun 2
	SOUND_MOTORd		= 81,	// engine friction
};

enum SoundNext
{
	SOPER_CONTINUE	= 1,
	SOPER_STOP		= 2,
	SOPER_LOOP		= 3,
};

struct SoundOper
{
	char		bUsed;
	float		finalAmplitude;
	float		finalFrequency;
	float		totalTime;
	float		currentTime;
	Snd::SoundNext	nextOper;
};

struct SoundChannel
{
	char					bUsed;			// buffer used?
	char					bMute;			// silence?
	Snd::Sound					type;			// SOUND_*
	int					priority;		// so great -> important
	Math::Vector				pos;			// position in space
	unsigned short				uniqueStamp;		// unique marker
//	LPDIRECTSOUNDBUFFER			soundBuffer;
//	LPDIRECTSOUND3DBUFFER			soundBuffer3D;
	float					startAmplitude;
	float					startFrequency;
	float					changeFrequency;
	int					initFrequency;
	float					volume;			// 2D: volume 1..0 depending on position
	float					pan;			// 2D: pan -1..+1 depending on position
	Snd::SoundOper				oper[MAXOPER];
};



class CSound
{
	// TODO
};

}; // namespace Sound