3
0

FileIOHandler_wwise.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <FileIOHandler_wwise_Platform.h>
  10. #include <AK/SoundEngine/Common/AkTypes.h>
  11. #include <AK/SoundEngine/Common/AkStreamMgrModule.h>
  12. namespace Audio
  13. {
  14. //! Wwise file IO device that access the Open 3D Engine file system through standard blocking file IO calls. Wwise will still
  15. //! run these in separate threads so it won't be blocking the audio playback, but it will interfere with the internal
  16. //! file IO scheduling of Open 3D Engine. This class can also write, so it's intended use is for one-off file reads and
  17. //! for tools to be able to write files.
  18. class CBlockingDevice_wwise
  19. : public AK::StreamMgr::IAkIOHookBlocking
  20. {
  21. public:
  22. ~CBlockingDevice_wwise() override;
  23. bool Init(size_t poolSize);
  24. void Destroy();
  25. AkDeviceID GetDeviceID() const { return m_deviceID; }
  26. bool Open(const char* filename, AkOpenMode openMode, AkFileDesc& fileDesc);
  27. AKRESULT Read(AkFileDesc& fileDesc, const AkIoHeuristics& heuristics, void* buffer, AkIOTransferInfo& transferInfo) override;
  28. AKRESULT Write(AkFileDesc& fileDesc, const AkIoHeuristics& heuristics, void* data, AkIOTransferInfo& transferInfo) override;
  29. AKRESULT Close(AkFileDesc& fileDesc) override;
  30. AkUInt32 GetBlockSize(AkFileDesc& fileDesc) override;
  31. void GetDeviceDesc(AkDeviceDesc& deviceDesc) override;
  32. AkUInt32 GetDeviceData() override;
  33. protected:
  34. AkDeviceID m_deviceID = AK_INVALID_DEVICE_ID;
  35. };
  36. //! Wwise file IO device that uses AZ::IO::Streamer to asynchronously handle file requests. By using AZ::IO::Streamer file requests
  37. //! can be scheduled along side other file requests for optimal disk usage. This class can't write and is intended to be used
  38. //! as part of a streaming system.
  39. class CStreamingDevice_wwise
  40. : public AK::StreamMgr::IAkIOHookDeferred
  41. {
  42. public:
  43. ~CStreamingDevice_wwise() override;
  44. bool Init(size_t poolSize);
  45. void Destroy();
  46. AkDeviceID GetDeviceID() const { return m_deviceID; }
  47. bool Open(const char* filename, AkOpenMode openMode, AkFileDesc& fileDesc);
  48. AKRESULT Read(AkFileDesc& fileDesc, const AkIoHeuristics& heuristics, AkAsyncIOTransferInfo& transferInfo) override;
  49. AKRESULT Write(AkFileDesc& fileDesc, const AkIoHeuristics& heuristics, AkAsyncIOTransferInfo& transferInfo) override;
  50. void Cancel([[maybe_unused]] AkFileDesc& fileDesc, [[maybe_unused]] AkAsyncIOTransferInfo& transferInfo, [[maybe_unused]] bool& cancelAllTransfersForThisFile) override {}
  51. AKRESULT Close(AkFileDesc& fileDesc) override;
  52. AkUInt32 GetBlockSize(AkFileDesc& fileDesc) override;
  53. void GetDeviceDesc(AkDeviceDesc& deviceDesc) override;
  54. AkUInt32 GetDeviceData() override;
  55. protected:
  56. AkDeviceID m_deviceID = AK_INVALID_DEVICE_ID;
  57. };
  58. class CFileIOHandler_wwise
  59. : public AK::StreamMgr::IAkFileLocationResolver
  60. {
  61. public:
  62. CFileIOHandler_wwise();
  63. ~CFileIOHandler_wwise() override = default;
  64. CFileIOHandler_wwise(const CFileIOHandler_wwise&) = delete;
  65. CFileIOHandler_wwise& operator=(const CFileIOHandler_wwise&) = delete;
  66. AKRESULT Init(size_t poolSize);
  67. void ShutDown();
  68. // IAkFileLocationResolver overrides.
  69. AKRESULT Open(const AkOSChar* fileName, AkOpenMode openMode, AkFileSystemFlags* flags, bool& syncOpen, AkFileDesc& fileDesc) override;
  70. AKRESULT Open(AkFileID fileID, AkOpenMode openMode, AkFileSystemFlags* flags, bool& syncOpen, AkFileDesc& fileDesc) override;
  71. // ~IAkFileLocationResolver overrides.
  72. void SetBankPath(const char* const bankPath);
  73. void SetLanguageFolder(const char* const languageFolder);
  74. private:
  75. CStreamingDevice_wwise m_streamingDevice;
  76. CBlockingDevice_wwise m_blockingDevice;
  77. AkOSChar m_bankPath[AK_MAX_PATH];
  78. AkOSChar m_languageFolder[AK_MAX_PATH];
  79. bool m_useAsyncOpen;
  80. };
  81. } // namespace Audio