mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2024-12-04 19:23:28 +01:00
add sound sfxr loaders
This commit is contained in:
parent
0c1a98cfd5
commit
86c52c4fac
@ -19,21 +19,6 @@ target_link_libraries(sound_service
|
|||||||
|
|
||||||
###############################
|
###############################
|
||||||
|
|
||||||
add_library(filesystem_soloud_file
|
|
||||||
./src/mm/soloud_filesystem_file_impl.hpp
|
|
||||||
./src/mm/soloud_filesystem_file_impl.cpp
|
|
||||||
|
|
||||||
./src/mm/sound_loader_wav.hpp
|
|
||||||
./src/mm/sound_loader_wav.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(filesystem_soloud_file
|
|
||||||
filesystem_service
|
|
||||||
soloud
|
|
||||||
)
|
|
||||||
|
|
||||||
###############################
|
|
||||||
|
|
||||||
add_library(soloud_json
|
add_library(soloud_json
|
||||||
./src/mm/soloud_json.hpp
|
./src/mm/soloud_json.hpp
|
||||||
./src/mm/soloud_json.cpp
|
./src/mm/soloud_json.cpp
|
||||||
@ -46,6 +31,24 @@ target_link_libraries(soloud_json
|
|||||||
nlohmann_json::nlohmann_json
|
nlohmann_json::nlohmann_json
|
||||||
)
|
)
|
||||||
|
|
||||||
|
###############################
|
||||||
|
|
||||||
|
add_library(filesystem_soloud_file
|
||||||
|
./src/mm/soloud_filesystem_file_impl.hpp
|
||||||
|
./src/mm/soloud_filesystem_file_impl.cpp
|
||||||
|
|
||||||
|
./src/mm/sound_loader_wav.hpp
|
||||||
|
./src/mm/sound_loader_wav.cpp
|
||||||
|
./src/mm/sound_loader_sfxr.hpp
|
||||||
|
./src/mm/sound_loader_sfxr.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(filesystem_soloud_file
|
||||||
|
filesystem_service
|
||||||
|
soloud
|
||||||
|
soloud_json
|
||||||
|
)
|
||||||
|
|
||||||
if (BUILD_TESTING)
|
if (BUILD_TESTING)
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
endif()
|
endif()
|
||||||
|
38
framework/sound/src/mm/sound_loader_sfxr.cpp
Normal file
38
framework/sound/src/mm/sound_loader_sfxr.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include "./sound_loader_sfxr.hpp"
|
||||||
|
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
#include "./soloud_json.hpp"
|
||||||
|
|
||||||
|
#include <mm/services/filesystem.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
namespace MM {
|
||||||
|
|
||||||
|
std::shared_ptr<::SoLoud::Sfxr> SoundLoaderSfxrPreset::load(const ::SoLoud::Sfxr::SFXR_PRESETS preset, const int seed) const {
|
||||||
|
auto sfxr = std::make_shared<::SoLoud::Sfxr>();
|
||||||
|
sfxr->loadPreset(preset, seed);
|
||||||
|
return sfxr;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<::SoLoud::Sfxr> SoundLoaderSfxrJson::load(const nlohmann::json& j) const {
|
||||||
|
auto sfxr = std::make_shared<::SoLoud::Sfxr>();
|
||||||
|
*sfxr = j;
|
||||||
|
return sfxr;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<::SoLoud::Sfxr> SoundLoaderSfxrFile::load(const std::string& path, MM::Engine& engine) const {
|
||||||
|
auto& fs = engine.getService<MM::Services::FilesystemService>();
|
||||||
|
|
||||||
|
if (!fs.isFile(path.c_str())) {
|
||||||
|
// TODO: log error
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto j = fs.readJson(path.c_str());
|
||||||
|
|
||||||
|
return SoundLoaderSfxrJson{}.load(j);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // MM
|
||||||
|
|
28
framework/sound/src/mm/sound_loader_sfxr.hpp
Normal file
28
framework/sound/src/mm/sound_loader_sfxr.hpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <soloud_sfxr.h>
|
||||||
|
|
||||||
|
#include <nlohmann/json_fwd.hpp>
|
||||||
|
|
||||||
|
namespace MM {
|
||||||
|
|
||||||
|
// fwd
|
||||||
|
class Engine;
|
||||||
|
|
||||||
|
struct SoundLoaderSfxrPreset {
|
||||||
|
std::shared_ptr<::SoLoud::Sfxr> load(const ::SoLoud::Sfxr::SFXR_PRESETS preset, const int seed) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SoundLoaderSfxrJson {
|
||||||
|
std::shared_ptr<::SoLoud::Sfxr> load(const nlohmann::json& j) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SoundLoaderSfxrFile {
|
||||||
|
std::shared_ptr<::SoLoud::Sfxr> load(const std::string& path, MM::Engine& engine) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // MM
|
||||||
|
|
@ -9,8 +9,10 @@ namespace MM {
|
|||||||
std::shared_ptr<::SoLoud::Wav> SoundLoaderWavFile::load(const std::string& path, Engine& engine) const {
|
std::shared_ptr<::SoLoud::Wav> SoundLoaderWavFile::load(const std::string& path, Engine& engine) const {
|
||||||
auto& fs = engine.getService<Services::FilesystemService>();
|
auto& fs = engine.getService<Services::FilesystemService>();
|
||||||
|
|
||||||
if (!fs.isFile(path.c_str()))
|
if (!fs.isFile(path.c_str())) {
|
||||||
|
// TODO: log error
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
auto h = fs.open(path.c_str());
|
auto h = fs.open(path.c_str());
|
||||||
|
|
||||||
@ -19,7 +21,7 @@ std::shared_ptr<::SoLoud::Wav> SoundLoaderWavFile::load(const std::string& path,
|
|||||||
auto ptr = std::make_shared<::SoLoud::Wav>();
|
auto ptr = std::make_shared<::SoLoud::Wav>();
|
||||||
auto r = ptr->loadFile(&sl_f);
|
auto r = ptr->loadFile(&sl_f);
|
||||||
if (r != ::SoLoud::SO_NO_ERROR) {
|
if (r != ::SoLoud::SO_NO_ERROR) {
|
||||||
// log error
|
// TODO: log error
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,9 +5,11 @@
|
|||||||
#include <physfs.h>
|
#include <physfs.h>
|
||||||
#include <mm/soloud_filesystem_file_impl.hpp>
|
#include <mm/soloud_filesystem_file_impl.hpp>
|
||||||
#include <mm/sound_loader_wav.hpp>
|
#include <mm/sound_loader_wav.hpp>
|
||||||
|
#include <mm/sound_loader_sfxr.hpp>
|
||||||
|
|
||||||
#include <mm/resource_manager.hpp>
|
#include <mm/resource_manager.hpp>
|
||||||
|
|
||||||
|
#include <soloud_sfxr.h>
|
||||||
#include <soloud_wav.h>
|
#include <soloud_wav.h>
|
||||||
#include <soloud_wavstream.h>
|
#include <soloud_wavstream.h>
|
||||||
#include <soloud_monotone.h>
|
#include <soloud_monotone.h>
|
||||||
@ -21,7 +23,7 @@ using namespace entt::literals;
|
|||||||
|
|
||||||
extern char* argv0;
|
extern char* argv0;
|
||||||
|
|
||||||
TEST(soloud_fs_loader, basic) {
|
TEST(soloud_fs_loader, wav) {
|
||||||
MM::Engine engine;
|
MM::Engine engine;
|
||||||
|
|
||||||
// setup
|
// setup
|
||||||
@ -59,3 +61,38 @@ TEST(soloud_fs_loader, basic) {
|
|||||||
rm.clear();
|
rm.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(soloud_fs_loader, sfxr) {
|
||||||
|
MM::Engine engine;
|
||||||
|
|
||||||
|
// setup
|
||||||
|
auto& sound = engine.addService<MM::Services::SoundService>();
|
||||||
|
ASSERT_TRUE(engine.enableService<MM::Services::SoundService>());
|
||||||
|
|
||||||
|
engine.addService<MM::Services::FilesystemService>(argv0, "soloud_filesystem_loader_test");
|
||||||
|
ASSERT_TRUE(engine.enableService<MM::Services::FilesystemService>());
|
||||||
|
|
||||||
|
auto& rm = MM::ResourceManager<SoLoud::Sfxr>::ref();
|
||||||
|
|
||||||
|
sound.engine.setGlobalVolume(0.4f);
|
||||||
|
|
||||||
|
ASSERT_FALSE(rm.contains("test_preset"_hs));
|
||||||
|
rm.load<MM::SoundLoaderSfxrPreset>("test_preset", ::SoLoud::Sfxr::SFXR_PRESETS::EXPLOSION, 0);
|
||||||
|
ASSERT_TRUE(rm.contains("test_preset"_hs));
|
||||||
|
|
||||||
|
// TODO: add load from json
|
||||||
|
// TODO: add load from json from file
|
||||||
|
|
||||||
|
{
|
||||||
|
auto sh = rm.get("test_preset"_hs);
|
||||||
|
|
||||||
|
sound.engine.play(*sh);
|
||||||
|
|
||||||
|
while (sound.engine.getActiveVoiceCount()) {
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
std::this_thread::sleep_for(5ms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rm.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user