You.i Engine
YiAudioEngine.h
Go to the documentation of this file.
1 // ©️ You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_AUDIO_ENGINE_H_
3 #define _YI_AUDIO_ENGINE_H_
4 
5 #include <framework/YiPredef.h>
7 #include <thread/YiMutex.h>
8 #include <utility/YiString.h>
9 
10 #include <map>
11 #include <memory>
12 #include <vector>
13 
14 class CYIAssetSound;
15 class CYIAudioStream;
16 class CYISoundInstance;
17 
31 {
32 public:
36  static std::unique_ptr<CYIAudioEngine> Create();
37 
38  virtual ~CYIAudioEngine();
39 
43  virtual uint32_t GetSampleRate() const = 0;
44 
48  virtual uint32_t GetChannelCount() const = 0;
49 
54  virtual void RegisterStream(const std::shared_ptr<CYIAudioStream> &pStreamToAdd);
55 
60  virtual void UnregisterStream(const std::shared_ptr<CYIAudioStream> &pStreamToRemove);
61 
67  virtual void PlaySound(const CYIString &name, float volume = 1.0f);
68 
74  virtual void PlaySound(const std::shared_ptr<CYIAssetSound> &pAsset, float volume = 1.0f);
75 
79  virtual std::shared_ptr<CYISoundInstance> CreateSoundInstance(const CYIString &name);
80 
84  virtual std::shared_ptr<CYISoundInstance> CreateSoundInstance(const std::shared_ptr<CYIAssetSound> &pAsset);
85 
89  virtual void ClearCache();
90 
94  void Enable();
95 
101  void Disable();
102 
106  bool IsEnabled() const;
107 
108 protected:
109  CYIAudioEngine();
110 
118  virtual void Process(float *pData, uint32_t uFrameCount);
119 
120 private:
121  void DoEnable();
122  void DoDisable();
123 
127  virtual void WillEnable() = 0;
128 
132  virtual void DidDisable() = 0;
133 
134  void EnteredBackground();
135  void EnteredForeground();
136 
137  std::shared_ptr<CYIAssetSound> GetAssetSound(const CYIString &name);
138  void ClearStreams();
139 
140  std::atomic<bool> m_bUserEnabled;
141  std::atomic<bool> m_bEnabled;
142  CYIMutex m_streamsMutex;
143  std::vector<std::weak_ptr<CYIAudioStream>> m_streams;
144  std::map<CYIString, std::shared_ptr<CYIAssetSound>> m_assetSounds;
145  std::vector<std::shared_ptr<CYISoundInstance>> m_soundInstances;
146 };
147 
150 #endif // _YI_AUDIO_ENGINE_H_
virtual void UnregisterStream(const std::shared_ptr< CYIAudioStream > &pStreamToRemove)
Definition: YiMutex.h:110
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
Object representing a sound instance.
Definition: YiSoundInstance.h:21
virtual void RegisterStream(const std::shared_ptr< CYIAudioStream > &pStreamToAdd)
virtual std::shared_ptr< CYISoundInstance > CreateSoundInstance(const CYIString &name)
virtual uint32_t GetSampleRate() const =0
virtual void ClearCache()
Asset representing sound PCM data.
Definition: YiAssetSound.h:17
Base audio stream class that can process raw audio PCM.
Definition: YiAudioStream.h:22
Definition: YiSignalHandler.h:174
bool IsEnabled() const
virtual uint32_t GetChannelCount() const =0
Object responsible for processing audio streams and output to the platform.
Definition: YiAudioEngine.h:30
virtual ~CYIAudioEngine()
virtual void PlaySound(const CYIString &name, float volume=1.0f)
static std::unique_ptr< CYIAudioEngine > Create()
virtual void Process(float *pData, uint32_t uFrameCount)