Shipwright/soh/soh/Enhancements/audio/AudioCollection.h

69 lines
2.2 KiB
C++

#ifdef __cplusplus
#include <map>
#include <string>
#include <set>
enum SeqType {
SEQ_NOSHUFFLE = 0,
SEQ_BGM_WORLD = 1 << 0,
SEQ_BGM_EVENT = 1 << 1,
SEQ_BGM_BATTLE = 1 << 2,
SEQ_OCARINA = 1 << 3,
SEQ_FANFARE = 1 << 4,
SEQ_BGM_ERROR = 1 << 5,
SEQ_SFX = 1 << 6,
SEQ_INSTRUMENT = 1 << 7,
SEQ_BGM_CUSTOM = SEQ_BGM_WORLD | SEQ_BGM_EVENT | SEQ_BGM_BATTLE,
};
#define INSTRUMENT_OFFSET 0x81
struct SequenceInfo {
uint16_t sequenceId;
std::string label;
std::string sfxKey;
SeqType category;
};
class AudioCollection {
private:
// All Loaded Audio
std::map<uint16_t, SequenceInfo> sequenceMap;
// Sequences/SFX to include in/exclude from shuffle pool
struct compareSequenceLabel {
bool operator() (SequenceInfo* a, SequenceInfo* b) const {
return a->label < b->label;
};
};
std::set<SequenceInfo*, compareSequenceLabel> includedSequences;
std::set<SequenceInfo*, compareSequenceLabel> excludedSequences;
bool shufflePoolInitialized = false;
public:
static AudioCollection* Instance;
AudioCollection();
std::map<uint16_t, SequenceInfo> GetAllSequences() const {
return sequenceMap;
}
std::set<SequenceInfo*, compareSequenceLabel> GetIncludedSequences() const {
return includedSequences;
};
std::set<SequenceInfo*, compareSequenceLabel> GetExcludedSequences() const {
return excludedSequences;
};
void AddToShufflePool(SequenceInfo*);
void RemoveFromShufflePool(SequenceInfo*);
void AddToCollection(char* otrPath, uint16_t seqNum);
uint16_t GetReplacementSequence(uint16_t seqId);
void InitializeShufflePool();
const char* GetSequenceName(uint16_t seqId);
bool HasSequenceNum(uint16_t seqId);
size_t SequenceMapSize();
};
#else
void AudioCollection_AddToCollection(char *otrPath, uint16_t seqNum);
const char* AudioCollection_GetSequenceName(uint16_t seqId);
bool AudioCollection_HasSequenceNum(uint16_t seqId);
size_t AudioCollection_SequenceMapSize();
#endif