//sinus
function sinus(frequenz, amplitude, phase) {
	this.f = (((frequenz % 1) + 1) % 1) || 0.1;
	this.a = amplitude || 1.0;
	this.p = (((phase % 1) + 1) % 1) || 0.0;
	
	this.tick = sinus_tick;
	this.val = sinus_val;
}

function sinus_tick() {
	with(this) {
		p = p + f;
		if (p > 1) p -= 1;
		if (p < 0) p += 1;
	}
}

function sinus_val() {
	return Math.sin(this.p * 2 * Math.PI) * this.a;
}

//pool
function pool(aufbau, abbau, maximum, minimum) {
	this.auf = Math.min(1.0,Math.abs(aufbau)) || 0.5;
	this.ab = Math.min(1.0,Math.abs(abbau)) || 0.1;
	this.maxi = maximum || 1.0;
	this.mini = minimum || 0.0;
	
	this.wert = this.mini;
	
	this.tick = pool_tick;
	this.feed = pool_feed;
	this.val = pool_val;
}

function pool_tick() {
	this.wert = this.wert * (1.0 - this.ab) + this.mini * this.ab;
}

function pool_feed() {
	this.wert = (this.wert * (1.0 - this.auf)) + (this.maxi * this.auf);
}

function pool_val() {
	return this.wert;
}