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; }
static void Main(string[] args) { Customer c = new Customer(); Enq e = new Enq(); List <Iy> lll = new List <Iy>(); lll.Add(c); }
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; }
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(); } }
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; } } } }
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; } } } }