コード例 #1
0
        public void TestTempo()
        {
            double           tempo   = 100;
            TempoMetaMessage message = new TempoMetaMessage(tempo, 0);

            int  microsecondsPerBeat = (int)(60 * 1e6 / tempo);
            byte data1 = (byte)(microsecondsPerBeat / 0x10000);
            byte data2 = (byte)((microsecondsPerBeat % 0x10000) / 0x100);
            byte data3 = (byte)(microsecondsPerBeat % 0x100);

            MetaMessage bytes    = message.MetaMessage;
            MetaMessage expected = new MetaMessage
            {
                MetaType  = 0x51,
                Data      = new byte[] { data1, data2, data3 },
                TimeDelta = 0
            };

            Assert.Equal(expected, bytes);
        }
コード例 #2
0
        public IMessage getMessage(MetaEvent metaEvent)
        {
            switch (metaEvent.MetaEventType)
            {
            case SetTempo:
                TempoEvent       tempoEvent = (TempoEvent)metaEvent;
                TempoMetaMessage message    = TempoMetaMessage(tempoEvent.Tempo, tempoEvent.AbsoluteTime);
                return(message);

            case TimeSignature:
                TimeSignatureEvent       timeSignatureEvent = (TimeSignatureEvent)metaEvent;
                TimeSignatureMetaMessage message            = TimeSignatureMetaMessage(timeSignatureEvent.Numerator, timeSignatureEvent.Numerator, timeSignatureEvent.AbsoluteTime);
                return(message);

            case KeySignature:
                KeySignatureEvent        keySignatureEvent = (KeySignatureEvent)metaEvent;
                TimeSignatureMetaMessage message           = TimeSignatureMetaMessage((sbyte)keySignatureEvent.SharpsFlats, (byte)keySignatureEvent.MajorMinor, timeSignatureEvent.AbsoluteTime);
                return(message);

            default:
                return(null);    // TODO remaining MetaMessage types
            }
        }