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