Page 1 sur 1

[MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 12:51
par Amconline
Bonjour !
Dans mon prog, j'ai un personnage qui parle, en bougeant les lèvres en fonction du volume du son.
Ca fonctionne très bien en EXE.
Je passe le bazard en WEBGL pour les besoins du dev.

Le personnage ne détecte plus les variations de volume du son.
J'ai bien isolé le pb, c'est bien de là que ça vient. Mais pas moyen de trouver un code qui fonctionnerait en WebGL...

Voici mon code actuel, si quelqu'un peut jeter un coup d'oeil...

Code : Tout sélectionner

#pragma strict

var Acteur : GameObject;

var Noisegate = 0.05f;
var DelaiSilence = 0.2f;
private var startTimer = 0;
private var countTimer = 0f;
private var audiosrc : AudioSource;

private var freqData: float[];
private var nSamples: int = 256;
private var fMax = 24000;

private var mouth = 0f;
private var volume = 40;
private var frqLow = 200;
private var frqHigh = 800;
private var y0: float;

function BandVol(fLow:float, fHigh:float): float {
 
    fLow = Mathf.Clamp(fLow, 20, fMax); // limit low...
    fHigh = Mathf.Clamp(fHigh, fLow, fMax); // and high frequencies
    // get spectrum: freqData[n] = vol of frequency n * fMax / nSamples
    Acteur.GetComponent.<AudioSource>().GetSpectrumData(freqData, 0, FFTWindow.BlackmanHarris);
    var n1: int = Mathf.Floor(fLow * nSamples / fMax);
    var n2: int = Mathf.Floor(fHigh * nSamples / fMax);
    var sum: float = 0;
    // average the volumes of frequencies fLow to fHigh
    for (var i=n1; i<n2; i++){
        sum += freqData[i];
    }
    return sum / (n2 - n1 + 1);
}

    function Start() {
        freqData = new float[nSamples];
        // démarrer la détection de lecture
        audiosrc = Acteur.GetComponent.<AudioSource>();
    }

    function Update() {
        if(audiosrc.isPlaying)
        {
            mouth = y0 + BandVol(frqLow,frqHigh) * volume;      
            if (mouth >= Noisegate)
            {         
                startTimer = 0;           
                Acteur.SendMessage("Speak",1);
            }
            else
            {
                startTimer = 1;
            }
            if (startTimer==1)
            {
                countTimer += Time.deltaTime;
                if (countTimer > DelaiSilence)
                    startTimer = 0;
                countTimer = 0;
                Acteur.SendMessage("Speak",0);
            }
        }
        else
        {
            Acteur.SendMessage("Speak",-1);
        }

    }

	function StopSound (){
		audiosrc.Stop();
	}
Merci beaucoup, bonne journée !
Aymeric

Re: [MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 14:14
par Liven
var var var var....

C'est du JS ça, non ?

Mauvaise nouvelle, le JS n'est plus d'actualité, il n'est plus pris en charge par les dernières versions de Unity, du coup ça ne me surprendrais pas que ce soit ça qui bug en WebGL (après pourquoi ce script et pas les autres, j'en sais rien)

Re: [MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 14:28
par Amconline
Liven a écrit :
17 Oct 2018 14:14
var var var var....

C'est du JS ça, non ?

Mauvaise nouvelle, le JS n'est plus d'actualité, il n'est plus pris en charge par les dernières versions de Unity, du coup ça ne me surprendrais pas que ce soit ça qui bug en WebGL (après pourquoi ce script et pas les autres, j'en sais rien)
Oui, c'est du JS. En même temps, on est dans la partie JS du forum ! ;-)
Mais apparemment ça n'a jamais fonctionné en JS, même avec les anciennes versions de Unity...

Re: [MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 14:44
par Liven
Je n'ai qu'un truc à dire : passes au C#

C'est un sujet qui reviens régulièrement (comme le fait de passer aux dernières versions de Unity plutôt que rester sur la v5 voir v4) et tous ceux qui ont sauté le pas ont bien vu que c'était un peu de bouleau, mais moins que ce qu'ils craignaient et aucun d'eux ne regrette son choix (à ma connaissance bien sûr) alors que certains avait même des projets assez conséquent à faire basculer.

Franchement, j'ai l'impression qu'une fois que tu as mis tes scripts dans des classes, que tu as remplacé les "fonction" par des "void" et que tu as correctement défini les variables (remplacé les var donc) il ne dois rester que des ajustements, la syntaxe est hyper proche (perso je repère le JS par les var, sinon je trouve qu'il ressemble vachement au c#).

Pour la section du forum, en fait comme je passe par "raccourcis / nouveaux message" du coup je vois pas forcement où ça m’emmène, c'est un peu la surprise.

Re: [MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 14:52
par Amconline
Liven a écrit :
17 Oct 2018 14:44
Je n'ai qu'un truc à dire : passes au C#

C'est un sujet qui reviens régulièrement (comme le fait de passer aux dernières versions de Unity plutôt que rester sur la v5 voir v4) et tous ceux qui ont sauté le pas ont bien vu que c'était un peu de bouleau, mais moins que ce qu'ils craignaient et aucun d'eux ne regrette son choix (à ma connaissance bien sûr) alors que certains avait même des projets assez conséquent à faire basculer.

Franchement, j'ai l'impression qu'une fois que tu as mis tes scripts dans des classes, que tu as remplacé les "fonction" par des "void" et que tu as correctement défini les variables (remplacé les var donc) il ne dois rester que des ajustements, la syntaxe est hyper proche (perso je repère le JS par les var, sinon je trouve qu'il ressemble vachement au c#).

Pour la section du forum, en fait comme je passe par "raccourcis / nouveaux message" du coup je vois pas forcement où ça m’emmène, c'est un peu la surprise.
Oui, je passe au C# en ce moment pour mes projets à venir.
Mais ce projet est assez conséquent (et finalisé), et j'ai juste besoin de cette fonction pour une démo. Je ne peux pas repasser tout en C#, ça demanderait un temps et une adaptation considérable, pour une simple démo.
Le pb c'est que la fonctionnalité présente ici existe en JS comme en C#, mais n'est pas reconnue par le WebGL...
J'ai trouvé des fonctionnalité utilisant le JS en API, mais je suis complètement largué à ce niveau là !

Re: [MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 15:02
par Max
Hello,

La gestion audio est particulière en WebGL.
Regarde cette page de la doc, cela devrait t'aider: Using Audio In WebGL.
Je vois par exemple que dans ton code tu utilises GetSpectrumData, pas sûr que cela soit supporté (cf le lien au dessus).

Re: [MY-AL] PB de détection du volume dans WebGL

Publié : 17 Oct 2018 16:04
par Amconline
Max a écrit :
17 Oct 2018 15:02
Hello,

La gestion audio est particulière en WebGL.
Regarde cette page de la doc, cela devrait t'aider: Using Audio In WebGL.
Je vois par exemple que dans ton code tu utilises GetSpectrumData, pas sûr que cela soit supporté (cf le lien au dessus).
Merci pour ta réponse.
GetSpectrumData n'est effectivement pas supporté...
Je vais voir ce que je peux faire avec ça...
Aymeric