/* godotVmcSharp Copyright (C) 2023 Cassandra de la Cruz-Munoz This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ using godotOscSharp; namespace godotVmcSharp { public class VmcExtMidiNote : VmcMessage { public readonly int Active; public readonly int Channel; public readonly int Note; public readonly float Velocity; public static VmcExtMidiNote CreateFromMessage(OscMessage m) { if (m.Data.Count < 4) { throw new MissingArgumentsException(m.Address, "{4}", m.Data.Count); } var active = m.Data[0].GetAsInt32(); if (active < 0 || active > 1) { throw new DataOutOfRangeException(m.Address, 0, "active", "{0, 1}", active); } return new VmcExtMidiNote(active, m.Data[1].GetAsInt32(), m.Data[2].GetAsInt32(), m.Data[3].GetAsFloat()); } public static VmcExtMidiNote CreateFromParams(int active, int channel, int note, float velocity) { if (active < 0 || active > 1) { throw new DataOutOfRangeException("/VMC/Ext/Midi/Note", 0, "active", "{0, 1}", active); } return new VmcExtMidiNote(active, channel, note, velocity); } private VmcExtMidiNote(int active, int channel, int note, float velocity) : base(new OscAddress("/VMC/Ext/Midi/Note")) { Active = active; Channel = channel; Note = note; Velocity = velocity; } public new OscMessage ToMessage() { return new OscMessage(Addr, new System.Collections.Generic.List{ OscArgument.CreateFromParams(Active, 'i')!, OscArgument.CreateFromParams(Channel, 'i')!, OscArgument.CreateFromParams(Note, 'i')!, OscArgument.CreateFromParams(Velocity, 'f')! }); } } }