From e6aed50fe9adf505cdc2be435f51f053a11c1be1 Mon Sep 17 00:00:00 2001 From: Robert Bendun Date: Sat, 11 Jun 2022 19:00:36 +0200 Subject: [PATCH] Support for midi program change message --- src/interpreter.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/interpreter.cc b/src/interpreter.cc index 858da5f..f0a924d 100644 --- a/src/interpreter.cc +++ b/src/interpreter.cc @@ -432,6 +432,32 @@ Interpreter::Interpreter() unreachable(); }); + { + constexpr auto pgmchange = +[](Interpreter &i, std::vector args) -> Result { + using Program = Shape; + using Channel_Program = Shape; + + if (Program::typecheck(args)) { + auto [program] = Program::move_from(args); + i.midi_connection->send_program_change(0, program.as_int()); + return Value{}; + } + + if (Channel_Program::typecheck(args)) { + auto [chan, program] = Channel_Program::move_from(args); + i.midi_connection->send_program_change(chan.as_int(), program.as_int()); + return Value{}; + } + + unreachable(); + }; + + global.force_define("instrument", pgmchange); + global.force_define("pgmchange", pgmchange); + global.force_define("program_change", pgmchange); + } + + operators["+"] = plus_minus_operator>; operators["-"] = plus_minus_operator>; operators["*"] = binary_operator>;