93 lines
2.1 KiB
C#

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);
}
}