OpenMoHAA 0.82.0
Loading...
Searching...
No Matches
snd_local_new.h
1/*
2===========================================================================
3Copyright (C) 2024 the OpenMoHAA team
4
5This file is part of OpenMoHAA source code.
6
7OpenMoHAA source code is free software; you can redistribute it
8and/or modify it under the terms of the GNU General Public License as
9published by the Free Software Foundation; either version 2 of the License,
10or (at your option) any later version.
11
12OpenMoHAA source code is distributed in the hope that it will be
13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with OpenMoHAA source code; if not, write to the Free Software
19Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20===========================================================================
21*/
22
23#pragma once
24
25#include "../qcommon/q_shared.h"
26#include "../qcommon/qcommon.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32extern cvar_t *s_volume;
33extern cvar_t *s_khz;
34extern cvar_t *s_loadas8bit;
35extern cvar_t *s_separation;
36extern cvar_t *s_musicVolume;
37extern cvar_t *s_ambientVolume;
38
39#define MAX_SOUNDSYSTEM_CHANNELS_3D 32
40#define MAX_SOUNDSYSTEM_CHANNELS_2D 32
41#define MAX_SOUNDSYSTEM_CHANNELS_2D_STREAM 32
42#define MAX_SOUNDSYSTEM_POSITION_CHANNELS (MAX_SOUNDSYSTEM_CHANNELS_3D + MAX_SOUNDSYSTEM_CHANNELS_2D + MAX_SOUNDSYSTEM_CHANNELS_2D_STREAM)
43#define MAX_SOUNDSYSTEM_SONGS 2
44#define MAX_SOUNDSYSTEM_MISC_CHANNELS 3
45#define MAX_SOUNDSYSTEM_CHANNELS \
46 (MAX_SOUNDSYSTEM_CHANNELS_3D + MAX_SOUNDSYSTEM_CHANNELS_2D + MAX_SOUNDSYSTEM_CHANNELS_2D_STREAM + MAX_SOUNDSYSTEM_SONGS \
47 + MAX_SOUNDSYSTEM_MISC_CHANNELS)
48#define MAX_SOUNDSYSTEM_LOOP_SOUNDS 64
49
50#define SOUNDSYSTEM_CHANNEL_MP3_ID \
51 (MAX_SOUNDSYSTEM_CHANNELS_3D + MAX_SOUNDSYSTEM_CHANNELS_2D + MAX_SOUNDSYSTEM_CHANNELS_2D_STREAM + MAX_SOUNDSYSTEM_SONGS)
52#define SOUNDSYSTEM_CHANNEL_TRIGGER_MUSIC_ID (SOUNDSYSTEM_CHANNEL_MP3_ID + 1)
53#define SOUNDSYSTEM_CHANNEL_MOVIE_ID (SOUNDSYSTEM_CHANNEL_TRIGGER_MUSIC_ID + 1)
54
55typedef struct {
56 int format;
57 float rate;
58
59 float width;
60 int channels;
61 int samples;
62
63 int dataofs;
64 int datasize;
65 int dataalign;
66} wavinfo_t;
67
68typedef struct sfx_s {
69 int iFlags;
70
71 int length;
72 int width;
73 byte *data;
74 char name[64];
75
76 int registration_sequence;
77 int sfx_info_index;
78 float time_length;
79
80 wavinfo_t info;
81 unsigned int buffer;
82} sfx_t;
83
84typedef struct {
85 unsigned short wFormatTag;
86 unsigned short nChannels;
87 unsigned int nSamplesPerSec;
88 unsigned int nAvgBytesPerSec;
89 unsigned short nBlockAlign;
90 unsigned short wBitsPerSample;
91 unsigned short cbSize;
93
94typedef struct {
95 char name[64];
96
97 int loop_start;
98 int loop_end;
99
100 int max_number_playing;
101 float max_factor;
102} sfx_info_t;
103
104typedef struct {
105 vec3_t position;
106 vec3_t velocity;
107 int time;
108 qboolean use_listener;
109} s_entity_t;
110
111typedef struct {
112 char alias[32];
113 char path[64];
114
115 int mood_num;
116 int flags;
117 float volume;
118 float fadetime;
119
120 int current_pos;
121 int current_state;
122} song_t;
123
124typedef struct {
125 int iFlags;
126 char szName[64];
128
129typedef struct {
130 qboolean bPlaying;
131 int iStatus;
132 sfxsavegame_t sfx;
133
134 int iEntNum;
135 int iEntChannel;
136 vec3_t vOrigin;
137 float fVolume;
138 int iBaseRate;
139 float fNewPitchMult;
140 float fMinDist;
141 float fMaxDist;
142
143 int iStartTime;
144 int iTime;
145 int iNextCheckObstructionTime;
146 int iEndTime;
147
148 int iFlags;
149 int iOffset;
150 int iLoopCount;
152
153typedef struct {
154 channelbasesavegame_t Channels[MAX_SOUNDSYSTEM_CHANNELS];
156
157enum channel_flags_t {
158 CHANNEL_FLAG_PLAY_DEFERRED = 1,
159 CHANNEL_FLAG_LOCAL_LISTENER = 16,
160 CHANNEL_FLAG_NO_ENTITY = 32,
161 CHANNEL_FLAG_PAUSED = 64,
162 CHANNEL_FLAG_LOOPING = 128,
163 // Added in OPM
164 CHANNEL_FLAG_MISSING_ENT = 256,
165};
166
167enum sfx_flags_t {
168 SFX_FLAG_DEFAULT_SOUND = 1,
169 SFX_FLAG_MP3 = 2,
170 SFX_FLAG_STREAMED = 4,
171 SFX_FLAG_NO_OFFSET = 8,
172 SFX_FLAG_NULL = 16,
173};
174
175enum loopsound_flags_t {
176 LOOPSOUND_FLAG_NO_PAN = 1
177};
178
179#define MAX_SFX 1400
180#define MAX_SFX_INFOS 1000
181#define MAX_LOOP_SOUNDS 64
182#define DEFAULT_SFX_NUMBER_PLAYING 10 //5
183
184extern qboolean s_bLastInitSound;
185extern qboolean s_bSoundStarted;
186extern qboolean s_bSoundPaused;
187extern qboolean s_bTryUnpause;
188extern int s_iListenerNumber;
189extern float s_fAmbientVolume;
190extern int number_of_sfx_infos;
191extern sfx_info_t sfx_infos[];
192extern sfx_t s_knownSfx[];
193extern int s_numSfx;
194extern s_entity_t s_entity[];
195
196// The current sound driver.
197// Currently OPENAL
198#define SOUND_DRIVER OPENAL
199
200//
201// snd_info.cpp
202//
203void load_sfx_info();
204
205//
206// snd_dma_new.cpp
207//
208
209sfx_t *S_FindName(const char *name, int sequenceNumber);
210void S_DefaultSound(sfx_t *sfx);
211
212void S_LoadData(soundsystemsavegame_t *pSave);
213void S_SaveData(soundsystemsavegame_t *pSave);
214void S_ClearSoundBuffer();
215
216//
217// snd_mem.c
218//
219qboolean S_LoadSound(const char *fileName, sfx_t *sfx, int streamed, qboolean force_load);
220
221#define S_StopAllSounds2 S_StopAllSounds
222
223//
224// Driver-specific functions
225//
226#define S_Call_SndDriver(driver, func) S_##driver##_##func
227#define S_Call_SndDriverX(driver, func) S_Call_SndDriver(driver, func)
228
229#define S_Driver_Init S_Call_SndDriverX(SOUND_DRIVER, Init)
230#define S_Driver_Shutdown S_Call_SndDriverX(SOUND_DRIVER, Shutdown)
231#define S_Driver_StartSound S_Call_SndDriverX(SOUND_DRIVER, StartSound)
232#define S_Driver_AddLoopingSound S_Call_SndDriverX(SOUND_DRIVER, AddLoopingSound)
233#define S_Driver_ClearLoopingSounds S_Call_SndDriverX(SOUND_DRIVER, ClearLoopingSounds)
234#define S_Driver_StopSound S_Call_SndDriverX(SOUND_DRIVER, StopSound)
235#define S_Driver_StopAllSounds S_Call_SndDriverX(SOUND_DRIVER, StopAllSounds)
236#define S_Driver_Respatialize S_Call_SndDriverX(SOUND_DRIVER, Respatialize)
237#define S_Driver_SetReverb S_Call_SndDriverX(SOUND_DRIVER, SetReverb)
238#define S_Driver_Update S_Call_SndDriverX(SOUND_DRIVER, Update)
239#define S_Driver_GetMusicFilename S_Call_SndDriverX(SOUND_DRIVER, GetMusicFilename)
240#define S_Driver_GetMusicLoopCount S_Call_SndDriverX(SOUND_DRIVER, GetMusicLoopCount)
241#define S_Driver_GetMusicOffset S_Call_SndDriverX(SOUND_DRIVER, GetMusicOffset)
242
243void S_PrintInfo();
244void S_DumpInfo();
245qboolean S_NeedFullRestart();
246void S_ReLoad(soundsystemsavegame_t* pSave);
247
248extern cvar_t *s_show_sounds;
249
250#ifdef __cplusplus
251}
252#endif
Definition snd_local_new.h:34
Definition snd_local_new.h:104
Definition snd_local_new.h:94
Definition snd_local_new.h:68
Definition snd_local_new.h:124
Definition snd_local_new.h:111
Definition snd_local_new.h:55
Definition snd_local_new.h:55
Definition snd_local_new.h:84