--- /dev/null
+
+#pragma once
+
+#include <string>
+
+#include <compiler/base.hpp>
+#include <ir/module.hpp>
+#include <midi/file.hpp>
+
+namespace YAMML
+{
+
+namespace IR2MIDI
+{
+
+class IR2MIDICompiler : public Compiler::CompilerBase
+{
+public:
+ bool Compile(const IR::Module& ir, const std::string& entryPoint);
+
+ MIDI::MIDIFile& GetMIDI();
+ const MIDI::MIDIFile& GetMIDI() const;
+
+private:
+ bool CompileTrackBlock(const IR::Module& ir, const std::string& trackBlock);
+
+ MIDI::MIDIFile m_MIDI;
+};
+
+} // namespace IR2MIDI
+
+} // namespace YAMML
--- /dev/null
+
+#include <exception>
+
+#include <exceptions/messageexception.hpp>
+#include <ir2midi/ir2midi.hpp>
+#include <message/message.hpp>
+
+namespace YAMML
+{
+
+namespace IR2MIDI
+{
+
+bool IR2MIDICompiler::Compile(const IR::Module& ir, const std::string& entryPoint)
+{
+ try
+ {
+ return CompileTrackBlock(ir, entryPoint);
+ }
+ catch (const Exceptions::MessageException& e)
+ {
+ AddMessage(e.Item);
+ return false;
+ }
+ catch (const std::exception& e)
+ {
+ AddMessage(
+ Message::MessageItem{
+ Message::MessageKind::FetalError,
+ Message::MessageID::UnknownInIR2MIDI,
+ ir.Name,
+ {0, 0},
+ {e.what()}
+ }
+ );
+
+ return false;
+ }
+}
+
+MIDI::MIDIFile& IR2MIDICompiler::GetMIDI()
+{
+ return m_MIDI;
+}
+
+const MIDI::MIDIFile& IR2MIDICompiler::GetMIDI() const
+{
+ return m_MIDI;
+}
+
+bool IR2MIDICompiler::CompileTrackBlock(const IR::Module& ir, const std::string& trackBlock)
+{
+ return false;
+}
+
+} // namespace IR2MIDI
+
+} // namespace YAMML