1 /***********************************************************
2 * Artsoft Retro-Game Library *
3 *----------------------------------------------------------*
4 * (c) 1994-2001 Artsoft Entertainment *
6 * Detmolder Strasse 189 *
9 * e-mail: info@artsoft.org *
10 *----------------------------------------------------------*
12 ***********************************************************/
21 #if defined(PLATFORM_LINUX)
22 #include <sys/ioctl.h>
25 #if defined(PLATFORM_LINUX)
26 #include <linux/soundcard.h>
27 #elif defined(PLATFORM_FREEBSD)
28 #include <machine/soundcard.h>
29 #elif defined(PLATFORM_NETBSD)
30 #include <sys/ioctl.h>
31 #include <sys/audioio.h>
32 #elif defined(PLATFORM_HPUX)
33 #include <sys/audio.h>
39 #if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD) || defined(VOXWARE)
40 #define AUDIO_LINUX_IOCTL
43 #if defined(AUDIO_LINUX_IOCTL) || defined(PLATFORM_NETBSD)
44 #define AUDIO_STREAMING_DSP
47 #define AUDIO_SAMPLE_RATE_8000 8000
48 #define AUDIO_SAMPLE_RATE_22050 22050
50 #define AUDIO_FRAGMENT_SIZE_512 512
51 #define AUDIO_FRAGMENT_SIZE_1024 1024
52 #define AUDIO_FRAGMENT_SIZE_2048 2048
53 #define AUDIO_FRAGMENT_SIZE_4096 4096
55 #define AUDIO_MONO_CHANNEL 1
56 #define AUDIO_STEREO_CHANNELS 2
58 #if defined(TARGET_SDL)
59 /* one second fading interval == 1000 ticks (milliseconds) */
60 #define SOUND_FADING_INTERVAL 1000
61 #define SOUND_MAX_VOLUME SDL_MIX_MAXVOLUME
64 #if defined(AUDIO_STREAMING_DSP)
65 #define SOUND_FADING_VOLUME_STEP (PSND_MAX_VOLUME / 40)
66 #define SOUND_FADING_VOLUME_THRESHOLD (SOUND_FADING_VOLUME_STEP * 2)
69 #define DEFAULT_AUDIO_SAMPLE_RATE AUDIO_SAMPLE_RATE_22050
70 #define DEFAULT_AUDIO_FRAGMENT_SIZE_UNIX AUDIO_FRAGMENT_SIZE_512
71 #define DEFAULT_AUDIO_FRAGMENT_SIZE_WIN32 AUDIO_FRAGMENT_SIZE_2048
73 #if defined(PLATFORM_UNIX)
74 #define DEFAULT_AUDIO_FRAGMENT_SIZE DEFAULT_AUDIO_FRAGMENT_SIZE_UNIX
76 #define DEFAULT_AUDIO_FRAGMENT_SIZE DEFAULT_AUDIO_FRAGMENT_SIZE_WIN32
79 #if !defined(PLATFORM_MSDOS)
80 #define MAX_SOUNDS_PLAYING 16
82 #define MAX_SOUNDS_PLAYING 8
85 #if !defined(PLATFORM_HPUX)
86 #define SND_BLOCKSIZE 4096
88 #define SND_BLOCKSIZE 32768
91 /* some values for PlaySound(), StopSound() and friends */
92 #if !defined(PLATFORM_MSDOS)
94 #define PSND_SILENCE 0
95 #define PSND_MAX_VOLUME_BITS 7
96 #define PSND_MIN_VOLUME 0
97 #define PSND_MAX_VOLUME (1 << PSND_MAX_VOLUME_BITS)
99 #define PSND_MAX_STEREO_BITS 7
100 #define PSND_MAX_STEREO (1 << PSND_MAX_STEREO_BITS)
101 #define PSND_MAX_LEFT (-PSND_MAX_STEREO)
102 #define PSND_MAX_RIGHT (+PSND_MAX_STEREO)
103 #define PSND_MAX_LEFT2RIGHT_BITS (PSND_MAX_STEREO_BITS+1)
104 #define PSND_MAX_LEFT2RIGHT (1 << PSND_MAX_LEFT2RIGHT_BITS)
106 #else /* PLATFORM_MSDOS */
108 #define PSND_SILENCE 0
109 #define PSND_MIN_VOLUME 0
110 #define PSND_MAX_VOLUME 255
111 #define PSND_MAX_LEFT 0
112 #define PSND_MAX_RIGHT 255
113 #define PSND_MIDDLE 128
117 #define PSND_NO_LOOP 0
121 #define SSND_FADE_SOUND (1 << 0)
122 #define SSND_FADE_MUSIC (1 << 1)
123 #define SSND_FADE_ALL (1 << 2)
124 #define SSND_FADING (SSND_FADE_SOUND | \
127 #define SSND_STOP_SOUND (1 << 3)
128 #define SSND_STOP_MUSIC (1 << 4)
129 #define SSND_STOP_ALL (1 << 5)
130 #define SSND_STOPPING (SSND_STOP_SOUND | \
133 #define SSND_MUSIC (SSND_FADE_MUSIC | SSND_STOP_MUSIC)
134 #define SSND_ALL (SSND_FADE_ALL | SSND_STOP_ALL)
136 #define SND_RELOAD_SOUNDS 1
137 #define SND_RELOAD_MUSIC 2
139 #define SND_TYPE_NONE 0
140 #define SND_TYPE_WAV 1
142 #define MUS_TYPE_NONE 0
143 #define MUS_TYPE_WAV 1
144 #define MUS_TYPE_MOD 2
146 /* settings for sound path, sound device, etc. */
148 #define SND_PATH "./sounds"
151 #define DEVICENAME_DSP "/dev/dsp"
152 #define DEVICENAME_AUDIO "/dev/audio"
153 #define DEVICENAME_AUDIOCTL "/dev/audioCtl"
156 #if defined(AUDIO_STREAMING_DSP)
157 #define AUDIO_DEVICE DEVICENAME_DSP
159 #define AUDIO_DEVICE DEVICENAME_AUDIO
164 struct SoundHeader_SUN
167 unsigned long hdr_size;
168 unsigned long data_size;
169 unsigned long encoding;
170 unsigned long sample_rate;
171 unsigned long channels;
174 struct SoundHeader_8SVX
177 unsigned long chunk_size;
184 char *source_filename;
192 typedef struct SampleInfo SoundInfo;
193 typedef struct SampleInfo MusicInfo;
206 boolean stop_all_sounds;
207 boolean reload_sounds;
208 boolean reload_music;
213 unsigned long data_len;
216 #if defined(PLATFORM_MSDOS)
221 /* general sound functions */
222 void UnixOpenAudio(void);
223 void UnixCloseAudio(void);
225 /* sound server functions */
226 void InitPlaylist(void);
227 void StartSoundserver(void);
228 void SoundServer(void);
230 /* sound client functions */
231 void ReloadSounds(char *);
232 void ReloadMusic(char *);
233 SoundInfo *LoadCustomSound(char *);
234 void InitSoundList(int);
235 void LoadSoundToList(char *, int);
236 void LoadCustomMusic(void);
239 void PlaySoundStereo(int, int);
240 void PlaySoundLoop(int);
241 void PlaySoundMusic(int);
242 void PlaySoundExt(int, int, int, boolean);
243 void FadeMusic(void);
245 void FadeSounds(void);
246 void StopMusic(void);
248 void StopSounds(void);
249 void StopSoundExt(int, int);
250 void InitReloadSounds(char *);
251 void InitReloadMusic(char *);
252 void FreeSound(SoundInfo *);
253 void FreeMusic(MusicInfo *);
254 void FreeAllSounds(void);
255 void FreeAllMusic(void);