Friday, June 28, 2013

Week 2: Bringing code up to date

This week, I worked on bringing Keith's code up-to-date, eliminating some of the outdated slots and signals (e.g. slotSearch and doSearch) and the unnecessary custom WSelectorTrackTableView. I also fixed some of the bugs, such as filters remaining active after no song is playing (although I'm not sure if the logic is quite right; this requires more testing), and allow the user to set the seed track using drag-and-drop.

I made a first attempt at getting a custom score column into SelectorLibraryTableModel, but while it displays in the view, it cannot be used to sort, defeating the purpose. It seems like I may have to modify the behavior of LibraryTableModel further, perhaps by overriding BaseSqlTableModel::select and adding my custom sort after the SQL-based "m_trackSource->filterAndSort."

Per Max's suggestion, I also looked into Mirage, which offers a track similarity feature very similar to that provided by the Vamp plugin. It estimates a multivariate Gaussian model of the track's MFCCs, then uses the symmetric KL divergence between Gaussians as the distance function. The implementation may be more efficient, but the same basic idea (storing the model and calculating KL divergence on the fly) can be used without having to alter the Vamp plugin drastically.

It may be that Mirage's approach is better than the Queen Mary one, but it appears that it would require me to add some matrix math to Mixxx. I'm not sure if it's worth adding the additional complexity for this.

My goal for next week is two-fold: fix the score column so that it can actually be used to sort, and then start on integrating the timbral similarity function (whether the Queen Mary or Mirage version) so that there will be values upon which to sort.

No comments:

Post a Comment