コード例 #1
0
        byte[] GetSystemEventValue(int running, int offset, int plus)
        {
            List <byte> returned = new List <byte> {
                (byte)(running & 0xff)
            };
            int ExpandedRSE = running == 0xFF7F ? running : running << 8;
            int delta       = GetNextRsePosition(offset + plus);

            if (delta == -1 && running != 0xFF7F)
            {
                Debug.Assert(false, "Unknown Message!");
            }
            else if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                returned.Clear();
                returned.AddRange(SmfFileHandle[selectedTrackNumber, offset, 1]);
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, SmfFileHandle[SelectedTrackNumber, offset + plus] + 1]);
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                returned.Clear();
                returned.AddRange(SmfFileHandle[selectedTrackNumber, offset, 2]);
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, SmfFileHandle[SelectedTrackNumber, offset + plus] + 1]);
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }

            byte[] bytes = returned.ToArray();
            return(bytes);
        }
コード例 #2
0
        byte[] GetEventValue(int offset, int plus)
        {
            List <byte> returned = new List <byte> {
                (byte)(RunningStatus32 & 0xff)
            };
            int ExpandedRSE = RunningStatus32 << 8;
            int delta       = GetNextRsePosition(offset + plus);

            if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                returned.Clear();
                returned.AddRange(SmfFileHandle[selectedTrackNumber, offset, 1]);
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, SmfFileHandle[SelectedTrackNumber, offset + plus] + 1]);
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                returned.Clear();
                returned.AddRange(SmfFileHandle[selectedTrackNumber, offset, 2]);
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, SmfFileHandle[SelectedTrackNumber, offset + plus] + 1]);
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                returned.AddRange(SmfFileHandle[SelectedTrackNumber, offset + plus, 2]);
            }
            else if (delta == -1)
            {
                Debug.Assert(false, string.Format("warning… {0:X2}", ExpandedRSE));
            }
            byte[] bytes = returned.ToArray();
            return(bytes);
        }
コード例 #3
0
        /// <summary>
        /// Next Position (rse)
        /// </summary>
        int Increment(int offset, int plus)
        {
            int ExpandedRSE = RunningStatus32 << 8;

            if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            else if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                return(offset + plus);
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                return(offset + plus);
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                Debug.Print(
                    "SSX {1:X} :: {2:X} :: {0:X2}",
                    SmfFileHandle[SelectedTrackNumber, offset + plus + SmfFileHandle[SelectedTrackNumber, offset + plus]],
                    ExpandedRSE,
                    RunningStatus32
                    );
                return(offset + plus + SmfFileHandle[SelectedTrackNumber, offset + plus]);
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                return(offset + plus + SmfFileHandle[SelectedTrackNumber, offset + plus]);
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                return(offset + plus);
            }
            else if (!MidiMessageInfo.IsMidiBMessage(RunningStatus32))
            {
                /*Debug.Assert(false, string.Format("warning… {0:X2}", ExpandedRSE) )*/
                return(-1);
            }
            return(-1);
        }
コード例 #4
0
        int GetEventLength(int offset, int plus)
        {
            int ExpandedRSE = RunningStatus32 << 8;
            int delta       = GetNextRsePosition(offset + plus);

            if (delta == -1)
            {
                Debug.Assert(false, string.Format("warning… {0:X2}", ExpandedRSE));
            }
            else if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                return(2);
            }
            else if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                return(2);
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                return(2);
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                return(2);
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                return(2);
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                return(2);
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                // this may never occur here and should in the Meta part
                return(2);
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                return(GetMetaLen(offset, plus));
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                return(GetMetaLen(offset, plus));
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                return(GetMetaLen(offset, plus));
            }
            return(-1);
        }
コード例 #5
0
        //
        // Color Helper (For WinForms)
        // ---------------------------------
        #region Event Color

        /// <inheritdoc />
        public Color GetRseEventColor(Color clr)
        {
            int ExpandedRSE = RunningStatus32 << 8;

            if (!MidiMessageInfo.IsMidiBMessage(RunningStatus32))
            {
                Debug.Assert(false, string.Format("warning… {0:X2}", ExpandedRSE));
                return(clr);
            }
            else if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse2"]);
            }
            else if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse2"]);
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse2"]);
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                return(MetaHelpers.Colors["rse3"]);
            }
            return(ListView.DefaultBackColor);
        }
コード例 #6
0
        string GetEventString(int offset, int plus)
        {
            int ExpandedRSE = RunningStatus32 << 8;

            if (!MidiMessageInfo.IsMidiBMessage(RunningStatus32))
            {
                Debug.Assert(false, string.Format("warning… {0:X2}", ExpandedRSE));
                return(null);
            }
            else if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                return(GetNoteMsg(0, offset + plus, m9));
            }
            else if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                return(GetNoteMsg(0, offset + plus, m8));
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                return(string.Format(mA, SmfFileHandle[SelectedTrackNumber, offset + plus], SmfFileHandle[SelectedTrackNumber, offset + plus + 1]));
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                return(string.Format(mB, SmfStringFormatter.cc[SmfFileHandle.Get8Bit(SelectedTrackNumber, offset + plus)].Replace((char)0xa, (char)0x20).Trim(), SmfFileHandle.Get8Bit(SelectedTrackNumber, offset + plus + 1)));
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                return(SmfStringFormatter.patches[SmfFileHandle[SelectedTrackNumber, offset + plus]].Replace((char)0xa, (char)0x20).Trim());
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                return(MidiMessageInfo.ChannelAftertouchRange.Name);
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                return(MidiMessageInfo.PitchBendRange.Name);
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                return(MidiMessageInfo.SystemExclusiveMessageRange.Name);
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                return(MidiMessageInfo.SystemCommonMessageRange.Name);
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                return(MidiMessageInfo.SystemRealtimeMessageRange.Name);
            }
            return(null);
        }
コード例 #7
0
        string GetEventValueString(int offset, int plus)
        {
            int ExpandedRSE = RunningStatus32 << 8;
            int delta       = GetNextRsePosition(offset + plus);

            if (delta == -1)
            {
                Debug.Assert(false, string.Format("warning… {0:X2}", ExpandedRSE));
            }
            else if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 2]).StringifyHex());
            }
            else if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, SmfFileHandle[SelectedTrackNumber, offset + plus] + 1]).StringifyHex());
            }
            else if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, SmfFileHandle[SelectedTrackNumber, offset + plus] + 1]).StringifyHex());
            }
            else if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                return((SmfFileHandle[SelectedTrackNumber, offset + plus, 4]).StringifyHex());
            }
            return(null);
        }
コード例 #8
0
        /// <summary>Next Position (rse)</summary>
        int Increment(int offset, int plus)
        {
            int ExpandedRSE = RunningStatus32 << 8;

            if (MidiMessageInfo.IsNoteOff(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            if (MidiMessageInfo.IsNoteOn(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            if (MidiMessageInfo.IsKeyAftertouch(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            if (MidiMessageInfo.IsControlChange(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            if (MidiMessageInfo.IsProgramChange(ExpandedRSE))
            {
                return(offset + plus);
            }
            if (MidiMessageInfo.IsChannelAftertouch(ExpandedRSE))
            {
                return(offset + plus);
            }
            if (MidiMessageInfo.IsPitchBend(ExpandedRSE))
            {
                return(offset + plus + 1);
            }
            if (MidiMessageInfo.IsSystemMessage(ExpandedRSE))
            {
                return(offset + plus + SmfFileHandle[SelectedTrackNumber, offset + plus]);
            }
            if (MidiMessageInfo.IsSystemCommon(ExpandedRSE))
            {
                return(offset + plus + SmfFileHandle[SelectedTrackNumber, offset + plus]);
            }
            if (MidiMessageInfo.IsSystemRealtime(ExpandedRSE))
            {
                return(offset + plus);
            }
            if (!MidiMessageInfo.IsMidiBMessage(RunningStatus32))
            {
                return(-1);
            }
            return(-1);
        }