2022-05-19 16:54:36 -04:00
|
|
|
#include "musicbank.h"
|
2022-06-22 23:37:46 -04:00
|
|
|
|
2022-05-19 16:54:36 -04:00
|
|
|
#include "ame_handler.h"
|
|
|
|
#include "midi_handler.h"
|
2022-06-22 23:37:46 -04:00
|
|
|
|
2023-12-07 20:22:54 -05:00
|
|
|
#include "common/log/log.h"
|
2022-05-19 16:54:36 -04:00
|
|
|
|
|
|
|
namespace snd {
|
2022-12-02 18:08:44 -05:00
|
|
|
|
2023-12-07 20:22:54 -05:00
|
|
|
std::optional<std::unique_ptr<SoundHandler>> MusicBank::MakeHandler(VoiceManager& vm,
|
2022-12-30 23:15:43 -05:00
|
|
|
u32 sound_id,
|
|
|
|
s32 vol,
|
|
|
|
s32 pan,
|
|
|
|
s32 pm,
|
|
|
|
s32 pb) {
|
2023-12-07 20:22:54 -05:00
|
|
|
auto& sound = Sounds[sound_id];
|
2022-05-19 16:54:36 -04:00
|
|
|
|
2023-12-07 20:22:54 -05:00
|
|
|
// FIXME: global midi list
|
|
|
|
// search only local bank for now
|
|
|
|
// (always the case in jak games anyway)
|
|
|
|
|
|
|
|
if (sound.Type == 4) {
|
|
|
|
auto& midi = std::get<Midi>(MidiData);
|
|
|
|
if (sound.MIDIID == midi.ID) {
|
|
|
|
return std::make_unique<MidiHandler>(&midi, vm, sound, vol, pan, *this);
|
|
|
|
}
|
|
|
|
return std::nullopt;
|
|
|
|
} else if (sound.Type == 5) {
|
|
|
|
auto& midi = std::get<MultiMidi>(MidiData);
|
|
|
|
if (sound.MIDIID == midi.ID) {
|
|
|
|
return std::make_unique<AmeHandler>(&midi, vm, sound, vol, pan, *this);
|
|
|
|
}
|
|
|
|
return std::nullopt;
|
2022-05-19 16:54:36 -04:00
|
|
|
} else {
|
2022-12-30 23:15:43 -05:00
|
|
|
lg::error("Invalid music sound type");
|
|
|
|
return std::nullopt;
|
2022-05-19 16:54:36 -04:00
|
|
|
// error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-07 20:22:54 -05:00
|
|
|
std::optional<std::unique_ptr<SoundHandler>> MusicBank::MakeHandler(VoiceManager& vm,
|
2022-12-30 23:15:43 -05:00
|
|
|
u32 sound_id,
|
|
|
|
s32 vol,
|
|
|
|
s32 pan,
|
|
|
|
SndPlayParams& params) {
|
|
|
|
return std::nullopt;
|
2022-12-02 18:08:44 -05:00
|
|
|
}
|
|
|
|
|
2022-05-19 16:54:36 -04:00
|
|
|
} // namespace snd
|