示例#1
0
 public DataSender(
     Enq EmuEnq
     , Enq RealEnq
     , Deq ProcessingData
     , Deq SetMMLParameter
     , PackData[] startData
     , PackData[] stopData
     , DataSeqFrqEventHandler DataSeqFrqCallBack
     , Action WaitSync
     , long EmuDelay
     , long RealDelay
     , int BufferSize = DATA_SEQUENCE_FREQUENCE
     , int Frq        = DATA_SEQUENCE_FREQUENCE
     )
 {
     action                = Main;
     this.Frq              = Frq;
     ringBuffer            = new RingBuffer(BufferSize);
     ringBuffer.AutoExtend = false;
     this.ringBufferSize   = BufferSize;
     SeqCounter            = Def_SeqCounter;
     this.EmuEnq           = EmuEnq;
     this.RealEnq          = RealEnq;
     this.startData        = startData;
     this.stopData         = stopData;
     this.ProcessingData   = ProcessingData;
     this.SetMMLParameter  = SetMMLParameter;
     OnDataSeqFrq         += DataSeqFrqCallBack;
     this.WaitSync         = WaitSync;
     this.EmuDelay         = EmuDelay;
     this.RealDelay        = RealDelay;
 }
示例#2
0
        static void Main(string[] args)
        {
            Customer c = new Customer();

            Enq e = new Enq();

            List <Iy> lll = new List <Iy>();

            lll.Add(c);
        }
示例#3
0
 public DataSender(Enq EmuEnq, Enq RealEnq, Pack[] startData, Pack[] stopData, int BufferSize = DATA_SEQUENCE_FREQUENCE, int Frq = DATA_SEQUENCE_FREQUENCE)
 {
     action                = Main;
     this.Frq              = Frq;
     ringBuffer            = new RingBuffer(BufferSize);
     ringBuffer.AutoExtend = false;
     this.ringBufferSize   = BufferSize;
     SeqCounter            = Def_SeqCounter;
     this.EmuEnq           = EmuEnq;
     this.RealEnq          = RealEnq;
     this.startData        = startData;
     this.stopData         = stopData;
 }
示例#4
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();
            }
        }
示例#5
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;
                    }
                }
            }
        }
示例#6
0
        private void OnDataSeqFrq(long SeqCounter)
        {
            if (mv == null)
            {
                return;
            }
            if (mv.desVGM == null)
            {
                return;
            }

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

            //入力時に生じた、各チップ向けの送信データをコンパイラを使用して生成する。
            if (qMML.Count < 1)
            {
                return;
            }

            //生成したデータを取得
            mv.desVGM.dat.Clear();
            //音源への送信データキューへ追加
            Enq enq = SoundManager.GetDriverDataEnqueue();

            while (qMML.Count > 0)
            {
                KBDInfo kbdInfo = qMML.Dequeue();
                switch (kbdInfo.mml.type)
                {
                case enmMMLType.Octave:
                    kbdInfo.chip.CmdOctave(kbdInfo.pw.apg, kbdInfo.mml);
                    break;

                case enmMMLType.Note:
                    kbdInfo.chip.SetKeyOff(kbdInfo.pw.apg, kbdInfo.mml);
                    if ((int)kbdInfo.mml.args[1] >= 0)
                    {
                        kbdInfo.chip.CmdNote(kbdInfo.pw, kbdInfo.pw.apg, kbdInfo.mml);    //TODO:page制御やってない
                        kbdInfo.chip.MultiChannelCommand(kbdInfo.mml);
                    }
                    break;
                }

                List <outDatum> dat = kbdInfo.pw.apg.sendData;
                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:    //OPN2
                        adr = dat[1].val;
                        prm = dat[2].val;
                        enq(dat[0], SeqCounter, kbdInfo.eChip, EnmDataType.Force, adr, prm, null);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        break;

                    case 0x56:    //OPNA
                        adr = dat[1].val;
                        prm = dat[2].val;
                        enq(dat[0], 0, kbdInfo.eChip, EnmDataType.Force, adr, prm, null);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        break;

                    case 0x57:    //OPNA
                        adr = dat[1].val;
                        prm = dat[2].val;
                        enq(dat[0], 0, kbdInfo.eChip, EnmDataType.Force, adr | 0x100, prm, null);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        dat.RemoveAt(0);
                        break;

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