]> 4ch.mooo.com Git - 16.git/blob - 16/cawat/ID_SD.H
wwww
[16.git] / 16 / cawat / ID_SD.H
1 /* Catacomb Armageddon Source Code\r
2  * Copyright (C) 1993-2014 Flat Rock Software\r
3  *\r
4  * This program is free software; you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation; either version 2 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along\r
15  * with this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
17  */\r
18 \r
19 //\r
20 //      ID Engine\r
21 //      ID_SD.h - Sound Manager Header\r
22 //      v1.0d1\r
23 //      By Jason Blochowiak\r
24 //\r
25 \r
26 #ifndef __TYPES__\r
27 #include "ID_Types.h"\r
28 #endif\r
29 \r
30 #ifndef __ID_SD__\r
31 #define __ID_SD__\r
32 \r
33 #ifdef  __DEBUG__\r
34 #define __DEBUG_SoundMgr__\r
35 #endif\r
36 \r
37 #define TickBase        70              // 70Hz per tick - used as a base for timer 0\r
38 \r
39 typedef enum    {\r
40                                         sdm_Off,\r
41                                         sdm_PC,sdm_AdLib,\r
42                                 }       SDMode;\r
43 typedef enum    {\r
44                                         smm_Off,smm_AdLib\r
45                                 }       SMMode;\r
46 \r
47 typedef struct\r
48                 {\r
49                         longword        length;\r
50                         word            priority;\r
51                 } SoundCommon;\r
52 \r
53 //      PC Sound stuff\r
54 #define pcTimer         0x42\r
55 #define pcTAccess       0x43\r
56 #define pcSpeaker       0x61\r
57 \r
58 #define pcSpkBits       3\r
59 \r
60 typedef struct\r
61                 {\r
62                         SoundCommon     common;\r
63                         byte            data[1];\r
64                 } PCSound;\r
65 \r
66 //      Registers for the Sound Blaster card - needs to be offset by n0\r
67 #define sbReset         0x206\r
68 #define sbReadData      0x20a\r
69 #define sbWriteCmd      0x20c\r
70 #define sbWriteData     0x20c\r
71 #define sbWriteStat     0x20c\r
72 #define sbDataAvail     0x20e\r
73 \r
74 typedef struct\r
75                 {\r
76                         SoundCommon     common;\r
77                         word            hertz;\r
78                         byte            bits,\r
79                                                 reference,\r
80                                                 data[1];\r
81                 } SampledSound;\r
82 \r
83 //      Registers for the AdLib card\r
84 // Operator stuff\r
85 #define alChar          0x20\r
86 #define alScale         0x40\r
87 #define alAttack        0x60\r
88 #define alSus           0x80\r
89 #define alWave          0xe0\r
90 // Channel stuff\r
91 #define alFreqL         0xa0\r
92 #define alFreqH         0xb0\r
93 #define alFeedCon       0xc0\r
94 // Global stuff\r
95 #define alEffects       0xbd\r
96 \r
97 typedef struct\r
98                 {\r
99                         byte    mChar,cChar,\r
100                                         mScale,cScale,\r
101                                         mAttack,cAttack,\r
102                                         mSus,cSus,\r
103                                         mWave,cWave,\r
104                                         nConn,\r
105 \r
106                                         // These are only for Muse - these bytes are really unused\r
107                                         voice,\r
108                                         mode,\r
109                                         unused[3];\r
110                 } Instrument;\r
111 \r
112 typedef struct\r
113                 {\r
114                         SoundCommon     common;\r
115                         Instrument      inst;\r
116                         byte            block,\r
117                                                 data[1];\r
118                 } AdLibSound;\r
119 \r
120 //\r
121 //      Sequencing stuff\r
122 //\r
123 #define sqMaxTracks     10\r
124 #define sqMaxMoods      1       // DEBUG\r
125 \r
126 #define sev_Null                0       // Does nothing\r
127 #define sev_NoteOff             1       // Turns a note off\r
128 #define sev_NoteOn              2       // Turns a note on\r
129 #define sev_NotePitch   3       // Sets the pitch of a currently playing note\r
130 #define sev_NewInst             4       // Installs a new instrument\r
131 #define sev_NewPerc             5       // Installs a new percussive instrument\r
132 #define sev_PercOn              6       // Turns a percussive note on\r
133 #define sev_PercOff             7       // Turns a percussive note off\r
134 #define sev_SeqEnd              -1      // Terminates a sequence\r
135 \r
136 //      Flags for MusicGroup.flags\r
137 #define sf_Melodic              0\r
138 #define sf_Percussive   1\r
139 \r
140 #if 1\r
141 typedef struct\r
142                 {\r
143                         word    length,\r
144                                         values[1];\r
145                 } MusicGroup;\r
146 #else\r
147 typedef struct\r
148                 {\r
149                         word    flags,\r
150                                         count,\r
151                                         offsets[1];\r
152                 } MusicGroup;\r
153 #endif\r
154 \r
155 typedef struct\r
156                 {\r
157                         /* This part needs to be set up by the user */\r
158                         word        mood,far *moods[sqMaxMoods];\r
159 \r
160                         /* The rest is set up by the code */\r
161                         Instrument      inst;\r
162                         boolean         percussive;\r
163                         word            far *seq;\r
164                         longword        nextevent;\r
165                 } ActiveTrack;\r
166 \r
167 #define sqmode_Normal           0\r
168 #define sqmode_FadeIn           1\r
169 #define sqmode_FadeOut          2\r
170 \r
171 #define sqMaxFade               64      // DEBUG\r
172 \r
173 \r
174 // Global variables\r
175 extern  boolean         AdLibPresent,\r
176                                         NeedsMusic;     // For Caching Mgr\r
177 extern  SDMode          SoundMode;\r
178 extern  SMMode          MusicMode;\r
179 extern  longword        TimeCount;                                      // Global time in ticks\r
180 extern  SDMode          oldsoundmode;\r
181 \r
182 // Function prototypes\r
183 extern  void    SD_Startup(void),\r
184                                 SD_Shutdown(void),\r
185                                 SD_Default(boolean gotit,SDMode sd,SMMode sm),\r
186                                 SD_PlaySound(soundnames sound),\r
187                                 SD_StopSound(void),\r
188                                 SD_WaitSoundDone(void),\r
189                                 SD_StartMusic(MusicGroup far *music),\r
190                                 SD_MusicOn(void),\r
191                                 SD_MusicOff(void),\r
192                                 SD_FadeOutMusic(void),\r
193                                 SD_SetUserHook(void (*hook)(void));\r
194 extern  boolean SD_MusicPlaying(void),\r
195                                 SD_SetSoundMode(SDMode mode),\r
196                                 SD_SetMusicMode(SMMode mode);\r
197 extern  word    SD_SoundPlaying(void);\r
198 \r
199 #ifdef  _MUSE_  // MUSE Goes directly to the lower level routines\r
200 extern  void    SDL_PCPlaySound(PCSound far *sound),\r
201                                 SDL_PCStopSound(void),\r
202                                 SDL_ALPlaySound(AdLibSound far *sound),\r
203                                 SDL_ALStopSound(void);\r
204 #endif\r
205 \r
206 #endif\r