metaforce/Runtime/Audio/CMidiManager.hpp

59 lines
2.0 KiB
C++
Raw Permalink Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2017-02-18 02:19:50 +00:00
#include <memory>
#include "Runtime/Audio/CSfxManager.hpp"
2021-04-10 08:42:06 +00:00
namespace metaforce {
2017-02-18 02:19:50 +00:00
2018-12-08 05:30:43 +00:00
class CMidiManager {
2017-02-18 02:19:50 +00:00
public:
2018-12-08 05:30:43 +00:00
class CMidiData {
u16 x0_setupId;
u16 x2_groupId;
CAssetId x4_agscId;
std::unique_ptr<u8[]> x8_arrData;
public:
u16 GetSetupId() const { return x0_setupId; }
u16 GetGroupId() const { return x2_groupId; }
CAssetId GetAGSCAssetId() const { return x4_agscId; }
const u8* GetArrData() const { return x8_arrData.get(); }
explicit CMidiData(CInputStream& in);
2018-12-08 05:30:43 +00:00
};
class CMidiWrapper {
amuse::ObjToken<amuse::Sequencer> x0_sequencer;
// CSfxHandle x4_handle;
u16 x8_songId;
bool xa_available = true;
public:
amuse::ObjToken<amuse::Sequencer> GetAudioSysHandle() const { return x0_sequencer; }
void SetAudioSysHandle(amuse::ObjToken<amuse::Sequencer> sequencer) { x0_sequencer = std::move(sequencer); }
2018-12-08 05:30:43 +00:00
// const CSfxHandle& GetManagerHandle() const { return x4_handle; }
// void SetMidiHandle(const CSfxHandle& handle) { x4_handle = handle; }
bool IsAvailable() const { return xa_available; }
void SetAvailable(bool available) { xa_available = available; }
u16 GetSongId() const { return x8_songId; }
void SetSongId(u16 songId) { x8_songId = songId; }
};
using CMidiHandle = std::shared_ptr<CMidiWrapper>;
static void StopAll();
static void Stop(const CMidiHandle& handle, float fadeTime);
static std::unordered_set<CMidiHandle>::iterator Stop(std::unordered_set<CMidiHandle>::iterator handle,
float fadeTime);
static CMidiHandle Play(const CMidiData& data, float fadeTime, bool stopExisting, float volume);
private:
2018-12-08 05:30:43 +00:00
static std::unordered_set<CMidiHandle> m_MidiWrappers;
2017-02-18 02:19:50 +00:00
};
2018-12-08 05:30:43 +00:00
CFactoryFnReturn FMidiDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& parms,
CObjectReference* selfRef);
using CMidiHandle = CMidiManager::CMidiHandle;
2021-04-10 08:42:06 +00:00
} // namespace metaforce