// Copyright (C) 2021 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Audio module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_SOUNDBUFFER_HPP #define NAZARA_SOUNDBUFFER_HPP #include #include #include #include #include #include #include #include #include namespace Nz { struct SoundBufferParams : ResourceParameters { bool forceMono = false; bool IsValid() const; }; class Sound; class SoundBuffer; using SoundBufferLibrary = ObjectLibrary; using SoundBufferLoader = ResourceLoader; using SoundBufferManager = ResourceManager; struct SoundBufferImpl; class NAZARA_AUDIO_API SoundBuffer : public Resource { friend Sound; public: SoundBuffer(); SoundBuffer(AudioFormat format, UInt64 sampleCount, UInt32 sampleRate, const Int16* samples); SoundBuffer(const SoundBuffer&) = delete; SoundBuffer(SoundBuffer&&) = delete; ~SoundBuffer(); bool Create(AudioFormat format, UInt64 sampleCount, UInt32 sampleRate, const Int16* samples); void Destroy(); UInt32 GetDuration() const; AudioFormat GetFormat() const; const Int16* GetSamples() const; UInt64 GetSampleCount() const; UInt32 GetSampleRate() const; bool IsValid() const; SoundBuffer& operator=(const SoundBuffer&) = delete; SoundBuffer& operator=(SoundBuffer&&) = delete; static bool IsFormatSupported(AudioFormat format); static std::shared_ptr LoadFromFile(const std::filesystem::path& filePath, const SoundBufferParams& params = SoundBufferParams()); static std::shared_ptr LoadFromMemory(const void* data, std::size_t size, const SoundBufferParams& params = SoundBufferParams()); static std::shared_ptr LoadFromStream(Stream& stream, const SoundBufferParams& params = SoundBufferParams()); private: unsigned int GetOpenALBuffer() const; std::unique_ptr m_impl; }; } #include #endif // NAZARA_SOUNDBUFFER_HPP