Recent blog entries for aigeek

Turned in my dissertation and put it and my code online. Anyone interested in automatic music analysis? I know a lot more than when I started and I'd like to throw away all the code and start fresh, but I'm definitely taking a break first.

I changed autojot so instead of logging everything you hit with your browser and getting it later (maybe from your cache), instead it caches everything itself for indexing. A little wasteful of space, but it solves problems of authentication and cache misses. As long as you run the indexer once a week or so, it shouldn't use too much space.

Finally made a Debian package for waterfall. Yay, my first package.

mhat: How do you specify the subsets? I want to be able to specify music by its contents instead of by its measly metadata. Examples: "uptempo jazz with lots of brass" or "danceable techno 110-130bpm".

jmelesky: I've heard good things about Foundations of Statistical Natural Language Processing by Manning & Schutze, and it's used in the statistical linguistics class here.

raph, I replied in detail to your waterfall comments in my previous entry, but you may not have seen my reply since I'm clobbering its recency with this one. Have you considered adding a threaded view of messages in your copious free time?

jmelesky: Markov chains are easy, but probabilistic grammars are more accurate. You can even learn them from source data, if you have a bunch of "grammatical" source in a useful format.

raph wrote about waterfall:

Very pretty stuff, but the fact that the spectrum display is linear, rather than logarithmic, really bothers me.

It's not completely linear, but it's close and it bothers me too (and I wrote it). The problem is that XMMS gives crappy frequency resolution to vis plugins (43Hz per linear band). If waterfall used a log2 scale like your ears do, there would only be ten bands. I don't think that would look very good. Instead it uses 75 bands, but doing that on a log scale gets pretty screwed up with round off error. I copied the band sizes from the XMMS spectrum analyzer, but they're not ideal. The first 59 bands (up to ~2.5kHz) are 1:1 linear, and the rest are on a log scale.

The best looking way to fix it would be to have have waterfall do its own FFT at greater resolution. This would slow it down a bit.

The other solution is to use a real log scale, but with fewer bands. The downside to this is that the low freqs will still be squished together (due to poor resolution), though the high freqs will be squished even more, as they should be. I should probably just make this run-time configurable, but it's easy enough to change in the source if you care enough to recompile. -DFEWBANDS will drop it from 75 to 20, or you can roll your own (waterfall.h line 28, waterfall.c lines 760-768).

Found a dumb mistake in my feature extractor a couple weeks ago. I finally bit the bullet last week and fixed it, rescaned all my data (100GB!), and retrained my classifiers. Got a 10% boost in accuracy, so it's not only more correct, but useful too, which is a nice bonus. My simple linear network can distinguish between techno and pop music with 91% accuracy, and it's only using spectral features. This is going to rock once I add tempo, beat strength, and rhythm signatures. I'm in a feature freeze until I submit the thesis though. Must... document...!

I needed a break from thesis writing, so I spent a few minutes and added something from my project back into my XMMS spectrum analyzer. Oooh. Pretty entropy. (I released it too, so everyone can play.)

Wow. Last night, someone showed me a short New Scientist blurb about automatic music classification (my thesis topic), and today it's all over slashdot. If that had happened six months ago, I could have gotten other people contributing code to my thesis. I probably would have had an easier time keeping my motivation up too. Working alone gets old after a few months.

The weirdest part though is seeing other people say some of the things I've been spouting for years, mostly about all the great applications for this. I kept thinking, "Yes! Yes! Yes! Now help me write it!"

I'd been planning to start an open project on music analysis after I finished here. I have to spend the next month writing up my results, but I can't waste all that good publicity, so I created a SourceForge project today, project name "vole". Picking a name was hard until I stopped trying to make it relevant. I also quickly put up some links to music analysis research in case anyone is actually interested.

tladuca wrote:

Few people take that step to get there heads around some large and complex project and help contribute to projects that are much more valuable to the community, [..] I really wish we each had a mechanism where other Advogato users could reply to our diary entries and have them show up.

Your path is clear. :-)

I agree with that feature wish though. I don't think diaries and articles are fundamentally different. I think it would be nice if I could see everything written by a certain person, regardless of the forum, and for each message, see the context and surf the threads. But I'm too busy to do anything about it right now.

In regards to your larger point, I think there are reasons to work on small independent projects that few people will use.

  • It's easier to work on tiny projects. There's no paradigm to inherit, no code to read, and no maintainer to convince.
  • Bad code doesn't affect anyone else.
  • It's fun to own a project.

There are points in favor of working on more popular packages too.

  • More people will benefit from your work.
  • More people will discuss your ideas with you.
  • More people will discuss your code with you.
  • More people will contribute to the software you use.
  • More poeple will have heard of you and might certify you on Advogato. ;-)
  • You'll get more teamwork experience.
  • Working in a team is fun.
  • You might learn from the code you have to read.
  • You might learn from the architecture you have to conform to.

In the past, I've done lots of my own independent projects, mostly because I haven't been aware of existing things that were close enough to what I wanted. I often submit small patches to other people's projects, but doing something major on someone else's project has a political overhead and I don't usually take the time to deal with it. It would probably be good for me though. Maybe I'll make time once I'm working again. (Being a grad student is far more time consuming than being an employee.)

5 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!