Smooth Music and the LTM

It’s been a while since the last entry, but at least I’ve been up to some good. There have been some exciting happenings regarding Sonance, too numerous and exciting to post here, right now. However, lately I’ve been enjoying iTunes while developing Sonance. I now have an iPod, and am loving it – but it’s not just for play. Currently I am performing five concurrent tasks in iTunes, and am happy to say that Sonance’s backend is ready to handle the same tasks soon. All at once I am Ripping a CD, Importing music to the iPod, Downloading purchased music, Burning a CD, and listening to music. This task load started as me re-ripping most of my CD collection to AAC (vs OGG) in order to actually have content to fill the iPod. In many ways this is a shame – I’ve been using OGG for years, and the only reason to drop it is because the iPod doesn’t support it, and that really needs to change.

Anyway, Sonance handles all of its extensive IO tasks with no lag in the interface at all, like iTunes. This is due to the Library Transaction Manager (LTM). IO tasks are handled through Library Transactions, all which extend a base class, so the LTM can manage the actual transactions. Transactions of the same type cannot be executed concurrently, and are therefore executed in a queue (For instance, you couldn’t burn two CDs at once). However, transactions that are not of the same type can be executed concurrently (I can import, burn, rip, and listen all at once). Additionally, the LTM provides access to the top-most transaction (usually the last transaction initiated), and then an array of the top-most transactions of each type. The interface can then query each transaction for status information. This allows the UI to provide status pages like iTunes – the top-most transaction’s status is displayed first, with the option of cycling to other transactions.

Development for Sonance over the next three months is going to be extremely exciting. A few major target features are iPod support, CD Burning, and CD Ripping. More details on this are soon to follow, when I can find a spare moment.

In somewhat other news, I’ve implemented a nice test case for all sorts of common Drag-n-Drop functionality desired for GtkTreeViews, including multi-row DnD, drag reordering, drop between rows, and drop on a row (both vs. the default drop between or on). This functionality will be included in Sonance, but I wanted to iron out a test case for other projects and make sure the code might not suffer from unrelated factors. I’ll make this available when it’s a little more polished off, and I have another spare moment.