Mercurial > hg > jslab
annotate src/samer/units/Oscillator.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
rev | line source |
---|---|
samer@0 | 1 package samer.units; |
samer@0 | 2 import samer.core.*; |
samer@0 | 3 import samer.core.types.*; |
samer@0 | 4 import samer.maths.*; |
samer@0 | 5 import java.util.*; |
samer@0 | 6 |
samer@0 | 7 public class Oscillator implements Generator |
samer@0 | 8 { |
samer@0 | 9 double c, s; |
samer@0 | 10 double x1, x2; |
samer@0 | 11 |
samer@0 | 12 public Oscillator(double f) { setFrequency(f); reset(); } |
samer@0 | 13 |
samer@0 | 14 public DoubleModel getFrequencyModel() { |
samer@0 | 15 return new DoubleModel() { |
samer@0 | 16 public void set(double f) { setFrequency(f); } |
samer@0 | 17 public double get() { return Math.atan(s/c); } |
samer@0 | 18 }; |
samer@0 | 19 } |
samer@0 | 20 |
samer@0 | 21 public void reset() { x1=1; x2=0; } |
samer@0 | 22 public void setFrequency(double f) { |
samer@0 | 23 s=Math.sin(f); |
samer@0 | 24 c=Math.cos(f); |
samer@0 | 25 } |
samer@0 | 26 |
samer@0 | 27 public void dispose() {} |
samer@0 | 28 public double next() |
samer@0 | 29 { |
samer@0 | 30 double y1 = x1*c - x2*s; |
samer@0 | 31 double y2 = x1*s + x2*c; |
samer@0 | 32 x1=y1; x2=y2; |
samer@0 | 33 return x2; |
samer@0 | 34 } |
samer@0 | 35 |
samer@0 | 36 public void next(double [] x) { |
samer@0 | 37 for (int i=0; i<x.length; i++) x[i]=next(); |
samer@0 | 38 } |
samer@0 | 39 |
samer@0 | 40 public String toString() { return "oscillator"; } |
samer@0 | 41 } |
samer@0 | 42 |
samer@0 | 43 |