BsAudioClip.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 "BsResource.h"
  6. namespace BansheeEngine
  7. {
  8. /** @addtogroup Audio
  9. * @{
  10. */
  11. enum class AudioFormat
  12. {
  13. PCM,
  14. VORBIS
  15. };
  16. enum class AudioReadMode
  17. {
  18. LoadDecompressed,
  19. LoadCompressed,
  20. Stream
  21. };
  22. struct AUDIO_CLIP_DESC
  23. {
  24. AudioReadMode readMode = AudioReadMode::LoadDecompressed;
  25. AudioFormat format = AudioFormat::PCM;
  26. UINT32 frequency = 44100;
  27. UINT32 bitDepth = 16;
  28. UINT32 numChannels = 2;
  29. };
  30. class BS_CORE_EXPORT AudioClip : public Resource
  31. {
  32. public:
  33. static HAudioClip create(UINT32 numSamples, const AUDIO_CLIP_DESC& desc);
  34. static HAudioClip create(const SPtr<DataStream>& samples, UINT32 numSamples, const AUDIO_CLIP_DESC& desc);
  35. UINT32 getBitDepth() const { return mDesc.bitDepth; }
  36. UINT32 getFrequency() const { return mDesc.frequency; }
  37. UINT32 getNumChannels() const { return mDesc.numChannels; }
  38. AudioFormat getFormat() const { return mDesc.format; }
  39. AudioReadMode getReadMode() const { return mDesc.readMode; }
  40. UINT32 getLength() const { return mNumSamples / mDesc.frequency; }
  41. UINT32 getNumSamples() const { return mNumSamples; }
  42. virtual UINT32 getDataSize() const = 0;
  43. virtual UINT8* getData() const = 0;
  44. // Note: This will convert internal audio read mode to LoadCompressed (if ogg) or LoadDecompressed (if PCM)
  45. virtual void setData(UINT8* samples, UINT32 numSamples) = 0;
  46. public: // ***** INTERNAL ******
  47. /** @name Internal
  48. * @{
  49. */
  50. static SPtr<AudioClip> _createPtr(const SPtr<DataStream>& samples, UINT32 numSamples, const AUDIO_CLIP_DESC& desc);
  51. /** @} */
  52. private:
  53. AudioClip(const SPtr<DataStream>& samples, UINT32 numSamples, const AUDIO_CLIP_DESC& desc);
  54. protected:
  55. AUDIO_CLIP_DESC mDesc;
  56. UINT32 mNumSamples;
  57. SPtr<DataStream> mStreamData;
  58. /************************************************************************/
  59. /* SERIALIZATION */
  60. /************************************************************************/
  61. public:
  62. friend class AudioClipRTTI;
  63. static RTTITypeBase* getRTTIStatic();
  64. RTTITypeBase* getRTTI() const override;
  65. };
  66. /** @} */
  67. }