BsAudio.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "Utility/BsModule.h"
  6. #include "Math/BsVector3.h"
  7. namespace bs
  8. {
  9. /** @addtogroup Audio
  10. * @{
  11. */
  12. /** Identifier for a device that can be used for playing audio. */
  13. struct BS_SCRIPT_EXPORT(m:Audio,pl:true) AudioDevice
  14. {
  15. WString name;
  16. };
  17. /** Provides global functionality relating to sounds and music. */
  18. class BS_CORE_EXPORT BS_SCRIPT_EXPORT(m:Audio) Audio : public Module<Audio>
  19. {
  20. public:
  21. virtual ~Audio() {}
  22. /**
  23. * Starts playback of the provided audio clip. This can be used for a quicker way of creating audio sources if you
  24. * don't need the full control provided by creating AudioSource manually.
  25. *
  26. * @param[in] clip Audio clip to play.
  27. * @param[in] position Position in world space to play the clip at. Only relevant if the clip is 3D.
  28. * @param[in] volume Volume to play the clip at.
  29. */
  30. void play(const HAudioClip& clip, const Vector3& position = Vector3::ZERO, float volume = 1.0f);
  31. /** Determines global audio volume. In range [0, 1]. */
  32. BS_SCRIPT_EXPORT(n:Volume,pr:setter)
  33. virtual void setVolume(float volume) = 0;
  34. /** @copydoc setVolume() */
  35. BS_SCRIPT_EXPORT(n:Volume,pr:getter)
  36. virtual float getVolume() const = 0;
  37. /** Determines if audio reproduction is paused globally. */
  38. BS_SCRIPT_EXPORT(n:Paused,pr:setter)
  39. virtual void setPaused(bool paused) = 0;
  40. /** @copydoc setPaused() */
  41. BS_SCRIPT_EXPORT(n:Paused,pr:getter)
  42. virtual bool isPaused() const = 0;
  43. /** Determines the device on which is the audio played back on. */
  44. BS_SCRIPT_EXPORT(n:ActiveDevice,pr:setter)
  45. virtual void setActiveDevice(const AudioDevice& device) = 0;
  46. /** @copydoc setActiveDevice() */
  47. BS_SCRIPT_EXPORT(n:ActiveDevice,pr:getter)
  48. virtual AudioDevice getActiveDevice() const = 0;
  49. /** Returns the default audio device identifier. */
  50. BS_SCRIPT_EXPORT(n:DefaultDevice,pr:getter)
  51. virtual AudioDevice getDefaultDevice() const = 0;
  52. /** Returns a list of all available audio devices. */
  53. BS_SCRIPT_EXPORT(n:AllDevices,pr:getter)
  54. virtual const Vector<AudioDevice>& getAllDevices() const = 0;
  55. /** @name Internal
  56. * @{
  57. */
  58. /** Called once per frame. Queues streaming audio requests. */
  59. virtual void _update();
  60. /** @} */
  61. protected:
  62. friend class AudioClip;
  63. friend class AudioListener;
  64. friend class AudioSource;
  65. /**
  66. * Creates a new audio clip.
  67. *
  68. * @param[in] samples Stream containing audio samples in format specified in @p desc.
  69. * @param[in] streamSize Size of the audio data in the provided stream, in bytes.
  70. * @param[in] numSamples Number of samples in @p samples stream.
  71. * @param[in] desc Descriptor describing the type of the audio stream (format, sample rate, etc.).
  72. * @return Newly created AudioClip. Must be manually initialized.
  73. */
  74. virtual SPtr<AudioClip> createClip(const SPtr<DataStream>& samples, UINT32 streamSize, UINT32 numSamples,
  75. const AUDIO_CLIP_DESC& desc) = 0;
  76. /** Creates a new AudioListener. */
  77. virtual SPtr<AudioListener> createListener() = 0;
  78. /** Creates a new AudioSource. */
  79. virtual SPtr<AudioSource> createSource() = 0;
  80. /** Stops playback of all sources started with Audio::play calls. */
  81. void stopManualSources();
  82. private:
  83. Vector<SPtr<AudioSource>> mManualSources;
  84. Vector<SPtr<AudioSource>> mTempSources;
  85. };
  86. /** Provides easier access to Audio. */
  87. BS_CORE_EXPORT Audio& gAudio();
  88. /** @} */
  89. }