|
Revision 27528, 1.5 kB
(checked in by tekisuke, 4 years ago)
|
|
lang/actionscript/flmml/: オシレータをswitchで分岐するのをやめ、サブクラスに分割。ファミコンノイズを追加。
|
| Line | |
|---|
| 1 | package 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 | }
|
|---|