// Path: voicesmith/src/de/jurihock/voicesmith/dsp/Math.java
// public static final float	PI	= (float) java.lang.Math.PI;
// 
// Path: voicesmith/src/de/jurihock/voicesmith/io/AudioDevice.java
// public abstract class AudioDevice implements Disposable
// {
// 	protected final Context	context;
// 
// 	public Context getContext()
// 	{
// 		return context;
// 	}
// 
// 	private int	sampleRate;
// 
// 	public int getSampleRate()
// 	{
// 		return sampleRate;
// 	}
// 	
// 	protected void setSampleRate(int sampleRate)
// 	{
// 		this.sampleRate = sampleRate;
// 	}
// 	
// 	public AudioDevice(Context context)
// 	{
// 		this(context, new Preferences(context).getSampleRate());
// 	}
// 
// 	public AudioDevice(Context context, int	sampleRate)
// 	{
// 		this.context = context;
// 		this.sampleRate = sampleRate;
// 		new Utils(context).log("Current sample rate is %s Hz.", sampleRate);
// 	}
// 
// 	public int read(short[] buffer, int offset, int count)
// 	{
// 		return -1;
// 	}
// 
// 	public final boolean read(short[] buffer)
// 	{
//         if (buffer == null) return false;
//         if (buffer.length == 0) return false;
// 
// 		int count = 0;
// 
// 		do
// 		{
//             int result = read(buffer, count, buffer.length - count);
//             if (result < 0) return false; // error on reading data
// 			count += result;
// 		}
// 		while (count < buffer.length);
// 
// 		return true;
// 	}
// 
// 	public int write(short[] buffer, int offset, int count)
// 	{
// 		return -1;
// 	}
// 
// 	public final boolean write(short[] buffer)
// 	{
//         if (buffer == null) return false;
//         if (buffer.length == 0) return false;
// 
// 		int count = 0;
// 
// 		do
// 		{
//             int result = write(buffer, count, buffer.length - count);
//             if (result < 0) return false; // error on writing data
//             count += result;
// 		}
// 		while (count < buffer.length);
// 
//         return true;
// 	}
// 
// 	public void flush()
// 	{
// 	}
// 
// 	public void start()
// 	{
// 	}
// 
// 	public void stop()
// 	{
// 	}
// 
// 	public void dispose()
// 	{
// 	}
// }


import static de.jurihock.voicesmith.dsp.Math.PI;
import android.content.Context;
import de.jurihock.voicesmith.io.AudioDevice;

	public PhaseAccumulator(Context context, int sampleRate, int waveFrequency)
	{
		super(context, sampleRate);

		this.setWaveFrequency(waveFrequency);
	}

	private int	waveFrequency;

	public int getWaveFrequency()
	{
		return waveFrequency;
	}

	private void setWaveFrequency(int waveFrequency)
	{
		this.waveFrequency = waveFrequency;

		phaseDeviation = getWaveFrequency() / getSampleRate();
		phaseDivisor = -phaseDeviation;
	}

	protected float getNextPhase()
	{
		phaseDivisor += phaseDeviation;

		while(phaseDivisor >= 1)
			phaseDivisor -= 1;

// Path: voicesmith/src/de/jurihock/voicesmith/dsp/Math.java
// public static final float	PI	= (float) java.lang.Math.PI;
// 
// Path: voicesmith/src/de/jurihock/voicesmith/io/AudioDevice.java
// public abstract class AudioDevice implements Disposable
// {
// 	protected final Context	context;
// 
// 	public Context getContext()
// 	{
// 		return context;
// 	}
// 
// 	private int	sampleRate;
// 
// 	public int getSampleRate()
// 	{
// 		return sampleRate;
// 	}
// 	
// 	protected void setSampleRate(int sampleRate)
// 	{
// 		this.sampleRate = sampleRate;
// 	}
// 	
// 	public AudioDevice(Context context)
// 	{
// 		this(context, new Preferences(context).getSampleRate());
// 	}
// 
// 	public AudioDevice(Context context, int	sampleRate)
// 	{
// 		this.context = context;
// 		this.sampleRate = sampleRate;
// 		new Utils(context).log("Current sample rate is %s Hz.", sampleRate);
// 	}
// 
// 	public int read(short[] buffer, int offset, int count)
// 	{
// 		return -1;
// 	}
// 
// 	public final boolean read(short[] buffer)
// 	{
//         if (buffer == null) return false;
//         if (buffer.length == 0) return false;
// 
// 		int count = 0;
// 
// 		do
// 		{
//             int result = read(buffer, count, buffer.length - count);
//             if (result < 0) return false; // error on reading data
// 			count += result;
// 		}
// 		while (count < buffer.length);
// 
// 		return true;
// 	}
// 
// 	public int write(short[] buffer, int offset, int count)
// 	{
// 		return -1;
// 	}
// 
// 	public final boolean write(short[] buffer)
// 	{
//         if (buffer == null) return false;
//         if (buffer.length == 0) return false;
// 
// 		int count = 0;
// 
// 		do
// 		{
//             int result = write(buffer, count, buffer.length - count);
//             if (result < 0) return false; // error on writing data
//             count += result;
// 		}
// 		while (count < buffer.length);
// 
//         return true;
// 	}
// 
// 	public void flush()
// 	{
// 	}
// 
// 	public void start()
// 	{
// 	}
// 
// 	public void stop()
// 	{
// 	}
// 
// 	public void dispose()
// 	{
// 	}
// }


// Path: voicesmith/src/de/jurihock/voicesmith/io/oscillators/PhaseAccumulator.java
import static de.jurihock.voicesmith.dsp.Math.PI;
import android.content.Context;
import de.jurihock.voicesmith.io.AudioDevice;


	public PhaseAccumulator(Context context, int sampleRate, int waveFrequency)
	{
		super(context, sampleRate);

		this.setWaveFrequency(waveFrequency);
	}

	private int	waveFrequency;

	public int getWaveFrequency()
	{
		return waveFrequency;
	}

	private void setWaveFrequency(int waveFrequency)
	{
		this.waveFrequency = waveFrequency;

		phaseDeviation = getWaveFrequency() / getSampleRate();
		phaseDivisor = -phaseDeviation;
	}

	protected float getNextPhase()
	{
		phaseDivisor += phaseDeviation;

		while(phaseDivisor >= 1)
			phaseDivisor -= 1;

		return 2 * PI * phaseDivisor;