BsAudioClip.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Audio/BsAudioClip.h"
  4. #include "Resources/BsResources.h"
  5. #include "Audio/BsAudio.h"
  6. #include "Private/RTTI/BsAudioClipRTTI.h"
  7. namespace bs
  8. {
  9. AudioClip::AudioClip(const SPtr<DataStream>& samples, UINT32 streamSize, UINT32 numSamples, const AUDIO_CLIP_DESC& desc)
  10. : Resource(false), mDesc(desc), mNumSamples(numSamples), mStreamSize(streamSize), mStreamOffset(0), mLength(0.0f)
  11. , mStreamData(samples)
  12. {
  13. if (samples != nullptr)
  14. mStreamOffset = (UINT32)samples->tell();
  15. mKeepSourceData = desc.keepSourceData;
  16. }
  17. void AudioClip::initialize()
  18. {
  19. mLength = mNumSamples / mDesc.numChannels / (float)mDesc.frequency;
  20. Resource::initialize();
  21. }
  22. HAudioClip AudioClip::create(const SPtr<DataStream>& samples, UINT32 streamSize, UINT32 numSamples, const AUDIO_CLIP_DESC& desc)
  23. {
  24. return static_resource_cast<AudioClip>(gResources()._createResourceHandle(_createPtr(samples, streamSize, numSamples, desc)));
  25. }
  26. SPtr<AudioClip> AudioClip::_createPtr(const SPtr<DataStream>& samples, UINT32 streamSize, UINT32 numSamples, const AUDIO_CLIP_DESC& desc)
  27. {
  28. SPtr<AudioClip> newClip = gAudio().createClip(samples, streamSize, numSamples, desc);
  29. newClip->_setThisPtr(newClip);
  30. newClip->initialize();
  31. return newClip;
  32. }
  33. SPtr<AudioClip> AudioClip::createEmpty()
  34. {
  35. AUDIO_CLIP_DESC desc;
  36. SPtr<AudioClip> newClip = gAudio().createClip(nullptr, 0, 0, desc);
  37. newClip->_setThisPtr(newClip);
  38. return newClip;
  39. }
  40. RTTITypeBase* AudioClip::getRTTIStatic()
  41. {
  42. return AudioClipRTTI::instance();
  43. }
  44. RTTITypeBase* AudioClip::getRTTI() const
  45. {
  46. return getRTTIStatic();
  47. }
  48. }