예제 #1
0
        private Int32 amplitude_lfo_step(_lfo_t lfo)
        {
            Int32 p;

            lfo.phase += (UInt16)lfo.phase_step;
            p          = lfo.table[(lfo.phase >> LFO_SHIFT) & 0xff];
            p          = lfo.scale[p];
            return(p << (TL_SHIFT - LFO_SHIFT));
        }
예제 #2
0
        private void lfo_compute_step(_MultiPCM ptChip, _lfo_t lfo, UInt32 lfo_frequency, UInt32 lfo_scale, Int32 amplitude_lfo)
        {
            float step = (float)(LFO_FREQ[lfo_frequency] * 256.0f / (float)ptChip.rate);

            lfo.phase_step = (UInt32)((float)(1 << LFO_SHIFT) * step);
            if (amplitude_lfo != 0)
            {
                lfo.table = amplitude_table;
                lfo.scale = amplitude_scale_tables[lfo_scale];
            }
            else
            {
                lfo.table = pitch_table;
                lfo.scale = pitch_scale_tables[lfo_scale];
            }
        }