You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
2.7 KiB
149 lines
2.7 KiB
/* |
|
s_backend.c - sound hardware output |
|
Copyright (C) 2009 Uncle Mike |
|
|
|
This program is free software: you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 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. See the |
|
GNU General Public License for more details. |
|
*/ |
|
|
|
|
|
#ifndef XASH_DEDICATED |
|
#include "common.h" |
|
#if XASH_SOUND == SOUND_NULL |
|
|
|
#include "sound.h" |
|
|
|
#define SAMPLE_16BIT_SHIFT 1 |
|
#define SECONDARY_BUFFER_SIZE 0x10000 |
|
|
|
/* |
|
======================================================================= |
|
Global variables. Must be visible to window-procedure function |
|
so it can unlock and free the data block after it has been played. |
|
======================================================================= |
|
*/ |
|
|
|
dma_t dma; |
|
|
|
void S_Activate( qboolean active ) |
|
{ |
|
} |
|
|
|
|
|
/* |
|
================== |
|
SNDDMA_Init |
|
|
|
Try to find a sound device to mix for. |
|
Returns false if nothing is found. |
|
================== |
|
*/ |
|
qboolean SNDDMA_Init( void ) |
|
{ |
|
Msg( "Audio is not enabled\n" ); |
|
return false; |
|
} |
|
|
|
/* |
|
============== |
|
SNDDMA_GetDMAPos |
|
|
|
return the current sample position (in mono samples read) |
|
inside the recirculating dma buffer, so the mixing code will know |
|
how many sample are required to fill it up. |
|
=============== |
|
*/ |
|
int SNDDMA_GetDMAPos( void ) |
|
{ |
|
return dma.samplepos; |
|
} |
|
|
|
/* |
|
============== |
|
SNDDMA_GetSoundtime |
|
|
|
update global soundtime |
|
=============== |
|
*/ |
|
int SNDDMA_GetSoundtime( void ) |
|
{ |
|
static int buffers, oldsamplepos; |
|
int samplepos, fullsamples; |
|
|
|
fullsamples = dma.samples / 2; |
|
|
|
// it is possible to miscount buffers |
|
// if it has wrapped twice between |
|
// calls to S_Update. Oh well. |
|
samplepos = SNDDMA_GetDMAPos(); |
|
|
|
if( samplepos < oldsamplepos ) |
|
{ |
|
buffers++; // buffer wrapped |
|
|
|
if( paintedtime > 0x40000000 ) |
|
{ |
|
// time to chop things off to avoid 32 bit limits |
|
buffers = 0; |
|
paintedtime = fullsamples; |
|
S_StopAllSounds( true ); |
|
} |
|
} |
|
|
|
oldsamplepos = samplepos; |
|
|
|
return (buffers * fullsamples + samplepos / 2); |
|
} |
|
|
|
/* |
|
============== |
|
SNDDMA_BeginPainting |
|
|
|
Makes sure dma.buffer is valid |
|
=============== |
|
*/ |
|
void SNDDMA_BeginPainting( void ) |
|
{ |
|
|
|
} |
|
|
|
/* |
|
============== |
|
SNDDMA_Submit |
|
|
|
Send sound to device if buffer isn't really the dma buffer |
|
Also unlocks the dsound buffer |
|
=============== |
|
*/ |
|
void SNDDMA_Submit( void ) |
|
{ |
|
|
|
} |
|
|
|
/* |
|
============== |
|
SNDDMA_Shutdown |
|
|
|
Reset the sound device for exiting |
|
=============== |
|
*/ |
|
void SNDDMA_Shutdown( void ) |
|
{ |
|
Con_Printf("Shutting down audio.\n"); |
|
dma.initialized = false; |
|
|
|
if (dma.buffer) { |
|
Z_Free(dma.buffer); |
|
dma.buffer = NULL; |
|
} |
|
} |
|
|
|
#endif |
|
#endif
|
|
|