1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back! *
3 *----------------------------------------------------------*
4 * (c) 1995-98 Artsoft Entertainment *
8 * phone: ++49 +521 290471 *
9 * email: aeglos@valinor.owl.de *
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 #if !defined(PLATFORM_MSDOS)
41 #define MAX_SOUNDS_PLAYING 16
43 #define MAX_SOUNDS_PLAYING 8
46 #if !defined(PLATFORM_HPUX)
47 #define SND_BLOCKSIZE 4096
49 #define SND_BLOCKSIZE 32768
52 /* some values for PlaySound(), StopSound() and friends */
53 #if !defined(PLATFORM_MSDOS)
54 #define PSND_SILENCE 0
55 #define PSND_MAX_VOLUME_BITS 7
56 #define PSND_MIN_VOLUME 0
57 #define PSND_MAX_VOLUME (1 << PSND_MAX_VOLUME_BITS)
58 #define PSND_NO_LOOP 0
61 #define PSND_MAX_STEREO_BITS 7
62 #define PSND_MAX_STEREO (1 << PSND_MAX_STEREO_BITS)
63 #define PSND_MAX_LEFT (-PSND_MAX_STEREO)
64 #define PSND_MAX_RIGHT (+PSND_MAX_STEREO)
65 #define PSND_MAX_LEFT2RIGHT_BITS (PSND_MAX_STEREO_BITS+1)
66 #define PSND_MAX_LEFT2RIGHT (1 << PSND_MAX_LEFT2RIGHT_BITS)
68 #define PSND_SILENCE 0
69 #define PSND_MIN_VOLUME 0
70 #define PSND_MAX_VOLUME 255
71 #define PSND_NO_LOOP 0
73 #define PSND_MAX_LEFT 0
74 #define PSND_MAX_RIGHT 255
75 #define PSND_MIDDLE 128
78 #define SSND_FADE_SOUND (1<<0)
79 #define SSND_FADE_ALL_SOUNDS (1<<1)
80 #define SSND_FADING(x) (x & (SSND_FADE_SOUND | SSND_FADE_ALL_SOUNDS))
81 #define SSND_STOP_SOUND (1<<2)
82 #define SSND_STOP_ALL_SOUNDS (1<<3)
83 #define SSND_STOPPING(x) (x & (SSND_STOP_SOUND | SSND_STOP_ALL_SOUNDS))
84 #define SSND_ALL(x) (x&(SSND_FADE_ALL_SOUNDS|SSND_STOP_ALL_SOUNDS))
86 /* settings for sound path, sound device, etc. */
88 #define SND_PATH "./sounds"
91 #define DEVICENAME_DSP "/dev/dsp"
92 #define DEVICENAME_AUDIO "/dev/audio"
93 #define DEVICENAME_AUDIOCTL "/dev/audioCtl"
96 #if defined(AUDIO_STREAMING_DSP)
97 #define AUDIO_DEVICE DEVICENAME_DSP
99 #define AUDIO_DEVICE DEVICENAME_AUDIO
103 struct SoundHeader_SUN
106 unsigned long hdr_size;
107 unsigned long data_size;
108 unsigned long encoding;
109 unsigned long sample_rate;
110 unsigned long channels;
113 struct SoundHeader_8SVX
116 unsigned long chunk_size;
126 #if defined(PLATFORM_MSDOS)
130 #if defined(TARGET_SDL)
131 Mix_Chunk *mix_chunk;
144 boolean stop_all_sounds;
150 #if defined(PLATFORM_MSDOS)
155 /* general sound functions */
156 void UnixOpenAudio(struct AudioSystemInfo *);
157 void UnixCloseAudio(struct AudioSystemInfo *);
159 /* sound server functions */
160 void SoundServer(void);
162 /* sound client functions */
163 void AllocSoundArray(int);
164 boolean LoadSound(int, char *);
166 void PlaySoundStereo(int, int);
167 void PlaySoundLoop(int);
168 void PlaySoundExt(int, int, int, boolean);
170 void FadeSounds(void);
172 void StopSounds(void);
173 void StopSoundExt(int, int);
174 void FreeSounds(int);