Torch
Loading...
Searching...
No Matches
SoundfontFactory.h
1#pragma once
2
3#include "factories/BaseFactory.h"
4#include "types/RawBuffer.h"
5
6#include <cstdint>
7#include <map>
8#include <string>
9#include <vector>
10
11namespace BK64 {
12
14 int32_t order = 0;
15 int32_t npredictors = 0;
16 std::vector<int16_t> book;
17};
18
20 uint32_t start = 0;
21 uint32_t end = 0;
22 uint32_t count = 0;
23 std::vector<int16_t> state;
24};
25
27 int32_t attackTime = 0;
28 int32_t decayTime = 0;
29 int32_t releaseTime = 0;
30 uint8_t attackVolume = 0;
31 uint8_t decayVolume = 0;
32};
33
35 uint8_t velocityMin = 0;
36 uint8_t velocityMax = 0;
37 uint8_t keyMin = 0;
38 uint8_t keyMax = 0;
39 uint8_t keyBase = 0;
40 int8_t detune = 0;
41};
42
44 uint32_t base = 0;
45 int32_t len = 0;
46 uint8_t type = 0;
47 uint8_t flags = 0;
48 uint32_t loopOffset = 0;
49 uint32_t bookOffset = 0;
50};
51
53 uint32_t envelopeOffset = 0;
54 uint32_t keyMapOffset = 0;
55 uint32_t waveOffset = 0;
56 uint8_t samplePan = 0;
57 uint8_t sampleVolume = 0;
58 uint8_t flags = 0;
59};
60
62 uint8_t volume = 0;
63 uint8_t pan = 0;
64 uint8_t priority = 0;
65 uint8_t flags = 0;
66 uint8_t tremType = 0;
67 uint8_t tremRate = 0;
68 uint8_t tremDepth = 0;
69 uint8_t tremDelay = 0;
70 uint8_t vibType = 0;
71 uint8_t vibRate = 0;
72 uint8_t vibDepth = 0;
73 uint8_t vibDelay = 0;
74 int16_t bendRange = 0;
75 std::vector<uint32_t> soundOffsets;
76};
77
79 uint8_t flags = 0;
80 uint8_t pad = 0;
81 int32_t sampleRate = 0;
82 uint32_t percussionOffset = 0;
83 std::vector<uint32_t> instrumentOffsets;
84};
85
87 std::vector<uint8_t> bytes;
88 std::vector<uint8_t> covered;
89};
90
91class SoundfontData : public RawBuffer {
92 public:
93 int16_t mRevision = 0;
94 std::vector<uint32_t> mBankOffsets;
95 std::map<uint32_t, SoundfontBank> mBanks;
96 std::map<uint32_t, SoundfontInstrument> mInstruments;
97 std::map<uint32_t, SoundfontSound> mSounds;
98 std::map<uint32_t, SoundfontEnvelope> mEnvelopes;
99 std::map<uint32_t, SoundfontKeyMap> mKeyMaps;
100 std::map<uint32_t, SoundfontWave> mWaves;
101 std::map<uint32_t, SoundfontBook> mBooks;
102 std::map<uint32_t, SoundfontLoop> mLoops;
103 std::vector<uint8_t> mSampleData;
104
105 explicit SoundfontData(std::vector<uint8_t> bytes) : RawBuffer(bytes) {
106 }
107
108 uint64_t SampleDataEnd() const;
109 SoundfontImage Serialize() const;
110 std::vector<uint8_t> SampleBytes(const SoundfontWave& wave) const;
111};
112
114 std::string yaml;
115 std::vector<uint8_t> raw;
116 std::vector<uint8_t> wav;
117};
118
119SoundfontData ParseSoundfont(const uint8_t* ctl, size_t ctlSize);
120
122 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
123 YAML::Node& node, std::string* replacement) override;
124};
125
127 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
128 YAML::Node& node, std::string* replacement) override;
129};
130
132 public:
133 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
134 std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) override;
135 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
136 return { REGISTER(Binary, SoundfontBinaryExporter) REGISTER(Modding, SoundfontModdingExporter) };
137 }
138 bool SupportModdedAssets() override {
139 return true;
140 }
141};
142
143uint32_t LocateSoundfontCtl(const std::vector<uint8_t>& rom, uint32_t ctlOffset, uint32_t ctlSize);
144
145} // namespace BK64
Definition SoundfontFactory.h:121
Definition SoundfontFactory.h:91
Definition SoundfontFactory.h:131
Definition SoundfontFactory.h:126
Definition BaseFactory.h:96
Definition BaseFactory.h:102
Definition SoundfontFactory.h:78
Definition SoundfontFactory.h:13
Definition SoundfontFactory.h:26
Definition SoundfontFactory.h:86
Definition SoundfontFactory.h:61
Definition SoundfontFactory.h:34
Definition SoundfontFactory.h:19
Definition SoundfontFactory.h:113
Definition SoundfontFactory.h:52
Definition SoundfontFactory.h:43