Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Color segun intensidad de la musica

Iniciado por Jose134, Mayo 01, 2016, 02:14:43 PM

Tema anterior - Siguiente tema
Hola a todos estaba intentando hacer que se generase un color segun la intensidad de la musica de un AudioSource. He hecho esto pero como aun no entiendo muy bien como funciona todo el tema de audio no se por que no termina de funcionar bien 
using UnityEngine;
using System.Collections;

public class MusicColor : MonoBehaviour {

    public AudioSource source;
    public Color a;
    public Color b;

    public float[] spectrum;

    public Color color;
    public float multiplier;

    void Awake ()
    {
        spectrum = new float[64];
    }

    void Update()
    {
        source.GetSpectrumData(spectrum, 0, FFTWindow.BlackmanHarris);

        float spectrumMid = 0f;
        for (int i = 0; i < spectrum.Length; i++)
        {
            spectrumMid += spectrum * multiplier;
        }
        spectrumMid = spectrumMid / spectrum.Length;

        color = Color.Lerp(a, b, spectrumMid);
        GetComponent<Camera>().backgroundColor = color;
    }
}
 El problema de esto es que se ve muy "flickery" pero no entiendo por que(La variable multiplier esta puesta en 1000)

supongo que con flickery querras decir muy titilante o lago así, si es esto la razón por que la data del esectro salta de un valor a otro en intervalos grandes y no suavemente, lo que hay que hacer es aplicar un filtro.El codigo de aplicación de un filtro a una señal lo podés encontar aqui : http://re-sounding.com/2013/12/14/unity-controlling-game-elements-with-sound/fijate en el último códigop del post que está después del video de demostración.  El filtro está exactamente en la línea 28.Espero te sirva. Saludos desde Argentina.PD lo que querés hacer vos es mucho más facil en Processing: www.processing.org al menos que lo que estés haciendo sea parte de un proyecto unity.

Ayer poniendo unos paneles absorventes en la seccion de viento del Conservatorio de Elche, el director me comento que habia cambiado el color del sonido de la sala. 

Mayo 03, 2016, 11:35:51 AM #3 Ultima modificación: Mayo 03, 2016, 11:36:22 AM por Jose134
[quote author=H@pesend date=1462195589" data-ipsquote="" data-cite="H@pesend" class="ipsQuote">Ayer poniendo unos paneles absorventes en la seccion de viento del Conservatorio de Elche, el director me comento que habia cambiado el color del sonido de la sala. [/quote]Tal vez pueda aplicar eso a Unity :P

[quote author=H@pesend" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35772" data-ipsquote-contentcommentid="130465 date=1462195589]Ayer poniendo unos paneles absorventes en la seccion de viento del Conservatorio de Elche, el director me comento que habia cambiado el color del sonido de la sala. [/quote]Dame de eso que fuma ese sñor

Mayo 06, 2016, 07:12:39 PM #5 Ultima modificación: Mayo 06, 2016, 07:13:57 PM por lozdanmultimedial
UNa froma sencilla de aplicar un mayor suavizado es en la ecuación de filtrado del código del tutorial aplicar distintos valores al factor de filtrado:smooth[0] = ((0.01f * absInput) + (0.99f * smooth[1]));los dos valores numéricos en coma flotante de la ecuación son el "factor de filtrado" entonces prueba modofocando dichos valores.Otra forma que puede ser combinada con la anterior es tomar para la interacción el promedio de lo que sería el buffer de sonido entero y no sample por sample como se hace en el tutorial.Este sería el código:en C#:using UnityEngine; using System.Collections; public class VolDisplay : MonoBehaviour { private float amp; private float[] smooth = new float[2]; private float aux; void Start () { // initalising the filter for (int i = 0; i


Estimado Jose 134, por eses circunstancias de la vida ( digamoslo así ) necesito implementar un  vúmetro (indicador de nivels de sonido) , necesitaria saber como esta iserto el script al proyecto unity es decir si esta adjuntado a un game object vacio o lo que fuere. Muchas gracias.

Etiquetas: