e6a8a20a352b3ca7f8480f4370451b2e17f011c4
[rocksndiamonds.git] / src / libgame / sound.h
1 /***********************************************************
2 * Artsoft Retro-Game Library                               *
3 *----------------------------------------------------------*
4 * (c) 1994-2006 Artsoft Entertainment                      *
5 *               Holger Schemel                             *
6 *               Detmolder Strasse 189                      *
7 *               33604 Bielefeld                            *
8 *               Germany                                    *
9 *               e-mail: info@artsoft.org                   *
10 *----------------------------------------------------------*
11 * sound.h                                                  *
12 ***********************************************************/
13
14 #ifndef SOUND_H
15 #define SOUND_H
16
17 #include "system.h"
18
19
20 #if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD) || defined(VOXWARE)
21 #define AUDIO_LINUX_IOCTL
22 #endif
23
24 #if defined(AUDIO_LINUX_IOCTL) || defined(PLATFORM_NETBSD)
25 #define AUDIO_STREAMING_DSP
26 #endif
27
28 /* values for platform specific sound initialization */
29 #define AUDIO_SAMPLE_RATE_8000          8000
30 #define AUDIO_SAMPLE_RATE_22050         22050
31
32 #define AUDIO_FRAGMENT_SIZE_512         512
33 #define AUDIO_FRAGMENT_SIZE_1024        1024
34 #define AUDIO_FRAGMENT_SIZE_2048        2048
35 #define AUDIO_FRAGMENT_SIZE_4096        4096
36 #define AUDIO_FRAGMENT_SIZE_32768       32768
37
38 #define AUDIO_NUM_CHANNELS_MONO         1
39 #define AUDIO_NUM_CHANNELS_STEREO       2
40
41 #define AUDIO_FORMAT_UNKNOWN            (0)
42 #define AUDIO_FORMAT_U8                 (1 << 0)
43 #define AUDIO_FORMAT_S16                (1 << 1)
44 #define AUDIO_FORMAT_LE                 (1 << 2)
45 #define AUDIO_FORMAT_BE                 (1 << 3)
46
47 #if defined(AUDIO_UNIX_NATIVE) && !defined(AUDIO_STREAMING_DSP)
48 #define DEFAULT_AUDIO_SAMPLE_RATE       AUDIO_SAMPLE_RATE_8000
49 #else
50 #define DEFAULT_AUDIO_SAMPLE_RATE       AUDIO_SAMPLE_RATE_22050
51 #endif
52
53 #if defined(PLATFORM_HPUX)
54 #define DEFAULT_AUDIO_FRAGMENT_SIZE     AUDIO_FRAGMENT_SIZE_32768
55 #elif defined(PLATFORM_WIN32)
56 #define DEFAULT_AUDIO_FRAGMENT_SIZE     AUDIO_FRAGMENT_SIZE_1024
57 #else
58 #define DEFAULT_AUDIO_FRAGMENT_SIZE     AUDIO_FRAGMENT_SIZE_512
59 #endif
60
61 #if defined(TARGET_SDL)
62 #define NUM_MIXER_CHANNELS              MIX_CHANNELS
63 #else
64 #define NUM_MIXER_CHANNELS              8
65 #endif
66
67 #define MUSIC_CHANNEL                   0
68 #define FIRST_SOUND_CHANNEL             1
69
70
71 /* values for PlaySound(), StopSound() and friends */
72 #define SND_CTRL_NONE                   (0)
73 #define SND_CTRL_MUSIC                  (1 << 0)
74 #define SND_CTRL_LOOP                   (1 << 1)
75 #define SND_CTRL_FADE                   (1 << 2)
76 #define SND_CTRL_STOP                   (1 << 3)
77 #define SND_CTRL_ALL_SOUNDS             (1 << 4)
78 #define SND_CTRL_RELOAD_SOUNDS          (1 << 5)
79 #define SND_CTRL_RELOAD_MUSIC           (1 << 6)
80
81 #define SND_CTRL_PLAY_SOUND             (SND_CTRL_NONE)
82 #define SND_CTRL_PLAY_LOOP              (SND_CTRL_LOOP)
83 #define SND_CTRL_PLAY_MUSIC             (SND_CTRL_LOOP | SND_CTRL_MUSIC)
84
85 #define SND_CTRL_FADE_SOUND             (SND_CTRL_FADE)
86 #define SND_CTRL_FADE_MUSIC             (SND_CTRL_FADE | SND_CTRL_MUSIC)
87 #define SND_CTRL_FADE_ALL               (SND_CTRL_FADE | SND_CTRL_ALL_SOUNDS)
88
89 #define SND_CTRL_STOP_SOUND             (SND_CTRL_STOP)
90 #define SND_CTRL_STOP_MUSIC             (SND_CTRL_STOP | SND_CTRL_MUSIC)
91 #define SND_CTRL_STOP_ALL               (SND_CTRL_STOP | SND_CTRL_ALL_SOUNDS)
92
93 #define IS_MUSIC(x)                     ((x).state & SND_CTRL_MUSIC)
94 #define IS_LOOP(x)                      ((x).state & SND_CTRL_LOOP)
95 #define IS_FADING(x)                    ((x).state & SND_CTRL_FADE)
96 #define IS_STOPPING(x)                  ((x).state & SND_CTRL_STOP)
97 #define IS_RELOADING(x)                 ((x).state & (SND_CTRL_RELOAD_SOUNDS |\
98                                                       SND_CTRL_RELOAD_MUSIC))
99 #define ALL_SOUNDS(x)                   ((x).state & SND_CTRL_ALL_SOUNDS)
100
101 #define MAP_NOCONF_MUSIC(x)             (-((x) + 1))
102 #define UNMAP_NOCONF_MUSIC(x)           MAP_NOCONF_MUSIC(x)
103
104
105 #define SOUND_MIN_VOLUME                0
106 #if defined(TARGET_SDL)
107 #define SOUND_MAX_VOLUME                SDL_MIX_MAXVOLUME
108 #else
109 #define SOUND_MAX_VOLUME                128
110 #endif
111
112 #define SOUND_MAX_LEFT                  0
113 #define SOUND_MAX_RIGHT                 255
114 #define SOUND_MAX_LEFT2RIGHT            255
115 #define SOUND_MIDDLE                    (SOUND_MAX_LEFT2RIGHT / 2)
116
117
118 /* general sound functions */
119 void UnixOpenAudio(void);
120 void UnixCloseAudio(void);
121
122 /* mixer functions */ 
123 void Mixer_InitChannels(void);
124 void StartMixer(void);
125
126 /* sound client functions */
127 void PlayMusic(int);
128 void PlaySound(int);
129 void PlaySoundStereo(int, int);
130 void PlaySoundLoop(int);
131 void PlaySoundMusic(int);
132 void PlaySoundExt(int, int, int, int);
133 void FadeMusic(void);
134 void FadeSound(int);
135 void FadeSounds(void);
136 void FadeSoundsAndMusic(void);
137 void StopMusic(void);
138 void StopSound(int);
139 void StopSounds(void);
140 void StopSoundExt(int, int);
141
142 int getSoundListSize();
143 int getMusicListSize();
144 struct FileInfo *getSoundListEntry(int);
145 struct FileInfo *getMusicListEntry(int);
146 int getSoundListPropertyMappingSize();
147 int getMusicListPropertyMappingSize();
148 struct PropertyMapping *getSoundListPropertyMapping();
149 struct PropertyMapping *getMusicListPropertyMapping();
150 void InitSoundList(struct ConfigInfo *, int, struct ConfigTypeInfo *,
151                    char **, char **, char **, char **, char **);
152 void InitMusicList(struct ConfigInfo *, int, struct ConfigTypeInfo *,
153                    char **, char **, char **, char **, char **);
154 void InitReloadCustomSounds(char *);
155 void InitReloadCustomMusic(char *);
156 void FreeAllSounds(void);
157 void FreeAllMusic(void);
158
159 #endif