comparison ALmixer.c @ 41:e10dd3056782

Added API to check if in interruption. Added more internal check if in interruption checks. Fixed pathological sleep disorder on iOS problem...bug was I forgot to convert microseconds to milliseconds in usleep calls which led to very short sleep times and the pathological sleep disorder problem. Thanks so much oto Kapil K. for spotting this problem for me.
author Eric Wing <ewing . public |-at-| gmail . com>
date Thu, 23 Jun 2011 17:37:16 -0700
parents b346b6608eab
children 05e5dc4817a4
comparison
equal deleted inserted replaced
37:b346b6608eab 41:e10dd3056782
331 static void ALmixer_Delay(ALuint milliseconds_delay) 331 static void ALmixer_Delay(ALuint milliseconds_delay)
332 { 332 {
333 #if defined(_WIN32) 333 #if defined(_WIN32)
334 Sleep(milliseconds_delay); 334 Sleep(milliseconds_delay);
335 #else 335 #else
336 usleep(milliseconds_delay); 336 usleep(milliseconds_delay*1000);
337 #endif 337 #endif
338 } 338 }
339 #else 339 #else
340 #include "SDL.h" /* For SDL_GetTicks(), SDL_Delay */ 340 #include "SDL.h" /* For SDL_GetTicks(), SDL_Delay */
341 #define ALmixer_GetTicks SDL_GetTicks 341 #define ALmixer_GetTicks SDL_GetTicks
1979 1979
1980 /* Delete source associated with the channel */ 1980 /* Delete source associated with the channel */
1981 alDeleteSources(1, &ALmixer_Channel_List[i].alsource); 1981 alDeleteSources(1, &ALmixer_Channel_List[i].alsource);
1982 if((error = alGetError()) != AL_NO_ERROR) 1982 if((error = alGetError()) != AL_NO_ERROR)
1983 { 1983 {
1984 fprintf(stderr, "13Testing error: %s\n", 1984 fprintf(stderr, "13bTesting error: %s\n",
1985 alGetString(error)); 1985 alGetString(error));
1986 } 1986 }
1987 } 1987 }
1988 1988
1989 1989
4859 ALint i=0; 4859 ALint i=0;
4860 4860
4861 #ifdef ENABLE_ALMIXER_THREADS 4861 #ifdef ENABLE_ALMIXER_THREADS
4862 SDL_LockMutex(s_simpleLock); 4862 SDL_LockMutex(s_simpleLock);
4863 #endif 4863 #endif
4864 if(AL_FALSE == ALmixer_Initialized) 4864 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
4865 { 4865 {
4866 #ifdef ENABLE_ALMIXER_THREADS 4866 #ifdef ENABLE_ALMIXER_THREADS
4867 SDL_UnlockMutex(s_simpleLock); 4867 SDL_UnlockMutex(s_simpleLock);
4868 #endif 4868 #endif
4869 return 0; 4869 return 0;
7446 /* iOS alcSuspendContext is a no-op */ 7446 /* iOS alcSuspendContext is a no-op */
7447 alcSuspendContext(s_interruptionContext); 7447 alcSuspendContext(s_interruptionContext);
7448 alcMakeContextCurrent(NULL); 7448 alcMakeContextCurrent(NULL);
7449 } 7449 }
7450 7450
7451 g_inInterruption = 1; 7451 g_inInterruption = AL_TRUE;
7452 } 7452 }
7453 7453
7454 void ALmixer_EndInterruption() 7454 void ALmixer_EndInterruption()
7455 { 7455 {
7456 if((AL_FALSE == g_inInterruption) || (AL_FALSE == ALmixer_Initialized)) 7456 if((AL_FALSE == g_inInterruption) || (AL_FALSE == ALmixer_Initialized))
7487 { 7487 {
7488 fprintf(stderr, "Critical Error: Could not create bookkeeping thread in EndInterruption\n"); 7488 fprintf(stderr, "Critical Error: Could not create bookkeeping thread in EndInterruption\n");
7489 } 7489 }
7490 #endif 7490 #endif
7491 g_inInterruption = AL_FALSE; 7491 g_inInterruption = AL_FALSE;
7492 }
7493
7494
7495 ALboolean ALmixer_IsInInterruption()
7496 {
7497 if(AL_FALSE == ALmixer_Initialized)
7498 {
7499 return AL_FALSE;
7500 }
7501 return g_inInterruption;
7492 } 7502 }
7493 7503
7494 /* Keep the return value void to allow easy use with 7504 /* Keep the return value void to allow easy use with
7495 * atexit() 7505 * atexit()
7496 */ 7506 */
7780 7790
7781 7791
7782 ALint ALmixer_AllocateChannels(ALint numchans) 7792 ALint ALmixer_AllocateChannels(ALint numchans)
7783 { 7793 {
7784 ALint retval; 7794 ALint retval;
7785 if(AL_FALSE == ALmixer_Initialized) 7795 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
7786 { 7796 {
7787 return -1; 7797 return -1;
7788 } 7798 }
7789 7799
7790 #ifdef ENABLE_ALMIXER_THREADS 7800 #ifdef ENABLE_ALMIXER_THREADS
7799 7809
7800 7810
7801 ALint ALmixer_ReserveChannels(ALint num) 7811 ALint ALmixer_ReserveChannels(ALint num)
7802 { 7812 {
7803 ALint retval; 7813 ALint retval;
7804 if(AL_FALSE == ALmixer_Initialized) 7814 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
7805 { 7815 {
7806 return -1; 7816 return -1;
7807 } 7817 }
7808 7818
7809 #ifdef ENABLE_ALMIXER_THREADS 7819 #ifdef ENABLE_ALMIXER_THREADS
8165 } 8175 }
8166 } 8176 }
8167 /* If an error happened, we have to clean up the memory */ 8177 /* If an error happened, we have to clean up the memory */
8168 if(j < max_queue_buffers) 8178 if(j < max_queue_buffers)
8169 { 8179 {
8180 ALmixer_SetError("################## Buffer allocation failed");
8170 fprintf(stderr, "################## Buffer allocation failed\n"); 8181 fprintf(stderr, "################## Buffer allocation failed\n");
8171 for( ; j>=0; j--) 8182 while(j>0)
8172 { 8183 {
8173 free(ret_data->buffer_map_list[j].data); 8184 free(ret_data->buffer_map_list[j].data);
8185 j--;
8174 } 8186 }
8187 // Delete for j=0 because the while loop misses the last one
8188 free(ret_data->buffer_map_list[j].data);
8189
8175 free(ret_data->buffer_map_list); 8190 free(ret_data->buffer_map_list);
8176 CircularQueueUnsignedInt_FreeQueue(ret_data->circular_buffer_queue); 8191 CircularQueueUnsignedInt_FreeQueue(ret_data->circular_buffer_queue);
8177 Sound_FreeSample(sample); 8192 Sound_FreeSample(sample);
8178 free(ret_data->buffer); 8193 free(ret_data->buffer);
8179 free(ret_data); 8194 free(ret_data);
8365 ALmixer_Data* ALmixer_LoadSample_RW(ALmixer_RWops* rwops, const char* fileext, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data) 8380 ALmixer_Data* ALmixer_LoadSample_RW(ALmixer_RWops* rwops, const char* fileext, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data)
8366 { 8381 {
8367 Sound_Sample* sample = NULL; 8382 Sound_Sample* sample = NULL;
8368 Sound_AudioInfo target; 8383 Sound_AudioInfo target;
8369 8384
8370 if(AL_FALSE == ALmixer_Initialized) 8385 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8371 { 8386 {
8372 return NULL; 8387 return NULL;
8373 } 8388 }
8374 8389
8375 /* Initialize target values to defaults 8390 /* Initialize target values to defaults
8416 ALmixer_Data* ALmixer_LoadSample(const char* filename, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data) 8431 ALmixer_Data* ALmixer_LoadSample(const char* filename, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data)
8417 { 8432 {
8418 Sound_Sample* sample = NULL; 8433 Sound_Sample* sample = NULL;
8419 Sound_AudioInfo target; 8434 Sound_AudioInfo target;
8420 8435
8421 if(AL_FALSE == ALmixer_Initialized) 8436 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8422 { 8437 {
8423 return NULL; 8438 return NULL;
8424 } 8439 }
8425 8440
8426 /* Initialize target values to defaults 8441 /* Initialize target values to defaults
8523 ALmixer_Data* ALmixer_LoadSample_RAW_RW(ALmixer_RWops* rwops, const char* fileext, ALmixer_AudioInfo* desired, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data) 8538 ALmixer_Data* ALmixer_LoadSample_RAW_RW(ALmixer_RWops* rwops, const char* fileext, ALmixer_AudioInfo* desired, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data)
8524 { 8539 {
8525 Sound_Sample* sample = NULL; 8540 Sound_Sample* sample = NULL;
8526 Sound_AudioInfo sound_desired; 8541 Sound_AudioInfo sound_desired;
8527 8542
8528 if(AL_FALSE == ALmixer_Initialized) 8543 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8529 { 8544 {
8530 return NULL; 8545 return NULL;
8531 } 8546 }
8532 8547
8533 /* Rather than copying the data from struct to struct, I could just 8548 /* Rather than copying the data from struct to struct, I could just
8565 ALmixer_Data* ALmixer_LoadSample_RAW(const char* filename, ALmixer_AudioInfo* desired, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data) 8580 ALmixer_Data* ALmixer_LoadSample_RAW(const char* filename, ALmixer_AudioInfo* desired, ALuint buffersize, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALboolean access_data)
8566 { 8581 {
8567 Sound_Sample* sample = NULL; 8582 Sound_Sample* sample = NULL;
8568 Sound_AudioInfo sound_desired; 8583 Sound_AudioInfo sound_desired;
8569 8584
8570 if(AL_FALSE == ALmixer_Initialized) 8585 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8571 { 8586 {
8572 return NULL; 8587 return NULL;
8573 } 8588 }
8574 8589
8575 /* Rather than copying the data from struct to struct, I could just 8590 /* Rather than copying the data from struct to struct, I could just
8600 } 8615 }
8601 8616
8602 8617
8603 void ALmixer_FreeData(ALmixer_Data* data) 8618 void ALmixer_FreeData(ALmixer_Data* data)
8604 { 8619 {
8605 if(AL_FALSE == ALmixer_Initialized) 8620 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8606 { 8621 {
8607 return; 8622 return;
8608 } 8623 }
8609 8624
8610 /* Bypass if in interruption event */ 8625 /* Bypass if in interruption event */
8631 /* This function will look up the source for the corresponding channel */ 8646 /* This function will look up the source for the corresponding channel */
8632 /* Must return 0 on error instead of -1 because of unsigned int */ 8647 /* Must return 0 on error instead of -1 because of unsigned int */
8633 ALuint ALmixer_GetSource(ALint channel) 8648 ALuint ALmixer_GetSource(ALint channel)
8634 { 8649 {
8635 ALuint retval; 8650 ALuint retval;
8636 if(AL_FALSE == ALmixer_Initialized) 8651 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8637 { 8652 {
8638 return 0; 8653 return 0;
8639 } 8654 }
8640 #ifdef ENABLE_ALMIXER_THREADS 8655 #ifdef ENABLE_ALMIXER_THREADS
8641 SDL_LockMutex(s_simpleLock); 8656 SDL_LockMutex(s_simpleLock);
8649 8664
8650 /* This function will look up the channel for the corresponding source */ 8665 /* This function will look up the channel for the corresponding source */
8651 ALint ALmixer_GetChannel(ALuint source) 8666 ALint ALmixer_GetChannel(ALuint source)
8652 { 8667 {
8653 ALint retval; 8668 ALint retval;
8654 if(AL_FALSE == ALmixer_Initialized) 8669 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8655 { 8670 {
8656 return -1; 8671 return -1;
8657 } 8672 }
8658 #ifdef ENABLE_ALMIXER_THREADS 8673 #ifdef ENABLE_ALMIXER_THREADS
8659 SDL_LockMutex(s_simpleLock); 8674 SDL_LockMutex(s_simpleLock);
8666 } 8681 }
8667 8682
8668 ALint ALmixer_FindFreeChannel(ALint start_channel) 8683 ALint ALmixer_FindFreeChannel(ALint start_channel)
8669 { 8684 {
8670 ALint retval; 8685 ALint retval;
8671 if(AL_FALSE == ALmixer_Initialized) 8686 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8672 { 8687 {
8673 return -1; 8688 return -1;
8674 } 8689 }
8675 #ifdef ENABLE_ALMIXER_THREADS 8690 #ifdef ENABLE_ALMIXER_THREADS
8676 SDL_LockMutex(s_simpleLock); 8691 SDL_LockMutex(s_simpleLock);
8742 8757
8743 8758
8744 ALint ALmixer_PlayChannelTimed(ALint channel, ALmixer_Data* data, ALint loops, ALint ticks) 8759 ALint ALmixer_PlayChannelTimed(ALint channel, ALmixer_Data* data, ALint loops, ALint ticks)
8745 { 8760 {
8746 ALint retval; 8761 ALint retval;
8747 if(AL_FALSE == ALmixer_Initialized) 8762 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8748 { 8763 {
8749 return -1; 8764 return -1;
8750 } 8765 }
8751 #ifdef ENABLE_ALMIXER_THREADS 8766 #ifdef ENABLE_ALMIXER_THREADS
8752 SDL_LockMutex(s_simpleLock); 8767 SDL_LockMutex(s_simpleLock);
8772 * In this event, an error message will be returned to you. 8787 * In this event, an error message will be returned to you.
8773 */ 8788 */
8774 ALuint ALmixer_PlaySourceTimed(ALuint source, ALmixer_Data* data, ALint loops, ALint ticks) 8789 ALuint ALmixer_PlaySourceTimed(ALuint source, ALmixer_Data* data, ALint loops, ALint ticks)
8775 { 8790 {
8776 ALuint retval; 8791 ALuint retval;
8777 if(AL_FALSE == ALmixer_Initialized) 8792 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8778 { 8793 {
8779 return 0; 8794 return 0;
8780 } 8795 }
8781 #ifdef ENABLE_ALMIXER_THREADS 8796 #ifdef ENABLE_ALMIXER_THREADS
8782 SDL_LockMutex(s_simpleLock); 8797 SDL_LockMutex(s_simpleLock);
8793 * or -1 for error 8808 * or -1 for error
8794 */ 8809 */
8795 ALint ALmixer_HaltChannel(ALint channel) 8810 ALint ALmixer_HaltChannel(ALint channel)
8796 { 8811 {
8797 ALint retval; 8812 ALint retval;
8798 if(AL_FALSE == ALmixer_Initialized) 8813 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8799 { 8814 {
8800 return -1; 8815 return -1;
8801 } 8816 }
8802 #ifdef ENABLE_ALMIXER_THREADS 8817 #ifdef ENABLE_ALMIXER_THREADS
8803 SDL_LockMutex(s_simpleLock); 8818 SDL_LockMutex(s_simpleLock);
8813 * or 0 for error 8828 * or 0 for error
8814 */ 8829 */
8815 ALint ALmixer_HaltSource(ALuint source) 8830 ALint ALmixer_HaltSource(ALuint source)
8816 { 8831 {
8817 ALint retval; 8832 ALint retval;
8818 if(AL_FALSE == ALmixer_Initialized) 8833 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8819 { 8834 {
8820 return -1; 8835 return -1;
8821 } 8836 }
8822 #ifdef ENABLE_ALMIXER_THREADS 8837 #ifdef ENABLE_ALMIXER_THREADS
8823 SDL_LockMutex(s_simpleLock); 8838 SDL_LockMutex(s_simpleLock);
8835 * playback. This may require samples to be halted 8850 * playback. This may require samples to be halted
8836 */ 8851 */
8837 ALboolean ALmixer_RewindData(ALmixer_Data* data) 8852 ALboolean ALmixer_RewindData(ALmixer_Data* data)
8838 { 8853 {
8839 ALboolean retval; 8854 ALboolean retval;
8840 if(AL_FALSE == ALmixer_Initialized) 8855 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8841 { 8856 {
8842 return AL_FALSE; 8857 return AL_FALSE;
8843 } 8858 }
8844 #ifdef ENABLE_ALMIXER_THREADS 8859 #ifdef ENABLE_ALMIXER_THREADS
8845 SDL_LockMutex(s_simpleLock); 8860 SDL_LockMutex(s_simpleLock);
8852 } 8867 }
8853 8868
8854 ALint ALmixer_RewindChannel(ALint channel) 8869 ALint ALmixer_RewindChannel(ALint channel)
8855 { 8870 {
8856 ALint retval; 8871 ALint retval;
8857 if(AL_FALSE == ALmixer_Initialized) 8872 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8858 { 8873 {
8859 return -1; 8874 return -1;
8860 } 8875 }
8861 #ifdef ENABLE_ALMIXER_THREADS 8876 #ifdef ENABLE_ALMIXER_THREADS
8862 SDL_LockMutex(s_simpleLock); 8877 SDL_LockMutex(s_simpleLock);
8869 } 8884 }
8870 8885
8871 ALint ALmixer_RewindSource(ALuint source) 8886 ALint ALmixer_RewindSource(ALuint source)
8872 { 8887 {
8873 ALint retval; 8888 ALint retval;
8874 if(AL_FALSE == ALmixer_Initialized) 8889 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8875 { 8890 {
8876 return -1; 8891 return -1;
8877 } 8892 }
8878 #ifdef ENABLE_ALMIXER_THREADS 8893 #ifdef ENABLE_ALMIXER_THREADS
8879 SDL_LockMutex(s_simpleLock); 8894 SDL_LockMutex(s_simpleLock);
8886 } 8901 }
8887 8902
8888 ALint ALmixer_PauseChannel(ALint channel) 8903 ALint ALmixer_PauseChannel(ALint channel)
8889 { 8904 {
8890 ALint retval; 8905 ALint retval;
8891 if(AL_FALSE == ALmixer_Initialized) 8906 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8892 { 8907 {
8893 return -1; 8908 return -1;
8894 } 8909 }
8895 #ifdef ENABLE_ALMIXER_THREADS 8910 #ifdef ENABLE_ALMIXER_THREADS
8896 SDL_LockMutex(s_simpleLock); 8911 SDL_LockMutex(s_simpleLock);
8903 } 8918 }
8904 8919
8905 ALint ALmixer_PauseSource(ALuint source) 8920 ALint ALmixer_PauseSource(ALuint source)
8906 { 8921 {
8907 ALint retval; 8922 ALint retval;
8908 if(AL_FALSE == ALmixer_Initialized) 8923 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8909 { 8924 {
8910 return -1; 8925 return -1;
8911 } 8926 }
8912 #ifdef ENABLE_ALMIXER_THREADS 8927 #ifdef ENABLE_ALMIXER_THREADS
8913 SDL_LockMutex(s_simpleLock); 8928 SDL_LockMutex(s_simpleLock);
8920 } 8935 }
8921 8936
8922 ALint ALmixer_ResumeChannel(ALint channel) 8937 ALint ALmixer_ResumeChannel(ALint channel)
8923 { 8938 {
8924 ALint retval; 8939 ALint retval;
8925 if(AL_FALSE == ALmixer_Initialized) 8940 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8926 { 8941 {
8927 return -1; 8942 return -1;
8928 } 8943 }
8929 #ifdef ENABLE_ALMIXER_THREADS 8944 #ifdef ENABLE_ALMIXER_THREADS
8930 SDL_LockMutex(s_simpleLock); 8945 SDL_LockMutex(s_simpleLock);
8937 } 8952 }
8938 8953
8939 ALint ALmixer_ResumeSource(ALuint source) 8954 ALint ALmixer_ResumeSource(ALuint source)
8940 { 8955 {
8941 ALint retval; 8956 ALint retval;
8942 if(AL_FALSE == ALmixer_Initialized) 8957 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8943 { 8958 {
8944 return -1; 8959 return -1;
8945 } 8960 }
8946 #ifdef ENABLE_ALMIXER_THREADS 8961 #ifdef ENABLE_ALMIXER_THREADS
8947 SDL_LockMutex(s_simpleLock); 8962 SDL_LockMutex(s_simpleLock);
8957 * This will allow seek to end to stay there because 8972 * This will allow seek to end to stay there because
8958 * Play automatically rewinds if at the end */ 8973 * Play automatically rewinds if at the end */
8959 ALboolean ALmixer_SeekData(ALmixer_Data* data, ALuint msec) 8974 ALboolean ALmixer_SeekData(ALmixer_Data* data, ALuint msec)
8960 { 8975 {
8961 ALboolean retval; 8976 ALboolean retval;
8962 if(AL_FALSE == ALmixer_Initialized) 8977 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8963 { 8978 {
8964 return -1; 8979 return -1;
8965 } 8980 }
8966 #ifdef ENABLE_ALMIXER_THREADS 8981 #ifdef ENABLE_ALMIXER_THREADS
8967 SDL_LockMutex(s_simpleLock); 8982 SDL_LockMutex(s_simpleLock);
8974 } 8989 }
8975 8990
8976 ALint ALmixer_SeekChannel(ALint channel, ALuint msec) 8991 ALint ALmixer_SeekChannel(ALint channel, ALuint msec)
8977 { 8992 {
8978 ALint retval; 8993 ALint retval;
8979 if(AL_FALSE == ALmixer_Initialized) 8994 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8980 { 8995 {
8981 return -1; 8996 return -1;
8982 } 8997 }
8983 #ifdef ENABLE_ALMIXER_THREADS 8998 #ifdef ENABLE_ALMIXER_THREADS
8984 SDL_LockMutex(s_simpleLock); 8999 SDL_LockMutex(s_simpleLock);
8991 } 9006 }
8992 9007
8993 ALint ALmixer_SeekSource(ALuint source, ALuint msec) 9008 ALint ALmixer_SeekSource(ALuint source, ALuint msec)
8994 { 9009 {
8995 ALint retval; 9010 ALint retval;
8996 if(AL_FALSE == ALmixer_Initialized) 9011 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
8997 { 9012 {
8998 return -1; 9013 return -1;
8999 } 9014 }
9000 #ifdef ENABLE_ALMIXER_THREADS 9015 #ifdef ENABLE_ALMIXER_THREADS
9001 SDL_LockMutex(s_simpleLock); 9016 SDL_LockMutex(s_simpleLock);
9008 } 9023 }
9009 9024
9010 ALint ALmixer_FadeInChannelTimed(ALint channel, ALmixer_Data* data, ALint loops, ALuint fade_ticks, ALint expire_ticks) 9025 ALint ALmixer_FadeInChannelTimed(ALint channel, ALmixer_Data* data, ALint loops, ALuint fade_ticks, ALint expire_ticks)
9011 { 9026 {
9012 ALint retval; 9027 ALint retval;
9013 if(AL_FALSE == ALmixer_Initialized) 9028 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9014 { 9029 {
9015 return -1; 9030 return -1;
9016 } 9031 }
9017 #ifdef ENABLE_ALMIXER_THREADS 9032 #ifdef ENABLE_ALMIXER_THREADS
9018 SDL_LockMutex(s_simpleLock); 9033 SDL_LockMutex(s_simpleLock);
9025 } 9040 }
9026 9041
9027 ALuint ALmixer_FadeInSourceTimed(ALuint source, ALmixer_Data* data, ALint loops, ALuint fade_ticks, ALint expire_ticks) 9042 ALuint ALmixer_FadeInSourceTimed(ALuint source, ALmixer_Data* data, ALint loops, ALuint fade_ticks, ALint expire_ticks)
9028 { 9043 {
9029 ALuint retval; 9044 ALuint retval;
9030 if(AL_FALSE == ALmixer_Initialized) 9045 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9031 { 9046 {
9032 return 0; 9047 return 0;
9033 } 9048 }
9034 #ifdef ENABLE_ALMIXER_THREADS 9049 #ifdef ENABLE_ALMIXER_THREADS
9035 SDL_LockMutex(s_simpleLock); 9050 SDL_LockMutex(s_simpleLock);
9042 } 9057 }
9043 9058
9044 ALint ALmixer_FadeOutChannel(ALint channel, ALuint ticks) 9059 ALint ALmixer_FadeOutChannel(ALint channel, ALuint ticks)
9045 { 9060 {
9046 ALint retval; 9061 ALint retval;
9047 if(AL_FALSE == ALmixer_Initialized) 9062 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9048 { 9063 {
9049 return -1; 9064 return -1;
9050 } 9065 }
9051 #ifdef ENABLE_ALMIXER_THREADS 9066 #ifdef ENABLE_ALMIXER_THREADS
9052 SDL_LockMutex(s_simpleLock); 9067 SDL_LockMutex(s_simpleLock);
9059 } 9074 }
9060 9075
9061 ALint ALmixer_FadeOutSource(ALuint source, ALuint ticks) 9076 ALint ALmixer_FadeOutSource(ALuint source, ALuint ticks)
9062 { 9077 {
9063 ALint retval; 9078 ALint retval;
9064 if(AL_FALSE == ALmixer_Initialized) 9079 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9065 { 9080 {
9066 return 0; 9081 return 0;
9067 } 9082 }
9068 #ifdef ENABLE_ALMIXER_THREADS 9083 #ifdef ENABLE_ALMIXER_THREADS
9069 SDL_LockMutex(s_simpleLock); 9084 SDL_LockMutex(s_simpleLock);
9076 } 9091 }
9077 9092
9078 ALint ALmixer_FadeChannel(ALint channel, ALuint ticks, ALfloat volume) 9093 ALint ALmixer_FadeChannel(ALint channel, ALuint ticks, ALfloat volume)
9079 { 9094 {
9080 ALint retval; 9095 ALint retval;
9081 if(AL_FALSE == ALmixer_Initialized) 9096 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9082 { 9097 {
9083 return 0; 9098 return 0;
9084 } 9099 }
9085 #ifdef ENABLE_ALMIXER_THREADS 9100 #ifdef ENABLE_ALMIXER_THREADS
9086 SDL_LockMutex(s_simpleLock); 9101 SDL_LockMutex(s_simpleLock);
9093 } 9108 }
9094 9109
9095 ALint ALmixer_FadeSource(ALuint source, ALuint ticks, ALfloat volume) 9110 ALint ALmixer_FadeSource(ALuint source, ALuint ticks, ALfloat volume)
9096 { 9111 {
9097 ALint retval; 9112 ALint retval;
9098 if(AL_FALSE == ALmixer_Initialized) 9113 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9099 { 9114 {
9100 return -1; 9115 return -1;
9101 } 9116 }
9102 #ifdef ENABLE_ALMIXER_THREADS 9117 #ifdef ENABLE_ALMIXER_THREADS
9103 SDL_LockMutex(s_simpleLock); 9118 SDL_LockMutex(s_simpleLock);
9111 9126
9112 9127
9113 ALboolean ALmixer_SetVolumeChannel(ALint channel, ALfloat volume) 9128 ALboolean ALmixer_SetVolumeChannel(ALint channel, ALfloat volume)
9114 { 9129 {
9115 ALboolean retval; 9130 ALboolean retval;
9116 if(AL_FALSE == ALmixer_Initialized) 9131 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9117 { 9132 {
9118 return AL_FALSE; 9133 return AL_FALSE;
9119 } 9134 }
9120 #ifdef ENABLE_ALMIXER_THREADS 9135 #ifdef ENABLE_ALMIXER_THREADS
9121 SDL_LockMutex(s_simpleLock); 9136 SDL_LockMutex(s_simpleLock);
9128 } 9143 }
9129 9144
9130 ALboolean ALmixer_SetVolumeSource(ALuint source, ALfloat volume) 9145 ALboolean ALmixer_SetVolumeSource(ALuint source, ALfloat volume)
9131 { 9146 {
9132 ALboolean retval; 9147 ALboolean retval;
9133 if(AL_FALSE == ALmixer_Initialized) 9148 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9134 { 9149 {
9135 return AL_FALSE; 9150 return AL_FALSE;
9136 } 9151 }
9137 #ifdef ENABLE_ALMIXER_THREADS 9152 #ifdef ENABLE_ALMIXER_THREADS
9138 SDL_LockMutex(s_simpleLock); 9153 SDL_LockMutex(s_simpleLock);
9145 } 9160 }
9146 9161
9147 ALfloat ALmixer_GetVolumeChannel(ALint channel) 9162 ALfloat ALmixer_GetVolumeChannel(ALint channel)
9148 { 9163 {
9149 ALfloat retval; 9164 ALfloat retval;
9150 if(AL_FALSE == ALmixer_Initialized) 9165 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9151 { 9166 {
9152 return -1.0f; 9167 return -1.0f;
9153 } 9168 }
9154 #ifdef ENABLE_ALMIXER_THREADS 9169 #ifdef ENABLE_ALMIXER_THREADS
9155 SDL_LockMutex(s_simpleLock); 9170 SDL_LockMutex(s_simpleLock);
9162 } 9177 }
9163 9178
9164 ALfloat ALmixer_GetVolumeSource(ALuint source) 9179 ALfloat ALmixer_GetVolumeSource(ALuint source)
9165 { 9180 {
9166 ALfloat retval; 9181 ALfloat retval;
9167 if(AL_FALSE == ALmixer_Initialized) 9182 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9168 { 9183 {
9169 return -1.0f; 9184 return -1.0f;
9170 } 9185 }
9171 #ifdef ENABLE_ALMIXER_THREADS 9186 #ifdef ENABLE_ALMIXER_THREADS
9172 SDL_LockMutex(s_simpleLock); 9187 SDL_LockMutex(s_simpleLock);
9179 } 9194 }
9180 9195
9181 ALboolean ALmixer_SetMaxVolumeChannel(ALint channel, ALfloat volume) 9196 ALboolean ALmixer_SetMaxVolumeChannel(ALint channel, ALfloat volume)
9182 { 9197 {
9183 ALboolean retval; 9198 ALboolean retval;
9184 if(AL_FALSE == ALmixer_Initialized) 9199 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9185 { 9200 {
9186 return AL_FALSE; 9201 return AL_FALSE;
9187 } 9202 }
9188 #ifdef ENABLE_ALMIXER_THREADS 9203 #ifdef ENABLE_ALMIXER_THREADS
9189 SDL_LockMutex(s_simpleLock); 9204 SDL_LockMutex(s_simpleLock);
9196 } 9211 }
9197 9212
9198 ALboolean ALmixer_SetMaxVolumeSource(ALuint source, ALfloat volume) 9213 ALboolean ALmixer_SetMaxVolumeSource(ALuint source, ALfloat volume)
9199 { 9214 {
9200 ALboolean retval; 9215 ALboolean retval;
9201 if(AL_FALSE == ALmixer_Initialized) 9216 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9202 { 9217 {
9203 return AL_FALSE; 9218 return AL_FALSE;
9204 } 9219 }
9205 #ifdef ENABLE_ALMIXER_THREADS 9220 #ifdef ENABLE_ALMIXER_THREADS
9206 SDL_LockMutex(s_simpleLock); 9221 SDL_LockMutex(s_simpleLock);
9213 } 9228 }
9214 9229
9215 ALfloat ALmixer_GetMaxVolumeChannel(ALint channel) 9230 ALfloat ALmixer_GetMaxVolumeChannel(ALint channel)
9216 { 9231 {
9217 ALfloat retval; 9232 ALfloat retval;
9218 if(AL_FALSE == ALmixer_Initialized) 9233 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9219 { 9234 {
9220 return -1.0f; 9235 return -1.0f;
9221 } 9236 }
9222 #ifdef ENABLE_ALMIXER_THREADS 9237 #ifdef ENABLE_ALMIXER_THREADS
9223 SDL_LockMutex(s_simpleLock); 9238 SDL_LockMutex(s_simpleLock);
9230 } 9245 }
9231 9246
9232 ALfloat ALmixer_GetMaxVolumeSource(ALuint source) 9247 ALfloat ALmixer_GetMaxVolumeSource(ALuint source)
9233 { 9248 {
9234 ALfloat retval; 9249 ALfloat retval;
9235 if(AL_FALSE == ALmixer_Initialized) 9250 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9236 { 9251 {
9237 return -1.0f; 9252 return -1.0f;
9238 } 9253 }
9239 #ifdef ENABLE_ALMIXER_THREADS 9254 #ifdef ENABLE_ALMIXER_THREADS
9240 SDL_LockMutex(s_simpleLock); 9255 SDL_LockMutex(s_simpleLock);
9248 9263
9249 9264
9250 ALboolean ALmixer_SetMinVolumeChannel(ALint channel, ALfloat volume) 9265 ALboolean ALmixer_SetMinVolumeChannel(ALint channel, ALfloat volume)
9251 { 9266 {
9252 ALboolean retval; 9267 ALboolean retval;
9253 if(AL_FALSE == ALmixer_Initialized) 9268 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9254 { 9269 {
9255 return AL_FALSE; 9270 return AL_FALSE;
9256 } 9271 }
9257 #ifdef ENABLE_ALMIXER_THREADS 9272 #ifdef ENABLE_ALMIXER_THREADS
9258 SDL_LockMutex(s_simpleLock); 9273 SDL_LockMutex(s_simpleLock);
9265 } 9280 }
9266 9281
9267 ALboolean ALmixer_SetMinVolumeSource(ALuint source, ALfloat volume) 9282 ALboolean ALmixer_SetMinVolumeSource(ALuint source, ALfloat volume)
9268 { 9283 {
9269 ALboolean retval; 9284 ALboolean retval;
9270 if(AL_FALSE == ALmixer_Initialized) 9285 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9271 { 9286 {
9272 return AL_FALSE; 9287 return AL_FALSE;
9273 } 9288 }
9274 #ifdef ENABLE_ALMIXER_THREADS 9289 #ifdef ENABLE_ALMIXER_THREADS
9275 SDL_LockMutex(s_simpleLock); 9290 SDL_LockMutex(s_simpleLock);
9282 } 9297 }
9283 9298
9284 ALfloat ALmixer_GetMinVolumeChannel(ALint channel) 9299 ALfloat ALmixer_GetMinVolumeChannel(ALint channel)
9285 { 9300 {
9286 ALfloat retval; 9301 ALfloat retval;
9287 if(AL_FALSE == ALmixer_Initialized) 9302 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9288 { 9303 {
9289 return -1.0f; 9304 return -1.0f;
9290 } 9305 }
9291 #ifdef ENABLE_ALMIXER_THREADS 9306 #ifdef ENABLE_ALMIXER_THREADS
9292 SDL_LockMutex(s_simpleLock); 9307 SDL_LockMutex(s_simpleLock);
9299 } 9314 }
9300 9315
9301 ALfloat ALmixer_GetMinVolumeSource(ALuint source) 9316 ALfloat ALmixer_GetMinVolumeSource(ALuint source)
9302 { 9317 {
9303 ALfloat retval; 9318 ALfloat retval;
9304 if(AL_FALSE == ALmixer_Initialized) 9319 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9305 { 9320 {
9306 return -1.0f; 9321 return -1.0f;
9307 } 9322 }
9308 #ifdef ENABLE_ALMIXER_THREADS 9323 #ifdef ENABLE_ALMIXER_THREADS
9309 SDL_LockMutex(s_simpleLock); 9324 SDL_LockMutex(s_simpleLock);
9318 9333
9319 9334
9320 ALboolean ALmixer_SetMasterVolume(ALfloat volume) 9335 ALboolean ALmixer_SetMasterVolume(ALfloat volume)
9321 { 9336 {
9322 ALboolean retval; 9337 ALboolean retval;
9323 if(AL_FALSE == ALmixer_Initialized) 9338 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9324 { 9339 {
9325 return AL_FALSE; 9340 return AL_FALSE;
9326 } 9341 }
9327 #ifdef ENABLE_ALMIXER_THREADS 9342 #ifdef ENABLE_ALMIXER_THREADS
9328 SDL_LockMutex(s_simpleLock); 9343 SDL_LockMutex(s_simpleLock);
9335 } 9350 }
9336 9351
9337 ALfloat ALmixer_GetMasterVolume() 9352 ALfloat ALmixer_GetMasterVolume()
9338 { 9353 {
9339 ALfloat retval; 9354 ALfloat retval;
9340 if(AL_FALSE == ALmixer_Initialized) 9355 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9341 { 9356 {
9342 return -1.0f; 9357 return -1.0f;
9343 } 9358 }
9344 #ifdef ENABLE_ALMIXER_THREADS 9359 #ifdef ENABLE_ALMIXER_THREADS
9345 SDL_LockMutex(s_simpleLock); 9360 SDL_LockMutex(s_simpleLock);
9352 } 9367 }
9353 9368
9354 ALint ALmixer_ExpireChannel(ALint channel, ALint ticks) 9369 ALint ALmixer_ExpireChannel(ALint channel, ALint ticks)
9355 { 9370 {
9356 ALint retval; 9371 ALint retval;
9357 if(AL_FALSE == ALmixer_Initialized) 9372 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9358 { 9373 {
9359 return -1; 9374 return -1;
9360 } 9375 }
9361 #ifdef ENABLE_ALMIXER_THREADS 9376 #ifdef ENABLE_ALMIXER_THREADS
9362 SDL_LockMutex(s_simpleLock); 9377 SDL_LockMutex(s_simpleLock);
9369 } 9384 }
9370 9385
9371 ALint ALmixer_ExpireSource(ALuint source, ALint ticks) 9386 ALint ALmixer_ExpireSource(ALuint source, ALint ticks)
9372 { 9387 {
9373 ALint retval; 9388 ALint retval;
9374 if(AL_FALSE == ALmixer_Initialized) 9389 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9375 { 9390 {
9376 return -1; 9391 return -1;
9377 } 9392 }
9378 #ifdef ENABLE_ALMIXER_THREADS 9393 #ifdef ENABLE_ALMIXER_THREADS
9379 SDL_LockMutex(s_simpleLock); 9394 SDL_LockMutex(s_simpleLock);
9386 } 9401 }
9387 9402
9388 ALint ALmixer_IsActiveChannel(ALint channel) 9403 ALint ALmixer_IsActiveChannel(ALint channel)
9389 { 9404 {
9390 ALint retval; 9405 ALint retval;
9391 if(AL_FALSE == ALmixer_Initialized) 9406 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9392 { 9407 {
9393 return -1; 9408 return -1;
9394 } 9409 }
9395 #ifdef ENABLE_ALMIXER_THREADS 9410 #ifdef ENABLE_ALMIXER_THREADS
9396 SDL_LockMutex(s_simpleLock); 9411 SDL_LockMutex(s_simpleLock);
9403 } 9418 }
9404 9419
9405 ALint ALmixer_IsActiveSource(ALuint source) 9420 ALint ALmixer_IsActiveSource(ALuint source)
9406 { 9421 {
9407 ALint retval; 9422 ALint retval;
9408 if(AL_FALSE == ALmixer_Initialized) 9423 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9409 { 9424 {
9410 return -1; 9425 return -1;
9411 } 9426 }
9412 #ifdef ENABLE_ALMIXER_THREADS 9427 #ifdef ENABLE_ALMIXER_THREADS
9413 SDL_LockMutex(s_simpleLock); 9428 SDL_LockMutex(s_simpleLock);
9421 9436
9422 9437
9423 ALint ALmixer_IsPlayingChannel(ALint channel) 9438 ALint ALmixer_IsPlayingChannel(ALint channel)
9424 { 9439 {
9425 ALint retval; 9440 ALint retval;
9426 if(AL_FALSE == ALmixer_Initialized) 9441 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9427 { 9442 {
9428 return -1; 9443 return -1;
9429 } 9444 }
9430 #ifdef ENABLE_ALMIXER_THREADS 9445 #ifdef ENABLE_ALMIXER_THREADS
9431 SDL_LockMutex(s_simpleLock); 9446 SDL_LockMutex(s_simpleLock);
9438 } 9453 }
9439 9454
9440 ALint ALmixer_IsPlayingSource(ALuint source) 9455 ALint ALmixer_IsPlayingSource(ALuint source)
9441 { 9456 {
9442 ALint retval; 9457 ALint retval;
9443 if(AL_FALSE == ALmixer_Initialized) 9458 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9444 { 9459 {
9445 return -1; 9460 return -1;
9446 } 9461 }
9447 #ifdef ENABLE_ALMIXER_THREADS 9462 #ifdef ENABLE_ALMIXER_THREADS
9448 SDL_LockMutex(s_simpleLock); 9463 SDL_LockMutex(s_simpleLock);
9456 9471
9457 9472
9458 ALint ALmixer_IsPausedChannel(ALint channel) 9473 ALint ALmixer_IsPausedChannel(ALint channel)
9459 { 9474 {
9460 ALint retval; 9475 ALint retval;
9461 if(AL_FALSE == ALmixer_Initialized) 9476 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9462 { 9477 {
9463 return -1; 9478 return -1;
9464 } 9479 }
9465 #ifdef ENABLE_ALMIXER_THREADS 9480 #ifdef ENABLE_ALMIXER_THREADS
9466 SDL_LockMutex(s_simpleLock); 9481 SDL_LockMutex(s_simpleLock);
9473 } 9488 }
9474 9489
9475 ALint ALmixer_IsPausedSource(ALuint source) 9490 ALint ALmixer_IsPausedSource(ALuint source)
9476 { 9491 {
9477 ALint retval; 9492 ALint retval;
9478 if(AL_FALSE == ALmixer_Initialized) 9493 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9479 { 9494 {
9480 return -1; 9495 return -1;
9481 } 9496 }
9482 #ifdef ENABLE_ALMIXER_THREADS 9497 #ifdef ENABLE_ALMIXER_THREADS
9483 SDL_LockMutex(s_simpleLock); 9498 SDL_LockMutex(s_simpleLock);
9491 9506
9492 9507
9493 ALuint ALmixer_CountAllFreeChannels() 9508 ALuint ALmixer_CountAllFreeChannels()
9494 { 9509 {
9495 ALuint retval; 9510 ALuint retval;
9496 if(AL_FALSE == ALmixer_Initialized) 9511 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9497 { 9512 {
9498 return 0; 9513 return 0;
9499 } 9514 }
9500 #ifdef ENABLE_ALMIXER_THREADS 9515 #ifdef ENABLE_ALMIXER_THREADS
9501 SDL_LockMutex(s_simpleLock); 9516 SDL_LockMutex(s_simpleLock);
9508 } 9523 }
9509 9524
9510 ALuint ALmixer_CountUnreservedFreeChannels() 9525 ALuint ALmixer_CountUnreservedFreeChannels()
9511 { 9526 {
9512 ALuint retval; 9527 ALuint retval;
9513 if(AL_FALSE == ALmixer_Initialized) 9528 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9514 { 9529 {
9515 return 0; 9530 return 0;
9516 } 9531 }
9517 #ifdef ENABLE_ALMIXER_THREADS 9532 #ifdef ENABLE_ALMIXER_THREADS
9518 SDL_LockMutex(s_simpleLock); 9533 SDL_LockMutex(s_simpleLock);
9525 } 9540 }
9526 9541
9527 ALuint ALmixer_CountAllUsedChannels() 9542 ALuint ALmixer_CountAllUsedChannels()
9528 { 9543 {
9529 ALuint retval; 9544 ALuint retval;
9530 if(AL_FALSE == ALmixer_Initialized) 9545 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9531 { 9546 {
9532 return 0; 9547 return 0;
9533 } 9548 }
9534 #ifdef ENABLE_ALMIXER_THREADS 9549 #ifdef ENABLE_ALMIXER_THREADS
9535 SDL_LockMutex(s_simpleLock); 9550 SDL_LockMutex(s_simpleLock);
9542 } 9557 }
9543 9558
9544 ALuint ALmixer_CountUnreservedUsedChannels() 9559 ALuint ALmixer_CountUnreservedUsedChannels()
9545 { 9560 {
9546 ALuint retval; 9561 ALuint retval;
9547 if(AL_FALSE == ALmixer_Initialized) 9562 if( (AL_FALSE == ALmixer_Initialized) || (AL_TRUE == g_inInterruption) )
9548 { 9563 {
9549 return 0; 9564 return 0;
9550 } 9565 }
9551 #ifdef ENABLE_ALMIXER_THREADS 9566 #ifdef ENABLE_ALMIXER_THREADS
9552 SDL_LockMutex(s_simpleLock); 9567 SDL_LockMutex(s_simpleLock);