Skip to content

Instantly share code, notes, and snippets.

@belzecue
Forked from josephbk117/AudioVisualizer.cs
Created July 21, 2018 16:33
Show Gist options
  • Save belzecue/128400140ae71902f8354444b443852d to your computer and use it in GitHub Desktop.
Save belzecue/128400140ae71902f8354444b443852d to your computer and use it in GitHub Desktop.
Audio visualizer in unity with blend shapes
using UnityEngine;
[RequireComponent(typeof(SkinnedMeshRenderer))]
public class AudioVisualizer : MonoBehaviour
{
[Range(1.0f,4500.0f)]
public float multiplier;
public int minRange = 0;
public int maxRange = 64;
private SkinnedMeshRenderer skinnedMeshRenderer;
private float prevAvg = 0.0f;
void Start ()
{
skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer> ();
}
void Update ()
{
float[] spectrum = new float[64];
AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.BlackmanHarris);
if (maxRange < minRange)
maxRange = minRange + 1;
minRange = Mathf.Clamp(minRange, 0, 63);
maxRange = Mathf.Clamp(maxRange, 0, 63);
float avg = 0;
for (int i = minRange; i < maxRange; i++)
avg += Mathf.Abs(spectrum[i]);
avg = avg / (float)Mathf.Abs(maxRange - minRange);
if (avg - prevAvg > 0.0012f)
avg = prevAvg + 0.0012f;
else if (avg - prevAvg < -0.0012f)
avg = prevAvg - 0.0012f;
skinnedMeshRenderer.SetBlendShapeWeight(0, avg*multiplier);
prevAvg = avg;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment