Stereo music visualization through manifold harmonics

Die Visualisierung von Musik beschränkt sich größtenteils auf 2D Darstellungen von
Spektren oder Ähnlichem.
Das Paper Stereo music visualization through manifold harmonics von Lewiner et al. befasst sich mit der
Visualisierung von Audiodateien anhand von 3D-Meshes.
Die werden anhand der Frequenzen (siehe Bild unten) verformt.

Das Programm lädt automatisch eine Audiodatei und ein Model ein und verformt das mesh entsprechend den Amplituden.

Funktionsweise

Zuerst werden anhand die Frequenzen der Vertices des Meshes berechnet. Wie diese Berechnung funktioniert wird sehr gut in den Papers [2] und [3] beschrieben.
Diesen Frequenzen werden die entsprechenden Frequenzen der Audiodatei zugewiesen (ich mache in dem Fall ein lineares Mapping, dh niedrige Frequenzen des Audiosignals werden auf niedrige Meshfrequenzen gemappt).
Die Frequenzen des Meshes werden dann entsprechend verstärkt (sind diese Frequenzen negativ, geht auch die Verstärkung in die negative Richtung.
Eine Abbildung der Vertexfrequenzen sieht man unten, Rot bedeutet hohe Frequenzen, je dünkler desto niedriger. Die Blauen Triangles haben sehr kleine Frequenzen (fast 0).





Implementierung

Die Implementierung auf der CPU hat selbst bei sehr kleinen Meshes keinen Sinn, da man bei jedem Renderschritt eine n² Schleife durchlaufen muss.
Daher wird die Implementierung wie im paper vorgeschlagen auf die GPU ausgelagert.
Als Preprocessing step werden die Frequenzen der Vertices, die Position der Vertices im Frequenzraum und die Eigenvektoren ausgerechnet. All diese Variablen braucht man später
auf der GPU um die Verstärkung anzuwenden und anschließend die Vertices in Geometry space umzurechnen.
Meine Berechnung passiert anders als im paper im Vertex Shader, weil ich kein so großes Mesh verforme und mir so den zweiten Renderpass erspare.
Beim Programmstart werden alle Preprocessing Variablen geladen, wenn Sie verfügbar sind. Dadurch muss das bei selbst kleinen Meshes zeitaufwändige Berechnen nur einmal pro Mesh durchgeführt werden.

Für die Berechnung der Eigenwerte wird das Eigen Framework verwendet [4], OpenAL für Audiowiedergabe und die Boost Libraries für Multithreading [5].

Download

musicVis.zip (entpacken und musicVis.exe ausführen)

References

[1] T. Lewiner et al. Stereo music visualization through manifold harmonics, Journal The Visual Computer: International Journal of Computer Graphics - Special Issue on SIBGRAPI 2010, 2011
[2] B. Vallet and B. Lévy. Spectral geometry processing with manifold harmonics. Computer Graphics Forum, volume 27, pages 251-260, 2008.
[3] S. Elcott and P. Schröder. Buidling your own DEC at home. SIGGRAPH, 2006.
[4] http://eigen.tuxfamily.org/
[5] www.boost.org/