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_HPUX)
30 #include <sys/audio.h>
36 #if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD) || defined(VOXWARE)
37 #define AUDIO_STREAMING_DSP
40 #define AUDIO_SAMPLE_RATE_8000 8000
41 #define AUDIO_SAMPLE_RATE_22050 22050
43 #define AUDIO_FRAGMENT_SIZE_512 512
44 #define AUDIO_FRAGMENT_SIZE_1024 1024
45 #define AUDIO_FRAGMENT_SIZE_2048 2048
46 #define AUDIO_FRAGMENT_SIZE_4096 4096
48 #define AUDIO_MONO_CHANNEL 1
49 #define AUDIO_STEREO_CHANNELS 2
51 #if defined(TARGET_SDL)
52 /* one second fading interval == 1000 ticks (milliseconds) */
53 #define SOUND_FADING_INTERVAL 1000
54 #define SOUND_MAX_VOLUME (SDL_MIX_MAXVOLUME / 4)
57 #if defined(AUDIO_STREAMING_DSP)
58 #define SOUND_FADING_VOLUME_STEP (PSND_MAX_VOLUME / 40)
59 #define SOUND_FADING_VOLUME_THRESHOLD (SOUND_FADING_VOLUME_STEP * 2)
62 #define DEFAULT_AUDIO_SAMPLE_RATE AUDIO_SAMPLE_RATE_22050
63 #define DEFAULT_AUDIO_FRAGMENT_SIZE_UNIX AUDIO_FRAGMENT_SIZE_512
64 #define DEFAULT_AUDIO_FRAGMENT_SIZE_WIN32 AUDIO_FRAGMENT_SIZE_2048
66 #if defined(PLATFORM_UNIX)
67 #define DEFAULT_AUDIO_FRAGMENT_SIZE DEFAULT_AUDIO_FRAGMENT_SIZE_UNIX
69 #define DEFAULT_AUDIO_FRAGMENT_SIZE DEFAULT_AUDIO_FRAGMENT_SIZE_WIN32
72 #if !defined(PLATFORM_MSDOS)
73 #define MAX_SOUNDS_PLAYING 16
75 #define MAX_SOUNDS_PLAYING 8
78 #if !defined(PLATFORM_HPUX)
79 #define SND_BLOCKSIZE 4096
81 #define SND_BLOCKSIZE 32768
84 /* some values for PlaySound(), StopSound() and friends */
85 #if !defined(PLATFORM_MSDOS)
86 #define PSND_SILENCE 0
87 #define PSND_MAX_VOLUME_BITS 7
88 #define PSND_MIN_VOLUME 0
89 #define PSND_MAX_VOLUME (1 << PSND_MAX_VOLUME_BITS)
90 #define PSND_NO_LOOP 0
93 #define PSND_MAX_STEREO_BITS 7
94 #define PSND_MAX_STEREO (1 << PSND_MAX_STEREO_BITS)
95 #define PSND_MAX_LEFT (-PSND_MAX_STEREO)
96 #define PSND_MAX_RIGHT (+PSND_MAX_STEREO)
97 #define PSND_MAX_LEFT2RIGHT_BITS (PSND_MAX_STEREO_BITS+1)
98 #define PSND_MAX_LEFT2RIGHT (1 << PSND_MAX_LEFT2RIGHT_BITS)
100 #define PSND_SILENCE 0
101 #define PSND_MIN_VOLUME 0
102 #define PSND_MAX_VOLUME 255
103 #define PSND_NO_LOOP 0
105 #define PSND_MAX_LEFT 0
106 #define PSND_MAX_RIGHT 255
107 #define PSND_MIDDLE 128
110 #define SSND_FADE_SOUND (1<<0)
111 #define SSND_FADE_ALL_SOUNDS (1<<1)
112 #define SSND_FADING(x) (x & (SSND_FADE_SOUND | SSND_FADE_ALL_SOUNDS))
113 #define SSND_STOP_SOUND (1<<2)
114 #define SSND_STOP_ALL_SOUNDS (1<<3)
115 #define SSND_STOPPING(x) (x & (SSND_STOP_SOUND | SSND_STOP_ALL_SOUNDS))
116 #define SSND_ALL(x) (x&(SSND_FADE_ALL_SOUNDS|SSND_STOP_ALL_SOUNDS))
118 /* settings for sound path, sound device, etc. */
120 #define SND_PATH "./sounds"
123 #define DEVICENAME_DSP "/dev/dsp"
124 #define DEVICENAME_AUDIO "/dev/audio"
125 #define DEVICENAME_AUDIOCTL "/dev/audioCtl"
128 #if defined(AUDIO_STREAMING_DSP)
129 #define AUDIO_DEVICE DEVICENAME_DSP
131 #define AUDIO_DEVICE DEVICENAME_AUDIO
135 struct SoundHeader_SUN
138 unsigned long hdr_size;
139 unsigned long data_size;
140 unsigned long encoding;
141 unsigned long sample_rate;
142 unsigned long channels;
145 struct SoundHeader_8SVX
148 unsigned long chunk_size;
158 #if defined(PLATFORM_MSDOS)
162 #if defined(TARGET_SDL)
163 Mix_Chunk *mix_chunk;
164 Mix_Music *mix_music;
177 boolean stop_all_sounds;
183 #if defined(PLATFORM_MSDOS)
188 /* general sound functions */
189 void UnixOpenAudio(void);
190 void UnixCloseAudio(void);
192 /* sound server functions */
193 void InitPlaylist(void);
194 void StartSoundserver(void);
195 void SoundServer(void);
197 /* sound client functions */
198 boolean LoadSound(char *);
199 boolean LoadMod(char *);
203 void PlaySoundStereo(int, int);
204 void PlaySoundLoop(int);
205 void PlaySoundExt(int, int, int, boolean);
206 void FadeMusic(void);
208 void FadeSounds(void);
209 void StopMusic(void);
211 void StopSounds(void);
212 void StopSoundExt(int, int);
213 void FreeSounds(int);