rnd-20020513-1-src
[rocksndiamonds.git] / src / libgame / sound.h
index 5350c14338022cfceeeacc46b4df8924b0b62afb..5d27f20a9f6f6547cedf369903cb8b921941689c 100644 (file)
 #ifndef SOUND_H
 #define SOUND_H
 
-#include <math.h>
-
 #include "platform.h"
 
-#if defined(PLATFORM_LINUX)
-#include <sys/ioctl.h>
-#endif
-
-#if defined(PLATFORM_LINUX)
-#include <linux/soundcard.h>
-#elif defined(PLATFORM_FREEBSD)
-#include <machine/soundcard.h>
-#elif defined(PLATFORM_NETBSD)
-#include <sys/ioctl.h>
-#include <sys/audioio.h>
-#elif defined(PLATFORM_HPUX)
-#include <sys/audio.h>
-#endif
-
-#include "system.h"
-
 
 #if defined(PLATFORM_UNIX) && !defined(TARGET_SDL)
 #define AUDIO_UNIX_NATIVE
 #define AUDIO_STREAMING_DSP
 #endif
 
-#define AUDIO_SAMPLE_RATE_8000                 8000
-#define AUDIO_SAMPLE_RATE_22050                        22050
-
-#define AUDIO_FRAGMENT_SIZE_512                        512
-#define AUDIO_FRAGMENT_SIZE_1024               1024
-#define AUDIO_FRAGMENT_SIZE_2048               2048
-#define AUDIO_FRAGMENT_SIZE_4096               4096
+/* values for platform specific sound initialization */
+#define AUDIO_SAMPLE_RATE_8000         8000
+#define AUDIO_SAMPLE_RATE_22050                22050
 
-#define AUDIO_NUM_CHANNELS_MONO                        1
-#define AUDIO_NUM_CHANNELS_STEREO              2
+#define AUDIO_FRAGMENT_SIZE_512                512
+#define AUDIO_FRAGMENT_SIZE_1024       1024
+#define AUDIO_FRAGMENT_SIZE_2048       2048
+#define AUDIO_FRAGMENT_SIZE_4096       4096
 
-#define AUDIO_FORMAT_UNKNOWN                   (0)
-#define AUDIO_FORMAT_U8                                (1 << 0)
-#define AUDIO_FORMAT_S16                       (1 << 1)
-#define AUDIO_FORMAT_LE                                (1 << 2)
-#define AUDIO_FORMAT_BE                                (1 << 3)
+#define AUDIO_NUM_CHANNELS_MONO                1
+#define AUDIO_NUM_CHANNELS_STEREO      2
 
-/* expiration time (in milliseconds) for sound loops */
-#define SOUND_LOOP_EXPIRATION_TIME             200
+#define AUDIO_FORMAT_UNKNOWN           (0)
+#define AUDIO_FORMAT_U8                        (1 << 0)
+#define AUDIO_FORMAT_S16               (1 << 1)
+#define AUDIO_FORMAT_LE                        (1 << 2)
+#define AUDIO_FORMAT_BE                        (1 << 3)
 
-#if defined(TARGET_SDL)
-/* one second fading interval == 1000 ticks (milliseconds) */
-#define SOUND_FADING_INTERVAL                  1000
-#define SOUND_MAX_VOLUME                       SDL_MIX_MAXVOLUME
-#endif
-
-#if defined(AUDIO_STREAMING_DSP)
-#define SOUND_FADING_VOLUME_STEP               (PSND_MAX_VOLUME / 40)
-#define SOUND_FADING_VOLUME_THRESHOLD          (SOUND_FADING_VOLUME_STEP * 2)
-#endif
-
-#if defined(AUDIO_STREAMING_DSP)
-#define DEFAULT_AUDIO_SAMPLE_RATE              AUDIO_SAMPLE_RATE_22050
+#if defined(AUDIO_UNIX_NATIVE) && !defined(AUDIO_STREAMING_DSP)
+#define DEFAULT_AUDIO_SAMPLE_RATE      AUDIO_SAMPLE_RATE_8000
 #else
-#define DEFAULT_AUDIO_SAMPLE_RATE              AUDIO_SAMPLE_RATE_8000
+#define DEFAULT_AUDIO_SAMPLE_RATE      AUDIO_SAMPLE_RATE_22050
 #endif
 
-#define DEFAULT_AUDIO_FRAGMENT_SIZE_UNIX       AUDIO_FRAGMENT_SIZE_512
-#define DEFAULT_AUDIO_FRAGMENT_SIZE_WIN32      AUDIO_FRAGMENT_SIZE_2048
-
-#if defined(PLATFORM_UNIX)
-#define DEFAULT_AUDIO_FRAGMENT_SIZE    DEFAULT_AUDIO_FRAGMENT_SIZE_UNIX
+#if defined(PLATFORM_WIN32)
+#define DEFAULT_AUDIO_FRAGMENT_SIZE    AUDIO_FRAGMENT_SIZE_2048
 #else
-#define DEFAULT_AUDIO_FRAGMENT_SIZE    DEFAULT_AUDIO_FRAGMENT_SIZE_WIN32
+#define DEFAULT_AUDIO_FRAGMENT_SIZE    AUDIO_FRAGMENT_SIZE_512
 #endif
 
 #if defined(TARGET_SDL)
 #define MUSIC_CHANNEL                  0
 #define FIRST_SOUND_CHANNEL            1
 
-#if !defined(PLATFORM_HPUX)
-#define SND_BLOCKSIZE                  4096
-#else
-#define SND_BLOCKSIZE                  32768
-#endif
-
-/* some values for PlaySound(), StopSound() and friends */
-#if !defined(PLATFORM_MSDOS)
-
-#define PSND_SILENCE           0
-#define PSND_MAX_VOLUME_BITS   15
-#define PSND_MIN_VOLUME                0
-#define PSND_MAX_VOLUME                (1 << PSND_MAX_VOLUME_BITS)
-#define PSND_MIDDLE            0
-#define PSND_MAX_STEREO_BITS   7
-#define PSND_MAX_STEREO                (1 << PSND_MAX_STEREO_BITS)
-#define PSND_MAX_LEFT          (-PSND_MAX_STEREO)
-#define PSND_MAX_RIGHT         (+PSND_MAX_STEREO)
-#define PSND_MAX_LEFT2RIGHT_BITS (PSND_MAX_STEREO_BITS+1)
-#define PSND_MAX_LEFT2RIGHT    (1 << PSND_MAX_LEFT2RIGHT_BITS)
-
-#else  /* PLATFORM_MSDOS */
-
-#define PSND_SILENCE           0
-#define PSND_MIN_VOLUME                0
-#define PSND_MAX_VOLUME                255
-#define PSND_MAX_LEFT          0
-#define PSND_MAX_RIGHT         255
-#define PSND_MIDDLE            128
-
-#endif
-
-#if 0
-#define PSND_NO_LOOP           0
-#define PSND_LOOP              1
-#define PSND_MUSIC             2
-
-#define SSND_FADE_SOUND                (1 << 0)
-#define SSND_FADE_MUSIC                (1 << 1)
-#define SSND_FADE_ALL          (1 << 2)
-#define SSND_FADING            (SSND_FADE_SOUND | \
-                                SSND_FADE_MUSIC | \
-                                SSND_FADE_ALL)
-#define SSND_STOP_SOUND                (1 << 3)
-#define SSND_STOP_MUSIC                (1 << 4)
-#define SSND_STOP_ALL          (1 << 5)
-#define SSND_STOPPING          (SSND_STOP_SOUND | \
-                                SSND_STOP_MUSIC | \
-                                SSND_STOP_ALL)
-#define SSND_MUSIC             (SSND_FADE_MUSIC | SSND_STOP_MUSIC)
-#define SSND_ALL               (SSND_FADE_ALL | SSND_STOP_ALL)
-
-#define SND_RELOAD_SOUNDS      1
-#define SND_RELOAD_MUSIC       2
-#endif
-
-#define SND_TYPE_NONE          0
-#define SND_TYPE_WAV           1
-
-#define MUS_TYPE_NONE          0
-#define MUS_TYPE_WAV           1
-#define MUS_TYPE_MOD           2
-
-/* settings for sound path, sound device, etc. */
-#ifndef SND_PATH
-#define SND_PATH       "./sounds"
-#endif
-
-#define DEVICENAME_DSP         "/dev/dsp"
-#define DEVICENAME_AUDIO       "/dev/audio"
-#define DEVICENAME_AUDIOCTL    "/dev/audioCtl"
-
-#if 0
-#if defined(AUDIO_STREAMING_DSP)
-#define AUDIO_DEVICE           DEVICENAME_DSP
-#else
-#define AUDIO_DEVICE   DEVICENAME_AUDIO
-#endif
-#endif
-
-/* value for undefined sound effect filename */
-#define SND_FILE_UNDEFINED     "NONE"
-
-
-#if 0
-struct SoundHeader_SUN
-{
-  unsigned long magic;
-  unsigned long hdr_size;
-  unsigned long data_size;
-  unsigned long encoding;
-  unsigned long sample_rate;
-  unsigned long channels;
-};
-
-struct SoundHeader_8SVX
-{
-  char magic_FORM[4];
-  unsigned long chunk_size;
-  char magic_8SVX[4];
-};
-#endif
-
-struct AudioFormatInfo
-{
-  boolean stereo;              /* availability of stereo sound */
-  int format;                  /* size and endianess of sample data */
-  int sample_rate;             /* sample frequency */
-  int fragment_size;           /* audio device fragment size in bytes */
-};
-
-struct SoundEffectInfo
-{
-  char *text;
-  char *default_filename;
-  char *filename;
-};
-
-struct SampleInfo
-{
-  char *source_filename;
-  int num_references;
-
-  int type;
-  int format;
-  long data_len;
-  void *data_ptr;
-};
-
-typedef struct SampleInfo      SoundInfo;
-typedef struct SampleInfo      MusicInfo;
 
+/* values for PlaySound(), StopSound() and friends */
 #define SND_CTRL_NONE          (0)
 #define SND_CTRL_MUSIC         (1 << 0)
 #define SND_CTRL_LOOP          (1 << 1)
@@ -264,30 +99,43 @@ typedef struct SampleInfo  MusicInfo;
                                              SND_CTRL_RELOAD_MUSIC))
 #define ALL_SOUNDS(x)          ((x).state & SND_CTRL_ALL_SOUNDS)
 
-struct SoundControl
-{
-  boolean active;
 
-  int nr;
-  int volume;
-  int stereo_position;
+#if !defined(TARGET_ALLEGRO)
 
-  int state;
+#define PSND_SILENCE           0
+#define PSND_MAX_VOLUME_BITS   15
+#define PSND_MIN_VOLUME                0
+#define PSND_MAX_VOLUME                (1 << PSND_MAX_VOLUME_BITS)
+#define PSND_MIDDLE            0
+#define PSND_MAX_STEREO_BITS   7
+#define PSND_MAX_STEREO                (1 << PSND_MAX_STEREO_BITS)
+#define PSND_MAX_LEFT          (-PSND_MAX_STEREO)
+#define PSND_MAX_RIGHT         (+PSND_MAX_STEREO)
+#define PSND_MAX_LEFT2RIGHT_BITS (PSND_MAX_STEREO_BITS+1)
+#define PSND_MAX_LEFT2RIGHT    (1 << PSND_MAX_LEFT2RIGHT_BITS)
 
-  unsigned long playing_starttime;
-  unsigned long playing_pos;
+#else  /* TARGET_ALLEGRO */
 
-  int type;
-  int format;
-  long data_len;
-  void *data_ptr;
+#define PSND_SILENCE           0
+#define PSND_MIN_VOLUME                0
+#define PSND_MAX_VOLUME                255
+#define PSND_MAX_LEFT          0
+#define PSND_MAX_RIGHT         255
+#define PSND_MIDDLE            128
 
-#if defined(PLATFORM_MSDOS)
-  int voice;
 #endif
+
+/* value for undefined sound effect filename */
+#define SND_FILE_UNDEFINED     "NONE"
+
+
+struct SoundEffectInfo
+{
+  char *text;
+  char *default_filename;
+  char *filename;
 };
 
-typedef struct SoundControl    SoundControl;
 
 /* general sound functions */
 void UnixOpenAudio(void);