This is for a project I am working on and it works pretty sweet. There were a few lessons learnt during the development of the app so I thought I would write a post on it in the spirit of the rest of the world learning from my mistakes
. The project (that I cant tell you about yet) required a bunch of songs represented by their spectral-waveforms. I tried to find an application that would generate them for me easily but I couldnt really find a simple one. There are some applications that do it but they have so many controls that I couldnt figure out how to do it really quick. I still had source code from my FlexAmp application lying around so I figured, what the heck, I’ll just write a small application to do it. The result was the SpectrumGrapher application.
The concept is pretty simple:
1) Browse to a song on your filesystem.
2) Select it and it begins playing as well as using the computeSpectrum method to draw the graph (using a function that uses the drawing api thats called by a timer)
3) Click on the ‘Snapshot’ button to take a snapshot of the drawing (using the bitmap information of the UIComponent and the Bitmap to png class in the Adobe corelib)
4) Write the png file to the filesystem with a name like [song]_waveform.png
Screen shots (click for larger image)

The output waveform (as saved to the desktop)
The problem I faced was after about 6-10 seconds of playback, my cpu would start spiking since I had too many vectors on the stage. The solution was a modified version of Grant Skinner’s ‘copy vector into bitmap and clear the vector’ approach. I put another timer that fired an event every 5 seconds to do that. The result: I tried a song that lasted almost 8 minutes and no issues (yeah Dream Theater songs are loooooong…but cool
). The other thing I just discovered was that using a filetype filter to control enabling/disabling the select button on the browse window doesnt seem to work on the mac ( I am a mac newbie and did this development on my PC). The more interesting output of this project was the file chooser dialog box which I had to write since the apollo alpha release doesnt give access to the native file chooser control (although I have seen it on the beta build demo). Maybe I’ll release that part of the code sometime soon.
Let me know what you think
Software Engineer at Comcast Innovation Labs, Creative Technologist, Open Source enthusiast, amateur illustrator, manager Philly Android Alliance User Group. The content on this blog do not reflect the views of my employer.
Pingback: links for 2007-05-10 « thebadtiming