#!/usr/bin/python


def square(length,repeat,amp=1.0):
	cereal = []
	for j in range(repeat):
		for i in range(length/2):
			cereal.append((amp,))
		for i in range(length/2):
			cereal.append((0.0,))
	return [cereal]

def sawtooth(length,repeat,amp=1.0):
	cereal = []
	current = 0
	step = float(amp)/length
	for j in range(repeat):
		for i in range(length):
			cereal.append((current,))
			current += step
		current = 0
	return [cereal]

def reverse_sawtooth(length,repeat,amp=1.0):
	cereal = []
	current = 1.0
	step = float(amp)/length
	for j in range(repeat):
		for i in range(length):
			cereal.append((current,))
			current -= step
		current = 1.0
	return [cereal]

def triangle(length,repeat,amp=1.0):
	cereal = []
	current = 0
	step = 2.0 * amp/length
	for j in range(repeat):
		for i in range(length/2):
			cereal.append((current,))
			current += step
		current = 1.0
		for i in range(length/2):
			cereal.append((current,))
			current -= step
		current = 0.0
	return [cereal]

def sine(length,repeat,amp=1.0):
	import math
	cereal = []
	radian = 0
	step = math.pi / length
	for j in range(repeat):
		for i in range(length):
			cereal.append((amp*math.sin(radian),))
			radian += step
		radian = 0
	return [cereal]

if __name__ == "__main__":
	import cereal
	#440 on 8khz : 
	sq = square(18,880)
	sq = cereal.split_in_row(sq,8000)
	cereal.save_wave(sq,"squarewave.wav")
	saw = sawtooth(18,880)
	saw = cereal.split_in_row(saw,8000)
	cereal.save_wave(saw,"sawtooth.wav")
	tri = triangle(18,880)
	tri = cereal.split_in_row(tri,8000)
	cereal.save_wave(tri,"triangle.wav")
	sin = sine(18,880)
	sin = cereal.split_in_row(sin,8000)
	cereal.save_wave(sin,"sine.wav")
