Esempio n. 1
0
        public void Mix(int[] buffer, int nsamples, byte regtc)
        {
            if (fmvolume <= 0)
            {
                return;
            }

            this.regtc = regtc;
            // 準備
            // Set F-Number
            if ((regtc & 0xc0) == 0)
            {
                csmch.SetFNum(fnum[2]);// csmch - ch]);
            }
            else
            {
                // 効果音モード
                csmch.op[0].SetFNum(fnum3[1]);
                csmch.op[1].SetFNum(fnum3[2]);
                csmch.op[2].SetFNum(fnum3[0]);
                csmch.op[3].SetFNum(fnum[2]);
            }

            int act = (((ch[2].Prepare() << 2) | ch[1].Prepare()) << 2) | ch[0].Prepare();

            if ((reg29 & 0x80) != 0)
            {
                act |= (ch[3].Prepare() | ((ch[4].Prepare() | (ch[5].Prepare() << 2)) << 2)) << 6;
            }
            if ((reg22 & 0x08) == 0)
            {
                act &= 0x555;
            }

            if ((act & 0x555) == 0)
            {
                return;
            }

            Mix6(buffer, nsamples, act);
        }