dynamic_mp3.c
上传用户:nini_0081
上传日期:2022-07-21
资源大小:2628k
文件大小:5k
源码类别:

多媒体编程

开发平台:

DOS

  1. /*
  2.     SDL_mixer:  An audio mixer library based on the SDL library
  3.     Copyright (C) 1997-2009 Sam Lantinga
  4.     This library is free software; you can redistribute it and/or
  5.     modify it under the terms of the GNU Library General Public
  6.     License as published by the Free Software Foundation; either
  7.     version 2 of the License, or (at your option) any later version.
  8.     This library is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.     Library General Public License for more details.
  12.     You should have received a copy of the GNU Library General Public
  13.     License along with this library; if not, write to the Free
  14.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  15.     Sam Lantinga
  16.     slouken@libsdl.org
  17. */
  18. #ifdef MP3_MUSIC
  19. #include "SDL_loadso.h"
  20. #include "dynamic_mp3.h"
  21. smpeg_loader smpeg = {
  22. 0, NULL
  23. };
  24. #ifdef MP3_DYNAMIC
  25. int Mix_InitMP3()
  26. {
  27. if ( smpeg.loaded == 0 ) {
  28. smpeg.handle = SDL_LoadObject(MP3_DYNAMIC);
  29. if ( smpeg.handle == NULL ) {
  30. return -1;
  31. }
  32. smpeg.SMPEG_actualSpec =
  33. (void (*)( SMPEG *, SDL_AudioSpec * ))
  34. SDL_LoadFunction(smpeg.handle, "SMPEG_actualSpec");
  35. if ( smpeg.SMPEG_actualSpec == NULL ) {
  36. SDL_UnloadObject(smpeg.handle);
  37. return -1;
  38. }
  39. smpeg.SMPEG_delete =
  40. (void (*)( SMPEG* ))
  41. SDL_LoadFunction(smpeg.handle, "SMPEG_delete");
  42. if ( smpeg.SMPEG_delete == NULL ) {
  43. SDL_UnloadObject(smpeg.handle);
  44. return -1;
  45. }
  46. smpeg.SMPEG_enableaudio =
  47. (void (*)( SMPEG*, int ))
  48. SDL_LoadFunction(smpeg.handle, "SMPEG_enableaudio");
  49. if ( smpeg.SMPEG_enableaudio == NULL ) {
  50. SDL_UnloadObject(smpeg.handle);
  51. return -1;
  52. }
  53. smpeg.SMPEG_enablevideo =
  54. (void (*)( SMPEG*, int ))
  55. SDL_LoadFunction(smpeg.handle, "SMPEG_enablevideo");
  56. if ( smpeg.SMPEG_enablevideo == NULL ) {
  57. SDL_UnloadObject(smpeg.handle);
  58. return -1;
  59. }
  60. smpeg.SMPEG_new =
  61. (SMPEG* (*)(const char *, SMPEG_Info*, int))
  62. SDL_LoadFunction(smpeg.handle, "SMPEG_new");
  63. if ( smpeg.SMPEG_new == NULL ) {
  64. SDL_UnloadObject(smpeg.handle);
  65. return -1;
  66. }
  67. smpeg.SMPEG_new_rwops =
  68. (SMPEG* (*)(SDL_RWops *, SMPEG_Info*, int))
  69. SDL_LoadFunction(smpeg.handle, "SMPEG_new_rwops");
  70. if ( smpeg.SMPEG_new_rwops == NULL ) {
  71. SDL_UnloadObject(smpeg.handle);
  72. return -1;
  73. }
  74. smpeg.SMPEG_play =
  75. (void (*)( SMPEG* ))
  76. SDL_LoadFunction(smpeg.handle, "SMPEG_play");
  77. if ( smpeg.SMPEG_play == NULL ) {
  78. SDL_UnloadObject(smpeg.handle);
  79. return -1;
  80. }
  81. smpeg.SMPEG_playAudio =
  82. (int (*)( SMPEG *, Uint8 *, int ))
  83. SDL_LoadFunction(smpeg.handle, "SMPEG_playAudio");
  84. if ( smpeg.SMPEG_playAudio == NULL ) {
  85. SDL_UnloadObject(smpeg.handle);
  86. return -1;
  87. }
  88. smpeg.SMPEG_rewind =
  89. (void (*)( SMPEG* ))
  90. SDL_LoadFunction(smpeg.handle, "SMPEG_rewind");
  91. if ( smpeg.SMPEG_rewind == NULL ) {
  92. SDL_UnloadObject(smpeg.handle);
  93. return -1;
  94. }
  95. smpeg.SMPEG_setvolume =
  96. (void (*)( SMPEG*, int ))
  97. SDL_LoadFunction(smpeg.handle, "SMPEG_setvolume");
  98. if ( smpeg.SMPEG_setvolume == NULL ) {
  99. SDL_UnloadObject(smpeg.handle);
  100. return -1;
  101. }
  102. smpeg.SMPEG_skip =
  103. (void (*)( SMPEG*, float ))
  104. SDL_LoadFunction(smpeg.handle, "SMPEG_skip");
  105. if ( smpeg.SMPEG_skip == NULL ) {
  106. SDL_UnloadObject(smpeg.handle);
  107. return -1;
  108. }
  109. smpeg.SMPEG_status =
  110. (SMPEGstatus (*)( SMPEG* ))
  111. SDL_LoadFunction(smpeg.handle, "SMPEG_status");
  112. if ( smpeg.SMPEG_status == NULL ) {
  113. SDL_UnloadObject(smpeg.handle);
  114. return -1;
  115. }
  116. smpeg.SMPEG_stop =
  117. (void (*)( SMPEG* ))
  118. SDL_LoadFunction(smpeg.handle, "SMPEG_stop");
  119. if ( smpeg.SMPEG_stop == NULL ) {
  120. SDL_UnloadObject(smpeg.handle);
  121. return -1;
  122. }
  123. }
  124. ++smpeg.loaded;
  125. return 0;
  126. }
  127. void Mix_QuitMP3()
  128. {
  129. if ( smpeg.loaded == 0 ) {
  130. return;
  131. }
  132. if ( smpeg.loaded == 1 ) {
  133. SDL_UnloadObject(smpeg.handle);
  134. }
  135. --smpeg.loaded;
  136. }
  137. #else
  138. int Mix_InitMP3()
  139. {
  140. if ( smpeg.loaded == 0 ) {
  141. smpeg.SMPEG_actualSpec = SMPEG_actualSpec;
  142. smpeg.SMPEG_delete = SMPEG_delete;
  143. smpeg.SMPEG_enableaudio = SMPEG_enableaudio;
  144. smpeg.SMPEG_enablevideo = SMPEG_enablevideo;
  145. smpeg.SMPEG_new = SMPEG_new;
  146. smpeg.SMPEG_new_rwops = SMPEG_new_rwops;
  147. smpeg.SMPEG_play = SMPEG_play;
  148. smpeg.SMPEG_playAudio = SMPEG_playAudio;
  149. smpeg.SMPEG_rewind = SMPEG_rewind;
  150. smpeg.SMPEG_setvolume = SMPEG_setvolume;
  151. smpeg.SMPEG_skip = SMPEG_skip;
  152. smpeg.SMPEG_status = SMPEG_status;
  153. smpeg.SMPEG_stop = SMPEG_stop;
  154. }
  155. ++smpeg.loaded;
  156. return 0;
  157. }
  158. void Mix_QuitMP3()
  159. {
  160. if ( smpeg.loaded == 0 ) {
  161. return;
  162. }
  163. if ( smpeg.loaded == 1 ) {
  164. }
  165. --smpeg.loaded;
  166. }
  167. #endif /* MP3_DYNAMIC */
  168. #endif /* MP3_MUSIC */