bbaudio.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "std.h"
  2. #include "bbaudio.h"
  3. gxAudio *gx_audio;
  4. static inline void debugSound( gxSound *s ){
  5. if( debug ){
  6. if( !gx_audio->verifySound( s ) ) RTEX( "Sound does not exist" );
  7. }
  8. }
  9. static gxSound *loadSound( BBStr *f,bool use_3d ){
  10. string t=*f;delete f;
  11. return gx_audio ? gx_audio->loadSound( t,use_3d ) : 0;
  12. }
  13. static gxChannel *playMusic( BBStr *f,bool use_3d ){
  14. string t=*f;delete f;
  15. return gx_audio ? gx_audio->playFile( t,use_3d ) : 0;
  16. }
  17. gxSound *bbLoadSound( BBStr *f ){
  18. return loadSound( f,false );
  19. }
  20. void bbFreeSound( gxSound *sound ){
  21. if( !sound ) return;
  22. debugSound( sound );
  23. gx_audio->freeSound( sound );
  24. }
  25. void bbLoopSound( gxSound *sound ){
  26. if( !sound ) return;
  27. debugSound( sound );
  28. sound->setLoop( true );
  29. }
  30. void bbSoundPitch( gxSound *sound,int pitch ){
  31. if( !sound ) return;
  32. debugSound( sound );
  33. sound->setPitch( pitch );
  34. }
  35. void bbSoundVolume( gxSound *sound,float volume ){
  36. if( !sound ) return;
  37. debugSound( sound );
  38. sound->setVolume( volume );
  39. }
  40. void bbSoundPan( gxSound *sound,float pan ){
  41. if( !sound ) return;
  42. debugSound( sound );
  43. sound->setPan( pan );
  44. }
  45. gxChannel *bbPlaySound( gxSound *sound ){
  46. if( !sound ) return 0;
  47. debugSound( sound );
  48. return sound->play();
  49. }
  50. gxChannel *bbPlayMusic( BBStr *f ){
  51. return playMusic( f,false );
  52. }
  53. gxChannel *bbPlayCDTrack( int track,int mode ){
  54. return gx_audio ? gx_audio->playCDTrack( track,mode ) : 0;
  55. }
  56. void bbStopChannel( gxChannel *channel ){
  57. if( !channel ) return;
  58. channel->stop();
  59. }
  60. void bbPauseChannel( gxChannel *channel ){
  61. if( !channel ) return;
  62. channel->setPaused( true );
  63. }
  64. void bbResumeChannel( gxChannel *channel ){
  65. if( !channel ) return;
  66. channel->setPaused( false );
  67. }
  68. void bbChannelPitch( gxChannel *channel,int pitch ){
  69. if( !channel ) return;
  70. channel->setPitch( pitch );
  71. }
  72. void bbChannelVolume( gxChannel *channel,float volume ){
  73. if( !channel ) return;
  74. channel->setVolume( volume );
  75. }
  76. void bbChannelPan( gxChannel *channel,float pan ){
  77. if( !channel ) return;
  78. channel->setPan( pan );
  79. }
  80. int bbChannelPlaying( gxChannel *channel ){
  81. return channel ? channel->isPlaying() : 0;
  82. }
  83. #ifdef PRO
  84. gxSound *bbLoad3DSound( BBStr *f ){
  85. return loadSound( f,true );
  86. }
  87. #endif
  88. bool audio_create(){
  89. gx_audio=gx_runtime->openAudio( 0 );
  90. return true;
  91. }
  92. bool audio_destroy(){
  93. if( gx_audio ) gx_runtime->closeAudio( gx_audio );
  94. gx_audio=0;
  95. return true;
  96. }
  97. void audio_link( void(*rtSym)(const char*,void*) ){
  98. rtSym( "%LoadSound$filename",bbLoadSound );
  99. rtSym( "FreeSound%sound",bbFreeSound );
  100. rtSym( "LoopSound%sound",bbLoopSound );
  101. rtSym( "SoundPitch%sound%pitch",bbSoundPitch );
  102. rtSym( "SoundVolume%sound#volume",bbSoundVolume );
  103. rtSym( "SoundPan%sound#pan",bbSoundPan );
  104. rtSym( "%PlaySound%sound",bbPlaySound );
  105. rtSym( "%PlayMusic$midifile",bbPlayMusic );
  106. rtSym( "%PlayCDTrack%track%mode=1",bbPlayCDTrack );
  107. rtSym( "StopChannel%channel",bbStopChannel );
  108. rtSym( "PauseChannel%channel",bbPauseChannel );
  109. rtSym( "ResumeChannel%channel",bbResumeChannel );
  110. rtSym( "ChannelPitch%channel%pitch",bbChannelPitch );
  111. rtSym( "ChannelVolume%channel#volume",bbChannelVolume );
  112. rtSym( "ChannelPan%channel#pan",bbChannelPan );
  113. rtSym( "%ChannelPlaying%channel",bbChannelPlaying );
  114. #ifdef PRO
  115. rtSym( "%Load3DSound$filename",bbLoad3DSound );
  116. #endif
  117. }