root/lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscSine.as @ 27528

Revision 27528, 1.5 kB (checked in by tekisuke, 4 years ago)

lang/actionscript/flmml/: オシレータをswitchで分岐するのをやめ、サブクラスに分割。ファミコンノイズを追加。

Line 
1package com.txt_nifty.sketch.flmml {
2    import __AS3__.vec.Vector;
3
4    public class MOscSine extends MOscMod {
5        protected static var s_init:int = 0;
6        protected static var s_table:Vector.<Number> = new Vector.<Number>(TABLE_LEN, true);
7
8        public function MOscSine() {
9            boot();
10            super();
11        }
12        public static function boot():void {
13            if (s_init) return;
14            var d0:Number = 2.0 * Math.PI / TABLE_LEN;
15            var p0:Number;
16            var i:int;
17            for(i = 0, p0 = 0.0; i < TABLE_LEN; i++) {
18                s_table[i] = Math.sin(p0);
19                p0 += d0;
20            }
21            s_init = 1;
22        }
23        public override function getNextSample():Number {
24            var val:Number = s_table[m_phase >> PHASE_SFT];
25            m_phase = (m_phase + m_freqShift) & PHASE_MSK;
26            return val;
27        }
28        public override function getNextSampleOfs(ofs:int):Number {
29            var val:Number = s_table[((m_phase + ofs) & PHASE_MSK) >> PHASE_SFT];
30            m_phase = (m_phase + m_freqShift) & PHASE_MSK;
31            return val;
32        }
33        public override function getSamples(samples:Vector.<Number>, start:int, end:int):void {
34            var i:int;
35            for(i = start; i < end; i++) {
36                samples[i] = s_table[m_phase >> PHASE_SFT];
37                m_phase = (m_phase + m_freqShift) & PHASE_MSK;
38            }
39        }
40    }
41}
Note: See TracBrowser for help on using the browser.