1#ifndef YAZE_ZELDA3_MUSIC_ASM_IMPORTER_H
2#define YAZE_ZELDA3_MUSIC_ASM_IMPORTER_H
5#include <unordered_map>
8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
58 absl::StatusOr<AsmParseResult>
ImportSong(
const std::string& asm_source,
79 std::unordered_map<std::string, std::vector<TrackEvent>>
subroutines;
101 absl::StatusOr<std::vector<TrackEvent>>
ParseMacro(
102 const std::string& macro_call,
ParseState& state,
106 absl::StatusOr<uint8_t>
ParseNoteName(
const std::string& note_name);
113 const std::string& macro_name);
117 const std::string& macro_name,
const std::vector<uint8_t>& params);
120 bool ParseMacroCall(
const std::string& call, std::string& macro_name,
121 std::vector<std::string>& params);
124 absl::StatusOr<uint8_t>
ParseHexValue(
const std::string& value);
127 static std::string
Trim(
const std::string& s);
234 {
"SetInstrument", 0xE0, 1},
236 {
"PanFade", 0xE2, 2},
237 {
"VibratoOn", 0xE3, 3},
238 {
"VibratoOff", 0xE4, 0},
239 {
"SetMasterVolume", 0xE5, 1},
240 {
"MasterVolumeFade", 0xE6, 2},
241 {
"SetTempo", 0xE7, 1},
242 {
"TempoFade", 0xE8, 2},
243 {
"GlobalTranspose", 0xE9, 1},
244 {
"ChannelTranspose", 0xEA, 1},
245 {
"TremoloOn", 0xEB, 3},
246 {
"TremoloOff", 0xEC, 0},
247 {
"SetChannelVolume", 0xED, 1},
248 {
"ChannelVolumeFade", 0xEE, 2},
249 {
"CallSubroutine", 0xEF, 3},
250 {
"VibratoFade", 0xF0, 1},
251 {
"PitchEnvelopeTo", 0xF1, 3},
252 {
"PitchEnvelopeFrom", 0xF2, 3},
253 {
"PitchEnvelopeOff", 0xF3, 0},
255 {
"EchoVBits", 0xF5, 1},
256 {
"EchoOff", 0xF6, 0},
257 {
"EchoParams", 0xF7, 3},
258 {
"EchoVolumeFade", 0xF8, 3},
259 {
"PitchSlide", 0xF9, 3},
260 {
"PercussionPatch", 0xFA, 1},
270 {
"Tympani", 0x02}, {
"Sawtooth", 0x04}, {
"Sine", 0x05},
271 {
"Strings", 0x09}, {
"Trombone", 0x0B}, {
"Cymbal", 0x0C},
272 {
"Ocarina", 0x0D}, {
"Harp", 0x0F}, {
"Splash", 0x10},
273 {
"Trumpet", 0x11}, {
"Horn", 0x12}, {
"Snare", 0x13},
274 {
"Choir", 0x15}, {
"Flute", 0x16}, {
"Piano", 0x18},
Imports music_macros.asm format files into MusicSong.
absl::StatusOr< AsmParseResult > ImportSong(const std::string &asm_source, const AsmImportOptions &options)
Import a song from ASM string.
bool ParseLabel(const std::string &line, ParseState &state)
absl::StatusOr< uint8_t > ParseDurationConstant(const std::string &duration)
bool ParseDirective(const std::string &line, ParseState &state)
absl::StatusOr< MusicCommand > ResolveCommandMacro(const std::string ¯o_name, const std::vector< uint8_t > ¶ms)
absl::Status ParseLine(const std::string &line, MusicSong &song, ParseState &state, const AsmImportOptions &options)
absl::StatusOr< uint8_t > ParseNoteName(const std::string ¬e_name)
static std::string Trim(const std::string &s)
absl::Status ParseDataBytes(const std::string &line, MusicSong &song, ParseState &state, const AsmImportOptions &options)
bool ParseMacroCall(const std::string &call, std::string ¯o_name, std::vector< std::string > ¶ms)
absl::StatusOr< uint8_t > ParseHexValue(const std::string &value)
absl::StatusOr< AsmParseResult > ImportFromFile(const std::string &path, const AsmImportOptions &options)
Import a song from a file.
absl::StatusOr< MusicCommand > ResolveInstrumentMacro(const std::string ¯o_name)
absl::StatusOr< std::vector< TrackEvent > > ParseMacro(const std::string ¯o_call, ParseState &state, const AsmImportOptions &options)
constexpr CommandMacroMapping kCommandMacros[]
constexpr NoteNameMapping kAsmNoteNames[]
constexpr InstrumentMacroMapping kInstrumentMacroImport[]
Options for ASM import from music_macros.asm format.
std::unordered_map< std::string, std::vector< TrackEvent > > subroutines
std::vector< std::string > errors
std::vector< std::string > warnings
std::unordered_map< std::string, int > label_to_channel
Parse result with diagnostics.
std::vector< std::string > errors
std::vector< std::string > warnings
A complete song composed of segments.