Пример #1
0
        private void SetDelta(int ch, midiChip chip, long NewFrameCounter)
        {
            if (ch >= chip.oldFrameCounter.Length)
            {
                return;
            }

            long sub  = NewFrameCounter - chip.oldFrameCounter[ch];
            long step = (long)(sub / (double)Common.SampleRate * 960.0);

            chip.oldFrameCounter[ch] += (long)(step * (double)Common.SampleRate / 960.0);

            bool flg = true;

            for (int i = 0; i < 4; i++)
            {
                byte d = (byte)((step & (0x0fe00000 >> (7 * i))) >> (21 - 7 * i));
                if (flg && d == 0 && i < 3)
                {
                    continue;
                }
                flg = false;
                d  |= (byte)((i != 3) ? 0x80 : 0x00);
                chip.data[ch].Add(d);
            }
        }
Пример #2
0
        private void InitMIDIDevice()
        {
            midi                 = new midiChip();
            midi.maxTrk          = 16;
            midi.data            = new List <byte> [midi.maxTrk];
            midi.oldFrameCounter = new long[midi.maxTrk];

            for (int i = 0; i < midi.maxTrk; i++)
            {
                midi.data[i]            = new List <byte>();
                midi.oldFrameCounter[i] = -1L;
            }

            for (int i = 0; i < midi.maxTrk; i++)
            {
                midi.data[i].Add(0x4d); //チャンクタイプ'MTrk'
                midi.data[i].Add(0x54);
                midi.data[i].Add(0x72);
                midi.data[i].Add(0x6b);

                midi.data[i].Add(0x00); //データ長 この時点では不明のためとりあえず0
                midi.data[i].Add(0x00);
                midi.data[i].Add(0x00);
                midi.data[i].Add(0x00);

                midi.data[i].Add(0x00); //delta0
                midi.data[i].Add(0xff); // メタイベントポート指定
                midi.data[i].Add(0x21);
                midi.data[i].Add(0x01);
                midi.data[i].Add(0x00); //Port1

                midi.data[i].Add(0x00); //delta0
                midi.data[i].Add(0xff); // メタイベント トラック名
                midi.data[i].Add(0x03);
                midi.data[i].Add(0x00);
            }
        }