Torch
Loading...
Searching...
No Matches
OoTAudioFontWriter.h
1#pragma once
2
3#include "OoTAudioTypes.h"
4
5namespace OoT {
6
7struct DrumEntry {
8 uint8_t releaseRate, pan, loaded;
9 float tuning;
10 std::vector<std::pair<int16_t, int16_t>> env;
11 std::string sampleRef;
12};
13
14struct InstEntry {
15 bool isValid;
16 uint8_t loaded, normalRangeLo, normalRangeHi, releaseRate;
17 std::vector<std::pair<int16_t, int16_t>> env;
18 uint32_t lowAddr, normalAddr, highAddr;
19};
20
21// Cross-font stack residue. ZAPDTR reuses the same stack frame across fonts,
22// so invalid instruments inherit field values from the previous font's last
23// valid instrument. See docs/oot-audio-font-residue-analysis.md
25public:
26 void Reset();
27 void SeedFromDrums(const std::vector<DrumEntry>& drums);
28 void ApplyToInstrument(InstEntry& inst) const;
29 void UpdateFromInstrument(const InstEntry& inst);
30private:
31 uint8_t mLoaded = 0, mRangeLo = 0, mRangeHi = 0, mRelease = 0;
32};
33
34struct SFXEntry {
35 bool exists;
36 std::string sampleRef;
37 float tuning;
38};
39
41 SafeAudioBankReader& audioBank;
42 const std::vector<AudioTableEntry>& sampleBankTable;
43 std::map<uint32_t, SampleInfo>& sampleMap;
44};
45
47public:
48 void Extract(YAML::Node& node,
49 SafeAudioBankReader& audioBank,
50 const std::vector<AudioTableEntry>& fontTable,
51 const std::vector<AudioTableEntry>& sampleBankTable,
52 std::map<uint32_t, SampleInfo>& sampleMap);
53
54private:
55 std::string GetSampleRef(int bankIndex, uint32_t sampleAddr, uint32_t baseOffset, FontWriteContext& ctx);
56 std::vector<std::pair<int16_t, int16_t>> ParseEnvelope(uint32_t envOffset, FontWriteContext& ctx);
57 void WriteSFE(LUS::BinaryWriter& w, uint32_t sfeOffset, uint32_t baseOffset,
58 int bankIndex, FontWriteContext& ctx);
59 void WriteFontCompanion(uint32_t fontIndex, const AudioTableEntry& fontEntry,
60 const std::vector<DrumEntry>& drums,
61 const std::vector<InstEntry>& instruments,
62 const std::vector<SFXEntry>& sfxEntries,
63 uint32_t ptr, int sampleBankId,
65 const std::map<int, std::string>& fontNames);
66 void WriteDrums(LUS::BinaryWriter& w, const std::vector<DrumEntry>& drums);
67 void WriteInstruments(LUS::BinaryWriter& w, const std::vector<InstEntry>& instruments,
68 uint32_t ptr, int sampleBankId, FontWriteContext& ctx);
69 void WriteSFXEntries(LUS::BinaryWriter& w, const std::vector<SFXEntry>& sfxEntries);
70 void WriteEnvData(LUS::BinaryWriter& w, const std::vector<std::pair<int16_t, int16_t>>& envs);
71 std::vector<InstEntry> ParseInstruments(int numInstruments, uint32_t ptr, FontWriteContext& ctx);
72 std::vector<SFXEntry> ParseSFX(int numSfx, uint32_t ptr, int sampleBankId, FontWriteContext& ctx);
73 std::vector<DrumEntry> ParseDrums(int numDrums, uint32_t ptr, int sampleBankId, FontWriteContext& ctx);
74
75 FontResidue mResidue;
76};
77
78} // namespace OoT
Definition OoTAudioFontWriter.h:46
Definition OoTAudioFontWriter.h:24
Definition OoTAudioTypes.h:10
Definition OoTAudioTypes.h:25
Definition OoTAudioFontWriter.h:7
Definition OoTAudioFontWriter.h:40
Definition OoTAudioFontWriter.h:14
Definition OoTAudioFontWriter.h:34