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
|
//copyright (c) 2006 by tarn adams
#define SOUND_CHANNELNUM 16
#include <string>
#include <map>
#ifndef NO_FMOD
#include <fmod.hpp>
#include <fmod_errors.h>
/* The maximums can be no larger than the largest value
* of a signed integer.
*/
#define MAXSONGNUM 1000
#define MAXSOUNDNUM 1000
#define FSOUND_STEREOPAN 0
struct fmodSound {
FMOD::Sound *sound;
FMOD::Channel *channel;
};
class musicsoundst
{
public:
enum linux_sound_system {
ALSA,
OSS,
ESD,
};
int SoftChannelNumber;
musicsoundst() : song(-1), system(NULL), masterchannelgroup(NULL), sound_system(ALSA)
{
int s;
for (s = 0; s < MAXSONGNUM; s++) {
mod[s].sound = NULL;
mod[s].channel = NULL;
}
for (s = 0; s < MAXSOUNDNUM; s++) {
samp[s].sound = NULL;
samp[s].channel = NULL;
}
}
~musicsoundst()
{
deinitsound();
}
void startbackgroundmusic(int new_song);
void stopbackgroundmusic();
void playsound(int s,int channel=-1);
void playsound(int s,int min_channel,int max_channel,int force_channel);
void initsound();
void deinitsound();
void set_song(string &filename,int slot);
void set_sound(string &filename,int slot,int pan=-1,int priority=0);
void set_sound_params(int slot,int p1,int vol,int pan,int priority);
void stop_sound(int channel);
void stop_sound() {
masterchannelgroup->stop();
}
void set_master_volume(long newvol);
void update() {
if (!on) {
return;
}
system->update();
}
void set_sound_system(musicsoundst::linux_sound_system system) {
sound_system = system;
}
private:
float oldval_to_volumefloat(int val);
float oldval_to_panfloat(int val);
int oldval_to_priority(int val);
int song;
char musicactive;
char soundpriority;
int soundplaying;
char on;
FMOD::System *system;
FMOD::ChannelGroup *masterchannelgroup;
fmodSound mod[MAXSONGNUM];
fmodSound samp[MAXSOUNDNUM];
musicsoundst::linux_sound_system sound_system;
};
#endif
|