public MidiEventBase(MidiEventBase aMidiEvent)
 {
     delta = aMidiEvent.GetDelta();
     state = ( byte )(aMidiEvent.GetState() | aMidiEvent.GetChannel());
     data1 = aMidiEvent.GetData1();
     data2 = aMidiEvent.GetData2();
 }
Exemple #2
0
        public static MidiEventBase Execute(int aDelta, byte aState, AByteArray aByteArray)
        {
            MidiEventBase lMidiEvent = null;

            switch (aState & 0xF0)
            {
            case 0x80:
                lMidiEvent = new MidiEventNoteOff(aDelta, aState, aByteArray);
                break;

            case 0x90:
                MidiEventNoteOn lNoteOn = new MidiEventNoteOn(aDelta, aState, aByteArray);

                if (lNoteOn.GetVelocity() == 0)
                {
                    lMidiEvent = new MidiEventNoteOff(lNoteOn);
                }
                else
                {
                    lMidiEvent = lNoteOn;
                }

                break;

            case 0xA0:
                lMidiEvent = new MidiEventKeyPressure(aDelta, aState, aByteArray);
                break;

            case 0xB0:
                lMidiEvent = new MidiEventControlChange(aDelta, aState, aByteArray);
                break;

            case 0xC0:
                lMidiEvent = new MidiEventProgramChange(aDelta, aState, aByteArray);
                break;

            case 0xD0:
                lMidiEvent = new MidiEventChannelPressure(aDelta, aState, aByteArray);
                break;

            case 0xE0:
                lMidiEvent = new MidiEventPitchWheelChange(aDelta, aState, aByteArray);
                break;

            case 0xF0:
                lMidiEvent = new MidiEventSystemExclusive(aDelta, aState, aByteArray);
                break;

            default:
                // 未定義のイベントメッセージ.
                Logger.Error("Undefined Midi Event:" + aState);
                throw new Exception();
            }

            return(lMidiEvent);
        }
Exemple #3
0
        // トラックのイベントを読み込む.
        private void ReadTrack(AByteArray aByteArray)
        {
            int  lDelta    = 0;
            byte lStatePre = 0;

            int lPositionPre = aByteArray.Position;

            // トラック終了まで読み込む.
            while (aByteArray.Position < lPositionPre + size)
            {
                lDelta += GetVariableLengthByte(aByteArray);

                byte lState = aByteArray.ReadByte();

                // ランニングステータス対応.
                if (lState < 0x80)
                {
                    lState = lStatePre;
                    aByteArray.SubPosition(1);
                }

                lStatePre = lState;

                if (lState != 0xFF)
                {
                    // MIDIイベント読み込み.
                    MidiEventBase lMidiEvent = MidiEventReader.Execute(lDelta, lState, aByteArray);

                    midiEventList.Add(lMidiEvent);
                }
                else
                {
                    // メタイベント読み込み.
                    MetaEventBase lMetaEvent = MetaEventReader.Execute(lDelta, aByteArray);

                    metaEventList.Add(lMetaEvent);
                }
            }
        }
Exemple #4
0
 public MidiEventNoteOff(MidiEventBase aMidiEvent)
     : base(aMidiEvent)
 {
 }