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

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Amconline
Messages : 30
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 17 Oct 2018 12:51

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

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

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

Message par Liven » 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)

Amconline
Messages : 30
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 17 Oct 2018 14:28

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...

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

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

Message par Liven » 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.

Amconline
Messages : 30
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 17 Oct 2018 14:52

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à !

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7340
Inscription : 30 Juil 2011 13:57

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

Message par Max » 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).
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Amconline
Messages : 30
Inscription : 03 Mai 2017 11:10

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

Message par Amconline » 17 Oct 2018 16:04

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

Répondre

Revenir vers « (Js) Javascript »