Beispiel #1
0
        private void OnDataSeqFrq(long SeqCounter)
        {
            //throw new NotImplementedException();
            if (mv == null)
            {
                return;
            }
            if (mv.desVGM == null)
            {
                return;
            }
            if (mv.desVGM.dat == null)
            {
                return;
            }

            if ((Audio.sm.Mode & SendMode.MML) != SendMode.MML)
            {
                if (rtMML != null)
                {
                    rtMML.OneFrameSeq();
                }
            }

            if (mv.desVGM.dat.Count == 0)
            {
                return;
            }
            eChip = Audio.GetChip(EnmChip.YM2612);
            if (eChip == null)
            {
                return;
            }


            Enq             enq = SoundManager.GetDriverDataEnqueue();
            List <outDatum> dat = mv.desVGM.dat;

            lock (lockObject)
            {
                int badr = 0;
                while (badr < dat.Count)
                {
                    outDatum od = dat[badr];
                    if (od == null)
                    {
                        badr++;
                        continue;
                    }

                    byte val = od.val;
                    switch (val)
                    {
                    case 0x52:
                        byte adr = dat[badr + 1].val;
                        byte prm = dat[badr + 2].val;
                        enq(dat[badr], SeqCounter, eChip, EnmDataType.Normal, adr, prm, null);
                        //enq(dat[badr], 0, eChip, EnmDataType.Normal, adr, prm, null);
                        if (adr == 0x28 && dat[badr].type == enmMMLType.Note && dat[badr].args != null && dat[badr].args.Count > 1)
                        {
                            log.Write(string.Format("noteLog: note:{0} counter:{1}", (int)dat[badr].args[1], SeqCounter));
                            if (recMode != 0)
                            {
                                if ((int)dat[badr].args[1] >= 0)
                                {
                                    NoteON(SeqCounter, (int)dat[badr].args[1]);
                                }
                                else
                                {
                                    NoteOFF(SeqCounter, (int)dat[badr].args[1]);
                                }
                            }
                        }
                        badr += 2;
                        break;
                    }
                    badr++;
                }
                dat.Clear();
            }
        }
Beispiel #2
0
        private void OnDataSeqFrq(long SeqCounter)
        {
            //throw new NotImplementedException();
            if (mv == null)
            {
                return;
            }
            if (mv.desVGM == null)
            {
                return;
            }
            if (mv.desVGM.dat == null)
            {
                return;
            }

            if ((Audio.sm.Mode & SendMode.MML) != SendMode.MML)
            {
                if (rtMML != null)
                {
                    rtMML.OneFrameSeq();
                }
            }

            if (mv.desVGM.dat.Count == 0)
            {
                return;
            }
            eChip = Audio.GetChip(EnmChip.YM2608);
            if (eChip == null)
            {
                return;
            }


            Enq             enq = SoundManager.GetDriverDataEnqueue();
            List <outDatum> dat = mv.desVGM.ym2608[0].lstPartWork[0].pg[0].sendData;// mv.desVGM.dat;

            lock (lockObject)
            {
                while (0 < dat.Count)
                {
                    outDatum od = dat[0];
                    if (od == null)
                    {
                        dat.RemoveAt(0);
                        continue;
                    }

                    byte val = od.val;
                    byte adr;
                    byte prm;
                    switch (val)
                    {
                    case 0x52:
                        adr = dat[1].val;
                        prm = dat[2].val;
                        enq(dat[0], SeqCounter, eChip, EnmDataType.Normal, adr, prm, null);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        break;

                    case 0x56:
                        if (2 >= dat.Count)
                        {
                            return;
                        }
                        adr = dat[1].val;
                        prm = dat[2].val;
                        enq(dat[0], 0, eChip, EnmDataType.Force, adr, prm, null);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        break;

                    default:
                        dat.RemoveAt(0);
                        break;
                    }
                }
            }
        }