AudioController.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "Base.h"
  2. #include "AudioController.h"
  3. #include "AudioListener.h"
  4. #include "AudioBuffer.h"
  5. #include "AudioSource.h"
  6. namespace gameplay
  7. {
  8. std::list<AudioSource*> AudioController::_playingSources;
  9. AudioController::AudioController()
  10. : _alcDevice(NULL), _alcContext(NULL)
  11. {
  12. }
  13. AudioController::~AudioController()
  14. {
  15. }
  16. void AudioController::initialize()
  17. {
  18. _alcDevice = alcOpenDevice (NULL);
  19. if (!_alcDevice)
  20. {
  21. LOG_ERROR("AudioController::initialize() error. Unable to open OpenAL device.\n");
  22. return;
  23. }
  24. _alcContext = alcCreateContext(_alcDevice, NULL);
  25. ALCenum alcErr = alcGetError(_alcDevice);
  26. if (!_alcContext || alcErr != ALC_NO_ERROR)
  27. {
  28. alcCloseDevice (_alcDevice);
  29. LOG_ERROR_VARG("AudioController::initialize() error. Unable to create OpenAL context. Error: %d\n", alcErr);
  30. return;
  31. }
  32. alcMakeContextCurrent(_alcContext);
  33. alcErr = alcGetError(_alcDevice);
  34. if (alcErr != ALC_NO_ERROR)
  35. {
  36. LOG_ERROR_VARG("AudioController::initialize() error. Unable to make OpenAL context current. Error: %d\n", alcErr);
  37. }
  38. }
  39. void AudioController::finalize()
  40. {
  41. alcMakeContextCurrent(NULL);
  42. if (_alcContext)
  43. {
  44. alcDestroyContext(_alcContext);
  45. _alcContext = NULL;
  46. }
  47. if (_alcDevice)
  48. {
  49. alcCloseDevice(_alcDevice);
  50. _alcDevice = NULL;
  51. }
  52. }
  53. void AudioController::pause()
  54. {
  55. std::list<AudioSource*>::iterator itr = _playingSources.begin();
  56. // For each source that is playing, pause it.
  57. AudioSource* source = NULL;
  58. while (itr != _playingSources.end())
  59. {
  60. source = *itr;
  61. if (source->getState() == AudioSource::PLAYING)
  62. {
  63. source->pause();
  64. }
  65. itr++;
  66. }
  67. }
  68. void AudioController::resume()
  69. {
  70. std::list<AudioSource*>::iterator itr = _playingSources.begin();
  71. // For each source that is playing, resume it.
  72. AudioSource* source = NULL;
  73. while (itr != _playingSources.end())
  74. {
  75. source = *itr;
  76. if (source->getState() == AudioSource::PAUSED)
  77. {
  78. source->play();
  79. }
  80. itr++;
  81. }
  82. }
  83. void AudioController::update(long elapsedTime)
  84. {
  85. AudioListener* listener = AudioListener::getInstance();
  86. if (listener)
  87. {
  88. alListenerf(AL_GAIN, listener->getGain());
  89. alListenerfv(AL_ORIENTATION, (ALfloat*)&listener->getOrientationForward());
  90. alListenerfv(AL_VELOCITY, (ALfloat*)&listener->getVelocity());
  91. alListenerfv(AL_POSITION, (ALfloat*)&listener->getPosition());
  92. }
  93. }
  94. }