3D Geluid

\ \ nwt.rs/0u \ 37 lezers \ 4 reacties \ \

De taken zitten erop! ‘t Is te zeggen; alle documenten zijn klaar voor de vakken die morgen (Projektübung) en donderdag (Advanced Facade Technologies en Computer Simulation) gepresenteerd dienen te worden. En wat doe ik dan om de zinnen te verzetten? Stukjes programmeren.

Gisteren kwam ik via de link-collectie van Andrea Graziano terecht op een artikel van een Grasshopper-programmeur die muziekfrequentie inleest en in een driedimensionale weergave voorstelt in Rhino. Heel erg mooi, heel erg interessant, maar ik vond dat ik het beter kon; vooral dan in de zin van performantie en optimalisering van de code. Daarom ben ik aan de slag gegaan, en een leuk concept ontwikkeld.

Waar hij de muziek analyseert door middel van vvvv, doe ik het met de op Java gebaseerde programmeeromgeving Processing. Ik testte er voorheen al enkele dingetjes in uit en was er van overtuigd dat analyse van muziek niet al te moeilijk zou zijn, mits de mogelijkheden van bestaande bibliotheken te gebruiken. De code in Processing is dan ook verrassend eenvoudig en helder.

// Spectrum to File
// Niels Wouters - 2010
void draw() {
  background(0,0,255);

  // fetch spectrum
  _analyse.getSpectrum(_audioChannel);
  _output = createWriter("output-file.txt");
  // output to file + draw spectrum bars
  for (int i=0; i<256; i++) {
    float temp=max(0, 185 - _analyse.spectrum[i] * 512);
    _output.println(temp);
    rect(i*16,temp+.5,6,height-temp+.5);
  }
  _output.flush();
  _output.close();
}

Deze code zorgt ervoor dat een constante stroom van 256 spectrum-gegevens in een bestand worden weggeschreven, terwijl een muziekstukje speelt. Deze gegevens zijn niks meer of minder dan decimale getallen die in code aangepast dienen te worden om bewerkbare waarden te verkrijgen. In een tweede stap zal dit bestand met getallen ingelezen worden in Grasshopper, om vervolgens een puntenwolk te creëren waarbij de punten op een Z-hoogte geplaatst worden die overeenstemt met het spectrum.

Onderstaand filmpje toont tenslotte het totaalconcept. Ter illustratie van het geheel speelt Utopia van Within Temptation, een nummer met een grote verscheidenheid aan toonhoogtes. Zoals je zal zien is het geheel niet volledig betrouwbaar; het inlezen van het bestand in Grasshopper conflicteert van tijd tot tijd met de schrijfbewerking naar het bestand. Bovendien is Grasshopper niet erg snel in de visualisatie van het geheel. Desalniettemin moet het concept duidelijk zijn.

In een volgende stap zal ik werken met beelden; in eerste instantie de pixelwaarden van foto's en andere afbeeldingen, en in een tweede stap pixelwaarden van bewegende beelden. Op basis hiervan zal dan ook een driedimensionale compositie gerealiseerd worden.

pixelstats trackingpixel

Verwante artikels

Tot nu toe 4 reacties \

Door Karthik Dondeti, .

Hello there.

I must first apologize for my inability to communicate except in English.

I find your attempt here extremely exciting. I wanted to make a couple of observations. You must have noticed that the reading of file in Grasshopper conflicts with the write operation from processing. If you manage to smooth this out, could you help me understand how you manage that.

Currently, inside VVVV, I could manage to slow down the process and also apply a “damper” that will smooth out the transitions between successive frames. I haven’t yet managed to achieve this on Processing yet.

I am however convinced that a much better output can be achieved with using Processing and am currently working on the same. Any info regarding this, would be extremely helpful.

Best.
Karthik.

Door Niels Wouters, .

Hi Karthik! Thanks for your reply! No problem for your non-proficiency in Dutch (if you want I could mail you a translation of the article here).

The conflict between read and write are the most annoying problem. Yet, this seems to be a typical issue when working with PrintWriters in Processing (and thus Java). In fact this method only allows EITHER read-access OR write-access. This explains the fact – I think – that Rhino often seems to miss some frequency values from the textfile. However, until now I have not been able to find an alternative… (A very dirty alternative might be to copy the file as soon as the write has finished, and open that copied file in GH?)

Damping in Processing should be possible I think, by writing the mean value between the existing frequency (which is in the textfile) and the new one. Yet, this will also cause the whole system to become slower.

I have some busy days ahead, but will probably fine-tune the whole system afterwards. I will keep you updated, and also send you my .ghx (in which I used GH’s tree-objects).

All the best!

Door Frank, .

Heel cool dat je ook met geluid bezig bent! Lijkt behoorlijk op het onderzoek wat ik het afgelopen half jaar op school heb gedaan.

Het effect wat je laat zien kun je ook met een plugin voor Windows media player bereiken. Check: http://www.codeproject.com/KB/directx/WM3DSpectrum.aspx

Die heb ik thuis ook geïnstalleerd, en deze werkt prima. Je kunt er alleen geen data uit halen, dus alleen leuk als visualisatie van geluid.

Door bambang rahmantyo, .

hello, greetings from indonesia.
im just learning vvvv and grasshopper, and find your article is interesting because im an architecture student and a musician too. can i have a translation of your article in english?

Plaats een reactie \