BsFMODAudio.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsFMODPrerequisites.h"
  5. #include "BsAudio.h"
  6. #include "fmod.hpp"
  7. namespace BansheeEngine
  8. {
  9. /** @addtogroup FMOD
  10. * @{
  11. */
  12. /** Global manager for the audio implementation using FMOD as the backend. */
  13. class FMODAudio : public Audio
  14. {
  15. public:
  16. FMODAudio();
  17. virtual ~FMODAudio();
  18. /** @copydoc Audio::setVolume */
  19. void setVolume(float volume) override;
  20. /** @copydoc Audio::getVolume */
  21. float getVolume() const override;
  22. /** @copydoc Audio::setPaused */
  23. void setPaused(bool paused) override;
  24. /** @copydoc Audio::isPaused */
  25. bool isPaused() const override { return mIsPaused; }
  26. /** @copydoc Audio::_update */
  27. void _update() override;
  28. /** @copydoc Audio::setActiveDevice */
  29. void setActiveDevice(const AudioDevice& device) override;
  30. /** @copydoc Audio::getActiveDevice */
  31. AudioDevice getActiveDevice() const override { return mActiveDevice; }
  32. /** @copydoc Audio::getDefaultDevice */
  33. AudioDevice getDefaultDevice() const override { return mDefaultDevice; }
  34. /** @copydoc Audio::getAllDevices */
  35. const Vector<AudioDevice>& getAllDevices() const override { return mAllDevices; }
  36. /** @name Internal
  37. * @{
  38. */
  39. /** Registers a new AudioListener. Should be called on listener creation. */
  40. void _registerListener(FMODAudioListener* listener);
  41. /** Unregisters an existing AudioListener. Should be called before listener destruction. */
  42. void _unregisterListener(FMODAudioListener* listener);
  43. /** Registers a new AudioSource. Should be called on source creation. */
  44. void _registerSource(FMODAudioSource* source);
  45. /** Unregisters an existing AudioSource. Should be called before source destruction. */
  46. void _unregisterSource(FMODAudioSource* source);
  47. /** Returns internal FMOD system instance. */
  48. FMOD::System* _getFMOD() const { return mFMOD; }
  49. /** @} */
  50. private:
  51. /** @copydoc Audio::createClip */
  52. SPtr<AudioClip> createClip(const SPtr<DataStream>& samples, UINT32 streamSize, UINT32 numSamples,
  53. const AUDIO_CLIP_DESC& desc) override;
  54. /** @copydoc Audio::createListener */
  55. SPtr<AudioListener> createListener() override;
  56. /** @copydoc Audio::createSource */
  57. SPtr<AudioSource> createSource() override;
  58. /** Rebuilds information about all listeners. Should be called when listener list changes. */
  59. void rebuildListeners();
  60. FMOD::System* mFMOD;
  61. FMOD::ChannelGroup* mMasterChannelGroup;
  62. float mVolume;
  63. bool mIsPaused;
  64. Vector<FMODAudioListener*> mListeners;
  65. UnorderedSet<FMODAudioSource*> mSources;
  66. Vector<AudioDevice> mAllDevices;
  67. AudioDevice mDefaultDevice;
  68. AudioDevice mActiveDevice;
  69. };
  70. /** Provides easier access to FMODAudio. */
  71. FMODAudio& gFMODAudio();
  72. /** @} */
  73. }