home *** CD-ROM | disk | FTP | other *** search
/ 100 af Verdens Bedste Spil / 100Spil.iso / dos / wolf3d / source / wolfsrc.1 / ID_SD.H < prev    next >
C/C++ Source or Header  |  1993-02-04  |  5KB  |  238 lines

  1. //
  2. //    ID Engine
  3. //    ID_SD.h - Sound Manager Header
  4. //    Version for Wolfenstein
  5. //    By Jason Blochowiak
  6. //
  7.  
  8. #ifndef    __ID_SD__
  9. #define    __ID_SD__
  10.  
  11. void    alOut(byte n,byte b);
  12.  
  13. #ifdef    __DEBUG__
  14. #define    __DEBUG_SoundMgr__
  15. #endif
  16.  
  17. #define    TickBase    70        // 70Hz per tick - used as a base for timer 0
  18.  
  19. typedef    enum    {
  20.                     sdm_Off,
  21.                     sdm_PC,sdm_AdLib,
  22.                 }    SDMode;
  23. typedef    enum    {
  24.                     smm_Off,smm_AdLib
  25.                 }    SMMode;
  26. typedef    enum    {
  27.                     sds_Off,sds_PC,sds_SoundSource,sds_SoundBlaster
  28.                 }    SDSMode;
  29. typedef    struct
  30.         {
  31.             longword    length;
  32.             word        priority;
  33.         } SoundCommon;
  34.  
  35. //    PC Sound stuff
  36. #define    pcTimer        0x42
  37. #define    pcTAccess    0x43
  38. #define    pcSpeaker    0x61
  39.  
  40. #define    pcSpkBits    3
  41.  
  42. typedef    struct
  43.         {
  44.             SoundCommon    common;
  45.             byte        data[1];
  46.         } PCSound;
  47.  
  48. //     Registers for the Sound Blaster card - needs to be offset by n0 (0x10,0x20,0x30,0x40,0x50,0x60)
  49. #define    sbReset        0x206    // W
  50. #define    sbFMStatus    0x208    // R
  51. #define    sbFMAddr    0x208    // W
  52. #define    sbFMData    0x209    // W
  53. #define    sbReadData    0x20a    // R
  54. #define    sbWriteCmd    0x20c    // W
  55. #define    sbWriteData    0x20c    // W
  56. #define    sbWriteStat    0x20c    // R
  57. #define    sbDataAvail    0x20e    // R
  58.  
  59. //    Registers for the Sound Blaster Pro card - needs to be offset by n0 (0x20 or 0x40)
  60. #define    sbpLFMStatus    0x200    // R
  61. #define    sbpLFMAddr        0x200    // W
  62. #define    sbpLFMData        0x201    // W
  63. #define    sbpRFMStatus    0x202    // R
  64. #define    sbpRFMAddr        0x202    // W
  65. #define    sbpRFMData        0x203    // W
  66. #define    sbpMixerAddr    0x204    // W
  67. #define    sbpMixerData    0x205    // RW
  68. #define    sbpCDData        0x210    // R
  69. #define    sbpCDCommand    0x210    // W
  70. #define    sbpCDStatus        0x211    // R
  71. #define    sbpCDReset        0x212    // W
  72.  
  73. //    SBPro Mixer addresses
  74. #define    sbpmReset        0x00
  75. #define    sbpmVoiceVol    0x04
  76. #define    sbpmMicMix        0x0a
  77. #define    sbpmFilterADC    0x0c
  78. #define    sbpmControl        0x0e
  79. #define    sbpmMasterVol    0x22
  80. #define    sbpmFMVol        0x26
  81. #define    sbpmCDVol        0x28
  82. #define    sbpmLineVol        0x2e
  83.  
  84. typedef    struct
  85.         {
  86.             SoundCommon    common;
  87.             word        hertz;
  88.             byte        bits,
  89.                         reference,
  90.                         data[1];
  91.         } SampledSound;
  92.  
  93. //     Registers for the AdLib card
  94. #define    alFMStatus    0x388    // R
  95. #define    alFMAddr    0x388    // W
  96. #define    alFMData    0x389    // W
  97.  
  98. //    Register addresses
  99. // Operator stuff
  100. #define    alChar        0x20
  101. #define    alScale        0x40
  102. #define    alAttack    0x60
  103. #define    alSus        0x80
  104. #define    alWave        0xe0
  105. // Channel stuff
  106. #define    alFreqL        0xa0
  107. #define    alFreqH        0xb0
  108. #define    alFeedCon    0xc0
  109. // Global stuff
  110. #define    alEffects    0xbd
  111.  
  112. typedef    struct
  113.         {
  114.             byte    mChar,cChar,
  115.                     mScale,cScale,
  116.                     mAttack,cAttack,
  117.                     mSus,cSus,
  118.                     mWave,cWave,
  119.                     nConn,
  120.  
  121.                     // These are only for Muse - these bytes are really unused
  122.                     voice,
  123.                     mode,
  124.                     unused[3];
  125.         } Instrument;
  126.  
  127. typedef    struct
  128.         {
  129.             SoundCommon    common;
  130.             Instrument    inst;
  131.             byte        block,
  132.                         data[1];
  133.         } AdLibSound;
  134.  
  135. //
  136. //    Sequencing stuff
  137. //
  138. #define    sqMaxTracks    10
  139. #define    sqMaxMoods    1    // DEBUG
  140.  
  141. #define    sev_Null        0    // Does nothing
  142. #define    sev_NoteOff        1    // Turns a note off
  143. #define    sev_NoteOn        2    // Turns a note on
  144. #define    sev_NotePitch    3    // Sets the pitch of a currently playing note
  145. #define    sev_NewInst        4    // Installs a new instrument
  146. #define    sev_NewPerc        5    // Installs a new percussive instrument
  147. #define    sev_PercOn        6    // Turns a percussive note on
  148. #define    sev_PercOff        7    // Turns a percussive note off
  149. #define    sev_SeqEnd        -1    // Terminates a sequence
  150.  
  151. //     Flags for MusicGroup.flags
  152. #define    sf_Melodic        0
  153. #define    sf_Percussive    1
  154.  
  155. #if 1
  156. typedef    struct
  157.         {
  158.             word    length,
  159.                     values[1];
  160.         } MusicGroup;
  161. #else
  162. typedef    struct
  163.         {
  164.             word    flags,
  165.                     count,
  166.                     offsets[1];
  167.         } MusicGroup;
  168. #endif
  169.  
  170. typedef    struct
  171.         {
  172.             /* This part needs to be set up by the user */
  173.             word        mood,far *moods[sqMaxMoods];
  174.  
  175.             /* The rest is set up by the code */
  176.             Instrument    inst;
  177.             boolean        percussive;
  178.             word        far *seq;
  179.             longword    nextevent;
  180.         } ActiveTrack;
  181.  
  182. #define    sqmode_Normal        0
  183. #define    sqmode_FadeIn        1
  184. #define    sqmode_FadeOut        2
  185.  
  186. #define    sqMaxFade        64    // DEBUG
  187.  
  188.  
  189. // Global variables
  190. extern    boolean        AdLibPresent,
  191.                     SoundSourcePresent,
  192.                     SoundBlasterPresent,
  193.                     NeedsMusic,                    // For Caching Mgr
  194.                     SoundPositioned;
  195. extern    SDMode        SoundMode;
  196. extern    SDSMode        DigiMode;
  197. extern    SMMode        MusicMode;
  198. extern    boolean        DigiPlaying;
  199. extern    int            DigiMap[];
  200. extern    longword    TimeCount;                    // Global time in ticks
  201.  
  202. // Function prototypes
  203. extern    void    SD_Startup(void),
  204.                 SD_Shutdown(void),
  205.                 SD_Default(boolean gotit,SDMode sd,SMMode sm),
  206.  
  207.                 SD_PositionSound(int leftvol,int rightvol);
  208. extern    boolean    SD_PlaySound(soundnames sound);
  209. extern    void    SD_SetPosition(int leftvol,int rightvol),
  210.                 SD_StopSound(void),
  211.                 SD_WaitSoundDone(void),
  212.  
  213.                 SD_StartMusic(MusicGroup far *music),
  214.                 SD_MusicOn(void),
  215.                 SD_MusicOff(void),
  216.                 SD_FadeOutMusic(void),
  217.  
  218.                 SD_SetUserHook(void (*hook)(void));
  219. extern    boolean    SD_MusicPlaying(void),
  220.                 SD_SetSoundMode(SDMode mode),
  221.                 SD_SetMusicMode(SMMode mode);
  222. extern    word    SD_SoundPlaying(void);
  223.  
  224. extern    void    SD_SetDigiDevice(SDSMode),
  225.                 SD_PlayDigitized(word which,int leftpos,int rightpos),
  226.                 SD_StopDigitized(void),
  227.                 SD_Poll(void);
  228.  
  229. #ifdef    _MUSE_    // MUSE Goes directly to the lower level routines
  230. extern    void    SDL_PCPlaySound(PCSound far *sound),
  231.                 SDL_PCStopSound(void),
  232.                 SDL_ALPlaySound(AdLibSound far *sound),
  233.                 SDL_ALStopSound(void);
  234. #endif
  235.  
  236. #endif
  237.  
  238.