﻿using UnityEngine;
using System.Collections;

public class SoundGen : MonoBehaviour 
{
	float[] ratios = new float[14];
	AudioSource audio;
	float sec;
	float[] scale = new float[5];
	float[] noteTimes = new float[6];
	float currNoTime;
	
	float BASE_NOTE;
	int modif;
	public int SilentInB;
	public int minBeat;
	public int maxBeat;
	public int noteChanger;
	public float slowerEffect;
	void Awake()
	{
		modif = 0;
		ratios[0]  = 1f; 		 ratios[1]  = 55f/51.91f; ratios[2]  = 55f/48.99f; ratios[3]  = 55f/46.25f; ratios[4]  = 55f/43.65f; ratios[5]  = 55f/41.20f;
		ratios[6]  = 55f/38.89f; ratios[7]  = 55f/36.71f; ratios[8]  = 55f/34.65f; ratios[9]  = 55f/32.70f; ratios[10] = 55f/30.87f; ratios[11] = 55f/29.14f;
		ratios[12] = 2f;		 ratios[13] = 2f * ratios[1];
		
		BASE_NOTE = 1f * ratios[noteChanger] / slowerEffect;
		
		scale[0] = ratios[0];
		scale[1] = ratios[3];
		scale[2] = ratios[5];
		scale[3] = ratios[7];
		scale[4] = ratios[10];
		//scale[5] = ratios[9];
		//scale[6] = ratios[11];
		//scale[7] = ratios[11];
		//scale[8] = ratios[13];
		
		noteTimes[0] = 4f; 
		noteTimes[1] = noteTimes[0] / 2; 
		noteTimes[2] = noteTimes[0] / 4; 
		noteTimes[3] = noteTimes[0] / 8; 
		noteTimes[4] = noteTimes[0] / 16; 
		
		currNoTime = noteTimes[Random.Range(minBeat, maxBeat)];
		audio = GetComponent<AudioSource>();
		audio.pitch = BASE_NOTE; //G#
		sec = 0f;

	}
	
	void Update()
	{
		
		sec += Time.deltaTime;
		
		if(sec > currNoTime * (7f / 8f))
		{	
			audio.volume -= Time.deltaTime * (currNoTime * (1f / 8f) * (8f / currNoTime));
		}
		if(sec > currNoTime)
		{
			
			//silent = (Random.Range(0,2) == 0) ? true : false;
			audio.volume = 0f;
			audio.Stop();
			//if(!silent)
			//{
			sec = 0f;
			if(Random.Range(0, SilentInB) == 0)
				audio.volume = 1f;
			currNoTime = noteTimes[Random.Range(minBeat, maxBeat)];
			
		//	if(Random.Range(0,5) == 0){}
		//	else
	//		{
				modif += Random.Range(1, scale.Length);
			audio.pitch =  BASE_NOTE * scale[modif % scale.Length];
	//		}
			
			//audio.time = currNoTime;
			audio.Play();
			//restart = true;
		}
		
		//Debug.Log(sec);
		//Debug.Log(Time.deltaTime + " reg");
		//audio.pitch += (Time.deltaTime * 1/100);
		
	}

}
