- Home /
the Story of GetSpectrumData, Animator and IEnumerator :D
I am trying to find the frequency of a 'bass' and providing the numerical information of that frequency to the localScale of an Object
My Desire : is to enlarge the object as soon as the bass plays but i want the enlarge animation to complete before it accepts new request to enlarge the object.
For this i am using Coroutines but something is wrong here and i am not able to do perform this.
The problem : Animation playes and before completing accepts new request and then snaps back to larger size again. i mean the One whole animation isn't being played properly
using UnityEngine;
using System.Collections;
public class AudioAnim : MonoBehaviour {
public int sample = 64;
public GameObject green;
public float[] spectrum;
public Animator anim;
public float sam;
void Start () {
anim = GetComponent<Animator> ();
}
void Update () {
green.transform.localScale = new Vector3 (1f, 1f, 1f);
spectrum = AudioListener.GetSpectrumData (sample, 0, FFTWindow.BlackmanHarris);
sam = spectrum [3] + spectrum [33] + spectrum [34] + spectrum [35];
sam = sam * 15;
if(sam > 1f)
{
Debug.Log (sam);
StartCoroutine (bass ());
}
}
IEnumerator bass()
{
anim.Play ("enlarge");
Debug.Log("in the bass");
yield return new WaitForSeconds(1f);
anim.Play("idle");
}
}
Answer by Oana · Dec 30, 2014 at 05:20 PM
What do you want to happen when the animation is playing already? The simplest thing to do is just discard new requests:
bool isPlaying = false;
IEnumerator bass()
{
if (isPlaying) yield break;
isPlaying = true;
anim.Play ("enlarge");
Debug.Log("in the bass");
yield return new WaitForSeconds(1f);
anim.Play("idle");
isPlaying = false;
}
Your answer
Follow this Question
Related Questions
Animator Controller - Change State After Time 0 Answers
Hiding non-public functions from Animation Event Window? 0 Answers
animator controller setTrigger problem 1 Answer
use animator and input on screen button 0 Answers
Randomly Play Animator Animation 0 Answers