std::shared_ptr<AudioClip> AudioClip::loadResource(ResourceLoader& loader) { bool streaming = loader.getMeta().getBool("streaming", false); int channels = loader.getMeta().getInt("channels", 1); auto result = std::make_shared<AudioClip>(size_t(channels)); if (streaming) { std::shared_ptr<ResourceDataStream> stream = loader.getStream(); Concurrent::execute([stream, result] () { result->loadFromStream(stream); }); } else { loader .getAsync() .then([result](std::unique_ptr<ResourceDataStatic> data) { result->loadFromStatic(std::shared_ptr<ResourceDataStatic>(std::move(data))); }); } return result; }