Torch
Loading...
Searching...
No Matches
SoundFontFactory.h
1#pragma once
2
3#include <factories/BaseFactory.h>
4#include <unordered_set>
5
6namespace FZX {
7
8typedef struct TunedSample {
9 std::string sampleRef;
10 float tuning;
12
13typedef struct Drum {
14 uint8_t adsrDecayIndex;
15 uint8_t pan;
16 uint8_t isRelocated;
17 TunedSample tunedSample;
18 std::string envelopeRef;
19} Drum;
20
21typedef struct SoundEffect {
22 TunedSample tunedSample;
24
25typedef struct Instrument {
26 uint8_t isRelocated;
27 uint8_t normalRangeLo;
28 uint8_t normalRangeHi;
29 uint8_t adsrDecayIndex;
30 std::string envelopeRef;
31 TunedSample lowPitchTunedSample;
32 TunedSample normalPitchTunedSample;
33 TunedSample highPitchTunedSample;
35
36typedef struct EnvelopePoint {
37 int16_t delay;
38 int16_t arg;
40
41typedef struct Sample {
42 uint32_t codec;
43 uint32_t medium;
44 uint32_t unk_bit26;
45 uint32_t isRelocated;
46 uint32_t size;
47 uint32_t rawSampleOffset;
48 std::string loopRef;
49 std::string bookRef;
50} Sample;
51
52typedef struct AdpcmBook {
53 int32_t order;
54 int32_t numPredictors;
55 std::vector<int16_t> book;
56} AdpcmBook;
57
58typedef struct AdpcmLoop {
59 uint32_t start;
60 uint32_t end;
61 uint32_t count;
62 std::vector<int16_t> predictorState;
63} AdpcmLoop;
64
65enum class DataType {
66 Drum,
67 Sfx,
69 Envelope,
70 Sample,
71 Book,
72 Loop,
73 DrumOffsets,
74};
75
76typedef std::variant<Drum, std::vector<SoundEffect>, Instrument, std::vector<EnvelopePoint>, Sample, AdpcmBook, AdpcmLoop, std::vector<std::string>> SoundFontType;
77
78typedef struct SoundFontEntry {
79 std::string name;
80 DataType type;
81 SoundFontType data;
83
84class SoundFontData : public IParsedData {
85public:
86
87 std::vector<SoundFontEntry> mEntries;
88 bool mSupportSfx;
89
90 SoundFontData(std::vector<SoundFontEntry> entries, bool supportSfx) : mEntries(std::move(entries)), mSupportSfx(supportSfx) {}
91};
92
94 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
95};
96
98 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
99};
100
102 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
103};
104
106public:
107 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
108 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
109 return {
110 REGISTER(Code, SoundFontCodeExporter)
111 REGISTER(Header, SoundFontHeaderExporter)
112 REGISTER(Binary, SoundFontBinaryExporter)
113 };
114 }
115private:
116 std::string RegisterSoundFontData(std::string symbol, FZX::DataType dataType, uint32_t offset, std::map<uint32_t, std::pair<FZX::DataType, std::string>>& dataMap, std::unordered_map<FZX::DataType, uint32_t>& dataCountMap);
117};
118}
Definition BaseFactory.h:88
Definition BaseFactory.h:94
Definition SoundFontFactory.h:97
Definition SoundFontFactory.h:101
Definition SoundFontFactory.h:105
Definition SoundFontFactory.h:93
Definition BaseFactory.h:80
Definition AudioManager.h:41
Definition AudioManager.h:62
Definition SoundFontFactory.h:52
Definition SoundFontFactory.h:58
Definition SoundFontFactory.h:13
Definition SoundFontFactory.h:36
Definition SoundFontFactory.h:25
Definition SoundFontFactory.h:41
Definition SoundFontFactory.h:21
Definition SoundFontFactory.h:78
Definition SoundFontFactory.h:8
Definition AudioManager.h:28