#include "Resources/AudioLoader.h" #include "Resources/ResourceManager.h" #include "Resources/ResourceTypes.h" namespace XCEngine { namespace Resources { AudioLoader::AudioLoader() = default; AudioLoader::~AudioLoader() = default; Containers::Array AudioLoader::GetSupportedExtensions() const { Containers::Array extensions; extensions.PushBack("wav"); extensions.PushBack("ogg"); extensions.PushBack("mp3"); extensions.PushBack("flac"); extensions.PushBack("aiff"); extensions.PushBack("aif"); return extensions; } bool AudioLoader::CanLoad(const Containers::String& path) const { Containers::String ext = GetExtension(path); return ext == "wav" || ext == "ogg" || ext == "mp3" || ext == "flac" || ext == "aiff" || ext == "aif"; } LoadResult AudioLoader::Load(const Containers::String& path, const ImportSettings* settings) { Containers::Array data = ReadFileData(path); if (data.Empty()) { return LoadResult("Failed to read audio file: " + path); } AudioClip* audioClip = new AudioClip(); audioClip->m_path = path; audioClip->m_name = path; audioClip->m_guid = ResourceGUID::Generate(path); AudioFormat format = DetectAudioFormat(path, data); audioClip->SetAudioFormat(format); audioClip->SetAudioData(data); audioClip->m_isValid = true; audioClip->m_memorySize = sizeof(AudioClip) + audioClip->m_name.Length() + audioClip->m_path.Length() + audioClip->GetAudioData().Size(); return LoadResult(audioClip); } ImportSettings* AudioLoader::GetDefaultSettings() const { return nullptr; } bool AudioLoader::ParseWAVData(const Containers::Array& data, AudioClip* audioClip) { return true; } AudioFormat AudioLoader::DetectAudioFormat(const Containers::String& path, const Containers::Array& data) { Containers::String ext = GetExtension(path); if (ext == "wav") return AudioFormat::WAV; if (ext == "ogg") return AudioFormat::OGG; if (ext == "mp3") return AudioFormat::MP3; if (ext == "flac") return AudioFormat::FLAC; if (data.Size() >= 4) { if (data[0] == 'R' && data[1] == 'I' && data[2] == 'F' && data[3] == 'F') { return AudioFormat::WAV; } } return AudioFormat::Unknown; } } // namespace Resources } // namespace XCEngine