X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=sound.h;h=e0ef6c73049e5a2f5acf49c71c5ed22e2b68f857;hb=b6958185ecd637a78cccd19d9a02e8bbcb1630bd;hp=4e8cafcab16bd2d11a1d03ffef834f70160a6dfa;hpb=e411cc7d14dad08cbbe27f5b3af86700f7eb5184;p=xonotic%2Fdarkplaces.git diff --git a/sound.h b/sound.h index 4e8cafca..e0ef6c73 100644 --- a/sound.h +++ b/sound.h @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -31,12 +31,6 @@ typedef struct int right; } portable_samplepair_t; -typedef struct sfx_s -{ - char name[MAX_QPATH]; - cache_user_t cache; -} sfx_t; - typedef struct { int length; @@ -44,26 +38,32 @@ typedef struct int speed; int width; int stereo; - byte data[1]; // variable sized + qbyte data[1]; // variable sized } sfxcache_t; +typedef struct sfx_s +{ + char name[MAX_QPATH]; + mempool_t *mempool; + sfxcache_t *sfxcache; + int silentlymissing; // true if missing and loaded with complain = false +} sfx_t; + typedef struct { - qboolean gamealive; - qboolean soundalive; - qboolean splitbuffer; int channels; int samples; // mono samples in buffer - int submission_chunk; // don't mix less than this # int samplepos; // in mono samples int samplebits; int speed; unsigned char *buffer; + int bufferlength; // used only by certain drivers } dma_t; typedef struct { sfx_t *sfx; // sfx number + int forceloop; // force looping even if the sound is not looped int leftvol; // 0-255 volume int rightvol; // 0-255 volume int end; // end time in global paintsamples @@ -94,10 +94,11 @@ void S_StaticSound (sfx_t *sfx, vec3_t origin, float vol, float attenuation); void S_StopSound (int entnum, int entchannel); void S_StopAllSounds(qboolean clear); void S_ClearBuffer (void); -void S_Update (vec3_t origin, vec3_t v_forward, vec3_t v_right, vec3_t v_up); +void S_Update(vec3_t origin, vec3_t forward, vec3_t left, vec3_t up); void S_ExtraUpdate (void); -sfx_t *S_PrecacheSound (char *sample); +sfx_t *S_GetCached(const char *name); +sfx_t *S_PrecacheSound (char *sample, int complain); void S_TouchSound (char *sample); void S_ClearPrecache (void); void S_BeginPrecaching (void); @@ -109,7 +110,7 @@ void S_InitPaintChannels (void); channel_t *SND_PickChannel(int entnum, int entchannel); // spatializes a channel -void SND_Spatialize(channel_t *ch); +void SND_Spatialize(channel_t *ch, int isstatic); // initializes cycling through a DMA buffer and returns information on it qboolean SNDDMA_Init(void); @@ -147,10 +148,10 @@ extern qboolean fakedma; extern int fakedma_updates; extern int paintedtime; extern int soundtime; -extern vec3_t listener_origin; -extern vec3_t listener_forward; -extern vec3_t listener_right; -extern vec3_t listener_up; +extern vec3_t listener_vieworigin; +extern vec3_t listener_viewforward; +extern vec3_t listener_viewleft; +extern vec3_t listener_viewup; extern volatile dma_t *shm; extern volatile dma_t sn; extern vec_t sound_nominal_clip_dist; @@ -160,14 +161,16 @@ extern cvar_t bgmvolume; extern cvar_t volume; extern cvar_t snd_swapstereo; -extern qboolean snd_initialized; +extern cvar_t cdaudioinitialized; +extern cvar_t snd_initialized; extern int snd_blocked; void S_LocalSound (char *s); -sfxcache_t *S_LoadSound (sfx_t *s); +sfxcache_t *S_LoadSound (sfx_t *s, int complain); +void S_UnloadSound(sfx_t *s); -wavinfo_t GetWavinfo (char *name, byte *wav, int wavlength); +wavinfo_t GetWavinfo (char *name, qbyte *wav, int wavlength); void SND_InitScaletable (void); void SNDDMA_Submit(void); @@ -175,4 +178,23 @@ void SNDDMA_Submit(void); void S_AmbientOff (void); void S_AmbientOn (void); +void *S_LockBuffer(void); +void S_UnlockBuffer(void); + +// add some data to the tail of the rawsamples queue +void S_RawSamples_Enqueue(short *samples, unsigned int length); +// read and remove some data from the head of the rawsamples queue +void S_RawSamples_Dequeue(int *samples, unsigned int length); +// empty the rawsamples queue +void S_RawSamples_ClearQueue(void); +// returns how much more data the queue wants, or 0 if it is already full enough +int S_RawSamples_QueueWantsMore(void); + +// resamples one sound buffer into another, while changing the length +void S_ResampleBuffer16Stereo(short *input, int inputlength, short *output, int outputlength); + +// returns the rate that the rawsamples system is running at +int S_RawSamples_SampleRate(void); + #endif +