/src/Core/Audio.xs

http://github.com/PerlGameDev/SDL · Unknown · 111 lines · 93 code · 18 blank · 0 comment · 0 complexity · 9c0cc9c20f6c08704f940e578a1531ec MD5 · raw file

  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4. #include "ppport.h"
  5. #include "helper.h"
  6. #ifndef aTHX_
  7. #define aTHX_
  8. #endif
  9. #include <SDL.h>
  10. MODULE = SDL::Audio PACKAGE = SDL::Audio PREFIX = audio_
  11. int
  12. audio_open ( desired, obtained )
  13. SDL_AudioSpec *desired
  14. SDL_AudioSpec *obtained
  15. CODE:
  16. RETVAL = SDL_OpenAudio(desired, obtained);
  17. OUTPUT:
  18. RETVAL
  19. void
  20. audio_pause ( pause_on )
  21. int pause_on
  22. CODE:
  23. SDL_PauseAudio(pause_on);
  24. Uint32
  25. audio_get_status ()
  26. CODE:
  27. RETVAL = SDL_GetAudioStatus ();
  28. OUTPUT:
  29. RETVAL
  30. void
  31. audio_lock ()
  32. CODE:
  33. SDL_LockAudio();
  34. void
  35. audio_unlock ()
  36. CODE:
  37. SDL_UnlockAudio();
  38. AV *
  39. audio_load_wav ( filename, spec )
  40. char *filename
  41. SDL_AudioSpec *spec
  42. CODE:
  43. SDL_AudioSpec *temp = safemalloc(sizeof(SDL_AudioSpec));
  44. Uint8 *buf;
  45. Uint32 len;
  46. memcpy( temp, spec, sizeof(SDL_AudioSpec) );
  47. temp = SDL_LoadWAV(filename,temp,&buf,&len);
  48. if ( temp == NULL )
  49. {
  50. croak("Error in SDL_LoadWAV: %s", SDL_GetError());
  51. }
  52. else
  53. {
  54. RETVAL = (AV*)sv_2mortal((SV*)newAV());
  55. av_push(RETVAL, obj2bag( sizeof(SDL_AudioSpec *), (void *)temp, "SDL::AudioSpec" ));
  56. av_push(RETVAL, newSViv(PTR2IV(buf)));
  57. av_push(RETVAL, newSViv(len));
  58. }
  59. OUTPUT:
  60. RETVAL
  61. void
  62. audio_free_wav ( audio_buf )
  63. Uint8 *audio_buf
  64. CODE:
  65. SDL_FreeWAV(audio_buf);
  66. int
  67. audio_convert( cvt, data, len )
  68. SDL_AudioCVT *cvt
  69. Uint8 *data
  70. int len
  71. CODE:
  72. cvt->buf = (Uint8 *)safemalloc(len * cvt->len_mult);
  73. cvt->len = len;
  74. memcpy(cvt->buf, data, cvt->len);
  75. RETVAL = SDL_ConvertAudio(cvt);
  76. OUTPUT:
  77. RETVAL
  78. SV *
  79. audio_audio_driver_name ( ... )
  80. CODE:
  81. char buffer[1024];
  82. if ( SDL_AudioDriverName(buffer, 1024) != NULL )
  83. {
  84. RETVAL = newSVpv(buffer, 0);
  85. }
  86. else
  87. XSRETURN_UNDEF;
  88. OUTPUT:
  89. RETVAL
  90. void
  91. audio_close ()
  92. CODE:
  93. SDL_CloseAudio();