Torch
Loading...
Searching...
No Matches
MusicFactory.h
1#pragma once
2
3#include "factories/BaseFactory.h"
4#include "types/RawBuffer.h"
5
6#include <cstdint>
7#include <vector>
8
9namespace BK64 {
10
11constexpr uint32_t kDefaultMusicVolume = 32767;
12
13enum class MusicEventKind : uint8_t {
14 Midi = 0,
15 Tempo = 1,
16 LoopStart = 2,
17 LoopEnd = 3,
18 End = 4,
19};
20
21struct MusicEvent {
22 uint32_t delta = 0;
23 uint8_t kind = 0;
24 uint8_t status = 0;
25 uint8_t byte1 = 0;
26 uint8_t byte2 = 0;
27 uint32_t aux = 0;
28};
29
30struct MusicTrack {
31 uint32_t index = 0;
32 bool present = false;
33 std::vector<MusicEvent> events;
34};
35
36class MusicData : public RawBuffer {
37 public:
38 uint32_t mDivision = 0;
39 uint32_t mVolume = kDefaultMusicVolume;
40 std::vector<MusicTrack> mTracks;
41
42 explicit MusicData(std::vector<uint8_t> bytes) : RawBuffer(bytes) {
43 }
44};
45
47 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
48 YAML::Node& node, std::string* replacement) override;
49};
50
52 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName,
53 YAML::Node& node, std::string* replacement) override;
54};
55
56class MusicFactory : public BaseFactory {
57 public:
58 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
59 std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) override;
60 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
61 return { REGISTER(Binary, MusicBinaryExporter) REGISTER(Modding, MusicModdingExporter) };
62 }
63 bool SupportModdedAssets() override {
64 return true;
65 }
66};
67
68} // namespace BK64
Definition MusicFactory.h:46
Definition MusicFactory.h:56
Definition MusicFactory.h:51
Definition BaseFactory.h:96
Definition BaseFactory.h:102
Definition MusicFactory.h:21
Definition MusicFactory.h:30