2016-03-30 2 views
0

siehe das Beispiel herePerformance-Problem mit audioreactive Visuals mit pixi und p5 Sound lib

Ich denke, es auf Ihrem Rechner hängt, aber für mich, nach dem ersten Song fällt die Framerate nur wie verrückt. Ich sorge dafür, dass nicht mehr Sprites als nötig vorhanden sind (4: 2 Bilder und 2 Displacement Maps).

Ist das eine Pixi-Sache, vielleicht WebGL? Ich bin mir nicht sicher, wie ich es verbessern oder wo ich nach einer besseren Leistung suchen soll.

+0

Wenn Sie nicht haben, dann ist das erste, was ich schlage ist, versuchen, die Leistung mit Browserprofilen zu verfolgen, wie: https: //developer.chrome.com/devtools/docs/cpu-profiling, da die erste Annahme wäre, dass es kommt meistens von Javascript und das Sie am einfachsten debuggen können. Wenn Sie mit dem Profiling nichts anfangen können, senden Sie mir die Ergebnisse des Profilers oder geben Sie Ihren Code zur Überprüfung an. – Hachi

+0

@Hachi Vielen Dank für die Antwort! Ich habe ein CPU-Profil aufgenommen, das du hier herunterladen kannst: flowen.nl/CPU-20160406T123821.cpuprofile.zip Ich bin mir nicht sicher, wo ich als nächstes hinschauen soll. Den Code findest du hier: https://github.com/lowenf/ Audio-reaktiven Spaß – flowen

Antwort

1

Ok. Ich habe das Problem gefunden. Sie fügen displacementTexture auf die Bühne (stage.addChild (displacementTexture) immer wieder und Sie entfernen nie wirklich so Ihr totalSpritesOnStage nicht richtig funktionieren

Wie wäre es so etwas wie das Hinzufügen von:..

if (stage.children.length > 4) { 
    // let's destroy the sprite now 
    stage.removeChildren(4); 

Es würde schnell scheinen suchen mit, dass zu arbeiten, obwohl ich sehr gründlich nicht die Funktionalität überprüfen.

auch dies mich persönlich gestört, da die Töne immer wieder heruntergeladen wurden :)

function preload(song) { 
console.log('preloading song: ' + currentSong); 
console.log(song.filename); 
if (allSounds[song]) { 
    sound = allSounds[song]; 
    sound.setVolume(volume); 
    sound.play(); 
    return; 
} 
allSounds[song] = sound = new p5.SoundFile('songs/' + song.filename, 
    onMusicLoaded, 
    h.onError 
); 

// The volume is reset (to 1) when a new song is loaded. so we force it 
sound.setVolume(volume); 
} 
+0

Danke Hachi! Dies verbessert es sicherlich um hmmm .. 1721%;) Danke, dass Sie mir den zusätzlichen Zeiger auf die Sounds gegeben haben, es ist sinnvoll, ein heruntergeladenes Objekt in einem Array zu speichern und dann zu überprüfen, ob es existiert. Doppelt danke! – flowen

+0

Ich bin mir nicht sicher, ob ich diesen Teil verstehe: allSounds [song] = sound = new p5.Sound .... Wenn ich ein Array mit allen Songs bevölkere, sollte ich sie nicht in einen bestimmten Index einfügen (was ist gleich "currentSong" (was ist ein nr zwischen 1-songs.length) und dann prüfen, ob der Index bereits existiert? Dann muss ich wahrscheinlich auch allSounds.length = songs.length machen. Macht das Sinn? – flowen

+0

@flowern Ich bin mir nicht ganz sicher, was Sie ändern wollen, indem Sie die allSounds zu einem Array machen und nicht zu einem Objekt, sondern lediglich einen Cache bereitstellen, damit der p5 die Dateien nicht immer wieder herunterlädt und initialisiert Wenn sie bereits einmal heruntergeladen und initialisiert wurden, sehe ich keinen Grund, warum sie das wieder tun sollte, indem sie p5.SoundFile aufruft.Sie ​​können dafür natürlich jedes gewünschte Mittel verwenden Oh, und ich tat es nicht erinnere dich daran zu erwähnen, dass es ein ziemlich cooles Demo war über Audio-reaktive Sachen, aber habe es nicht wirklich im Einsatz gesehen :). – Hachi