Some hour and a half ago I got this message on irc.
[23:06:03][juhovh] nano: fixed it
[23:06:08][juhovh] nano: it works
Yey! Finally the last piece of the puzzle has landed, well, the code must be converted to an xform plugin first, but very soon. Currently the phase vocoder uses a 45ms buffer, which is only noticable when you change the speed of the song, and for that it’s an ok latency. After the effect chain the output plugin feeds its data to the jack audio server which with the proper realtime patches has a latency of 2.9ms (according to qjackctl) on at least this computer. Pause and play happens in the output layer so the real latency is low enough for any DJ.
I’m so happy! Using XMMS2 as a DJ backend is now just a matter of writing the GUI.
Over the last couple of months I’ve been reading pvanhoof’s blog about his email reader called tinymail. I think he did the first posts about 3 million row treeview before christmas last year, and ever since I’ve been determined to get my hands dirty with the feared GtkTreeView widget.
Earlier this week, ehm last week (past midnight it seems), I started writing on what has now become a custom tree model specialized for xmms2 metadata.
GtkTreeView is a jungle. I almost gave up because of the dangerously high risk of braindamage when working with GtkTreeView, but the people at #gtk+ were helpful and about half an hour ago I finally managed to get it right.
There are still some bugs I have to take care of before letting it loose for client writers to use and abuse, but all the basics are there. It takes about 2 seconds to populate about 7500 rows of medialib ids and I think I know of a couple of places where speed could be noticeably improved. Another issue is the speed of resolving. When scrolling the list you see the entries resolve. It would be nice if the model could keep the 10 entries above and below the visible entries in memory, have to look into that later.
This is also the first project I’ve written using gob2, The GObject Builder, which is an object oriented language around C which you compile to regular C-sources later. It has been such a delight to use gob2. You don’t have to edit header files as you change your API, all the boilerplate code gets generated and you have nice macros for dealing with the common stuff. It also gives a much clearer view of the code. Another plus is that it’s possible to generate C++ code too. Gob2 is definatly the tool to use when writing GObjects.
The dynamic loading tree view model is also a part of my grand plans for a DJ application which I now think about writing in C++ using gtkmm as GUI toolkit. Andreas emailed me his phase vocoder some days ago and juhovh has been working on integrating it into xmms2, and nailing the last bugs. With the phase vocoder in xmms2, the last piece is in place and using xmms2 as a DJ backend is suddenly not so far away. The Hercules DJ Console works like a charm these days and I’ve been hacking on some alsa sequencer glib mainloop integration lately. When that has been accomplished it’s just loads and loads of gui code to write, but with just one week left of school and 3 months of nothingness ahead of me, it might just happen.