misc/openalbridge/wrappers.c
changeset 3513 f589230fa21b
parent 3487 b1d00f1950c8
equal deleted inserted replaced
3512:6a8b5f313190 3513:f589230fa21b
    17 */
    17 */
    18 
    18 
    19 #include "wrappers.h"
    19 #include "wrappers.h"
    20 #include "openalbridge_t.h"
    20 #include "openalbridge_t.h"
    21 
    21 
    22 extern ALint *Sources;
       
    23 
    22 
    24 void *Malloc (size_t nbytes) {
    23 void *Malloc (size_t nbytes) {
    25     void *aptr;
    24     void *aptr;
    26 
    25 
    27     if ((aptr = malloc(nbytes)) == NULL) {
    26     if ((aptr = malloc(nbytes)) == NULL) {
    28         fprintf(stderr,"(Bridge Fatal Error) - not enough memory");
    27         fprintf(stderr,"(Bridge FATAL) - not enough memory\n");
    29         abort();
    28         abort();
    30     }
    29     }
    31     
    30 
    32     return aptr;
    31     return aptr;
    33 }
    32 }
    34 
    33 
    35 
    34 
    36 void *Realloc (void *aptr, size_t nbytes) {
    35 void *Realloc (void *aptr, size_t nbytes) {
    37     aptr = realloc(aptr, nbytes);
    36     aptr = realloc(aptr, nbytes);
    38 
    37 
    39     if (aptr == NULL) {
    38     if (aptr == NULL) {
    40         fprintf(stderr,"(Bridge Fatal Error) - not enough memory");
    39         fprintf(stderr,"(Bridge FATAL) - not enough memory\n");
    41         abort();
    40         abort();
    42     }
    41     }
    43 
    42 
    44     return aptr;
    43     return aptr;
    45 }
    44 }
    48 FILE *Fopen (const char *fname, char *mode)	{
    47 FILE *Fopen (const char *fname, char *mode)	{
    49     FILE *fp;
    48     FILE *fp;
    50 
    49 
    51     fp = fopen(fname,mode);
    50     fp = fopen(fname,mode);
    52     if (fp == NULL)
    51     if (fp == NULL)
    53         fprintf(stderr,"(Bridge Error) - can't open file %s in mode '%s'", fname, mode);
    52         fprintf(stderr,"(Bridge Error) - can't open file %s in mode '%s'\n", fname, mode);
    54 
    53 
    55     return fp;
    54     return fp;
    56 }
    55 }
    57 
    56 
    58 
    57 
    59 void helper_fade(void *tmp) {
       
    60     ALfloat gain;
       
    61     ALfloat target_gain;
       
    62     fade_t *fade;
       
    63     uint32_t index;
       
    64     uint16_t quantity;
       
    65     al_fade_t type;
       
    66 
       
    67     fade = tmp;
       
    68     index = fade->index;
       
    69     quantity = fade->quantity;
       
    70     type = fade->type;
       
    71     free (fade);
       
    72 
       
    73     if (type == AL_FADE_IN) {
       
    74 #ifdef DEBUG
       
    75         fprintf(stderr,"(Bridge Info) - Fade-in in progress [index %d quantity %d]", index, quantity);
       
    76 #endif
       
    77 
       
    78         // save the volume desired after the fade
       
    79         alGetSourcef(Sources[index], AL_GAIN, &target_gain);
       
    80         if (target_gain > 1.0f || target_gain <= 0.0f)
       
    81             target_gain = 1.0f;
       
    82 
       
    83         alSourcePlay(Sources[index]);
       
    84 
       
    85         for (gain = 0.0f ; gain <= target_gain; gain += (float) quantity/10000) {
       
    86 #ifdef TRACE
       
    87             err_msg("(%s) DEBUG - Fade-in set gain to %f", gain);
       
    88 #endif
       
    89             alSourcef(Sources[index], AL_GAIN, gain);
       
    90             usleep(10000);
       
    91         }
       
    92     } else {
       
    93         alGetSourcef(Sources[index], AL_GAIN, &target_gain);
       
    94 
       
    95         for (gain = target_gain; gain >= 0.00f; gain -= (float) quantity/10000) {
       
    96 #ifdef TRACE
       
    97             err_msg("(%s) DEBUG - Fade-out set gain to %f", gain);
       
    98 #endif
       
    99             alSourcef(Sources[index], AL_GAIN, gain);
       
   100             usleep(10000);
       
   101         }
       
   102 
       
   103         if (AL_NO_ERROR != alGetError())
       
   104             fprintf(stderr,"(Bridge Warning) - Failed to set fade-out effect");
       
   105 
       
   106         // stop that sound and reset its volume
       
   107         alSourceStop (Sources[index]);
       
   108         alSourcef (Sources[index], AL_GAIN, target_gain);
       
   109     }
       
   110 
       
   111     if (AL_NO_ERROR != alGetError())
       
   112         fprintf(stderr,"(Bridge Warning) - Failed to set fade effect");
       
   113 
       
   114 #ifndef _WIN32
       
   115     pthread_exit(NULL);
       
   116 #else
       
   117     _endthread();
       
   118 #endif
       
   119 }
       
   120