SoundService.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #ifndef _SoundService_h_
  2. #define _SoundService_h_
  3. #include "ISoundEditorAccessor.h"
  4. #include "SoundScene.h"
  5. #include "SoundOff.h"
  6. class SoundsEngine;
  7. class SoundBanks;
  8. class SoundService : public ISoundService
  9. {
  10. enum States
  11. {
  12. s_needUpdateVolumes = 0x1000000,
  13. };
  14. public:
  15. SoundService();
  16. virtual ~SoundService();
  17. //Инициализвация
  18. virtual bool Init();
  19. //Исполнение
  20. virtual void EndFrame(float dltTime);
  21. //Создать звуковую сцену
  22. virtual ISoundScene * CreateScene(const char * ovnerName, const char * cppFile, long cppLine);
  23. //Загрузить звуковой банк
  24. virtual bool LoadSoundBank(const char * path);
  25. //Удалить звуковой банк
  26. virtual void ReleaseSoundBank(const char * path);
  27. //Установить общую громкость
  28. virtual void SetGlobalVolume(float volume);
  29. //Получить общую громкость
  30. virtual float GetGlobalVolume();
  31. //Установить громкость звуков
  32. virtual void SetSoundsVolume(float volume);
  33. //Получить громкость звуков
  34. virtual float GetSoundsVolume();
  35. //Установить громкость музыки
  36. virtual void SetMusicVolume(float volume);
  37. //Получить громкость музыки
  38. virtual float GetMusicVolume();
  39. //Установка отладочных параметров
  40. virtual void SetDebugLevel(DebugLevel dl);
  41. virtual DebugLevel GetDebugLevel();
  42. virtual void SetDebugView(dword dv);
  43. virtual dword GetDebugView();
  44. //Нарисовать отладочную информацию
  45. virtual void DebugDraw();
  46. #ifdef _XBOX
  47. virtual void * GetXAudio2();
  48. #endif
  49. public:
  50. //Найти звук по имени
  51. SoundBankFileSound * FindSound(const ConstString & name, const char ** bankName);
  52. //Разрешён ли вывод в лог
  53. bool IsLogOut();
  54. //Писать в лог сообщения о созданных звуках (медленно)
  55. bool IsTraceCreates();
  56. //Разрешён ли рисование отладочной информации
  57. bool IsDebugDraw();
  58. //Получить отладочные состояния
  59. dword GetDebugStates();
  60. //Получить текущую громкость звуков
  61. float GetCurrentSoundsVolume();
  62. //Получить текущую громкость музыки
  63. float GetCurrentMusicVolume();
  64. //Получить доступ к движку
  65. SoundsEngine & Engine();
  66. //Удалить сцену из списка
  67. void RemoveScene(SoundScene * scene);
  68. //Получить количество звуков ожидающих продолжение
  69. dword GetContinueWaiting();
  70. public:
  71. #ifndef NO_TOOLS
  72. //Разрешить-запретить создавать звуки с временных данных
  73. void EditEnablePreview(bool isEnable);
  74. //Зарегистрировать звук для предпрослушивания
  75. void EditRegistrySound(SoundBankFileSound * sbfs);
  76. //Отменить регистрацию звука для предпрослушивания
  77. bool EditUnregistrySound(SoundBankFileSound * sbfs);
  78. //Обновить параметры звука
  79. bool EditPatchSound(EditPatchSoundData & data, bool isCheckWaves);
  80. //Остановить проигрывание всех звуков
  81. void EditStopAllSounds(const char * sceneOvner);
  82. #endif
  83. private:
  84. array<SoundScene *> scenes; //Созданные звуковые сцены
  85. SoundsEngine * engine; //Звуковая игралка
  86. SoundBanks * soundBanks; //Доступные звуковые банки
  87. float globalVolume; //Общая громкость
  88. ICoreStorageFloat * stGlobalVolume; //Запись общей громкости в базе ядра
  89. float soundsVolume; //Громкость звуковых эффектов
  90. ICoreStorageFloat * stSoundsVolume; //Запись громкости звуковых эффектов в базе ядра
  91. float musicVolume; //Громкость музыки
  92. ICoreStorageFloat * stMusicVolume; //Запись громкости музыки в базе ядра
  93. float curSoundsVolume; //Кромкость звуковых эффектов
  94. float curMusicVolume; //Громкость музыки
  95. SoundSceneOff sceneOff; //Сцена для выключенного состояния
  96. dword states; //Состояния сервиса
  97. #ifndef NO_TOOLS
  98. private:
  99. array<SoundBankFileSound *> previewSounds;
  100. bool isEnablePreview;
  101. #endif
  102. };
  103. //Разрешён ли вывод в лог
  104. __forceinline bool SoundService::IsLogOut()
  105. {
  106. return (states & SoundsEngine::dbg_logout) != 0;
  107. }
  108. //Писать в лог сообщения о созданных звуках (медленно)
  109. __forceinline bool SoundService::IsTraceCreates()
  110. {
  111. return (states & SoundsEngine::dbg_tracecreates) != 0;
  112. }
  113. //Разрешён ли рисование отладочной информации
  114. __forceinline bool SoundService::IsDebugDraw()
  115. {
  116. return (states & (SoundsEngine::dbg_draw2d | SoundsEngine::dbg_draw3d)) != 0;
  117. }
  118. //Получить отладочные состояния
  119. __forceinline dword SoundService::GetDebugStates()
  120. {
  121. return states;
  122. }
  123. //Получить текущую громкость звуков
  124. __forceinline float SoundService::GetCurrentSoundsVolume()
  125. {
  126. return curSoundsVolume;
  127. }
  128. //Получить текущую громкость музыки
  129. __forceinline float SoundService::GetCurrentMusicVolume()
  130. {
  131. return curMusicVolume;
  132. }
  133. //Получить доступ к движку
  134. __forceinline SoundsEngine & SoundService::Engine()
  135. {
  136. return *engine;
  137. }
  138. //Удалить сцену из списка
  139. __forceinline void SoundService::RemoveScene(SoundScene * scene)
  140. {
  141. scenes.Del(scene);
  142. }
  143. #endif