User Tools

Site Tools


gsoc2013_track_selector

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
gsoc2013_track_selector [2013/06/20 23:23]
chrisjr
gsoc2013_track_selector [2013/06/28 17:59] (current)
chrisjr edit class name, fix nesting
Line 9: Line 9:
 ====Overview==== ====Overview====
  
-The recommendations of the track suggestion feature will be available to the user through a "​Selector"​ option in the sidebar (and to other code, such as the AutoDJ feature, through the **SelectorRank** class). This feature should be usable whether the DJ is planning her set in advance or choosing the next track on the fly.+The recommendations of the track suggestion feature will be available to the user through a "​Selector"​ option in the sidebar (and to other code, such as the AutoDJ feature, through the **SelectorLibraryTableModel** class). This feature should be usable whether the DJ is planning her set in advance or choosing the next track on the fly.
  
 First, the library will be filtered according to user-specified criteria. The results will then be ranked based on several metrics, which are weighted according to the DJ's preferences. First, the library will be filtered according to user-specified criteria. The results will then be ranked based on several metrics, which are weighted according to the DJ's preferences.
Line 23: Line 23:
 Then, once there is a small pool of tracks to judge between, we can calculate a similarity score that measures the "​closeness"​ of each potential choice to the current track along a number of different dimensions. Then, once there is a small pool of tracks to judge between, we can calculate a similarity score that measures the "​closeness"​ of each potential choice to the current track along a number of different dimensions.
  
-This score is the sum of a set of similarity functions, each of which outputs a float between 0 and 1 inclusive, multiplied by weight coefficients which add to 1. These weights can be specified by the user (possibly as an ordered list, or by using sliders to determine their relative importance).+This score is the sum of a set of similarity functions, each of which outputs a float between 0 and 1 inclusive, multiplied by weight coefficients which add to 1. These weights can be specified by the user (possibly as an ordered list, or by using sliders to determine their relative importance). Then, the resulting similarity score will be shown as a match percentage, and used to sort the list of followups.
  
 Two measures of sonic similarity will be added using the Vamp plugin architecture:​ Two measures of sonic similarity will be added using the Vamp plugin architecture:​
Line 32: Line 32:
 Energy can be precalculated for all tracks along with the BPM and key analysis, and added as another column to the library table. Similarity is just (1 - difference in energy). Energy can be precalculated for all tracks along with the BPM and key analysis, and added as another column to the library table. Similarity is just (1 - difference in energy).
  
-The timbral similarity plugin ​returns distances for group of tracks in relation to a single starting point (i.e. the currently playing ​track). However, this would require N*(N+1)/2 analyses to calculate ​in advance ​for N tracksFor this reason, the similarity ​will instead ​be calculated on the fly solely for tracks that already meet other criteriai.e. matching BPM and key. These results will be cached.+The timbral similarity plugin ​will estimate ​multivariate Gaussian model of the MFCCs for each track in advance. ​Then, the symmetrized KL divergence ​will be calculated on the fly, finding the distance of each potential followup in relation to the seed track.
  
-**TODO: Testing is needed to determine whether the similarity plugin is sufficiently performant for this purpose, or if this idea should be scrapped.**  +Finally, genre metadata will be supplemented with free-text tags derived from online sources, including MusicBrainz and Last.FM. At analysis time, these tags will be downloaded and stored in a table of the local SQLite database. Then, a simple metric known as the Jaccard index (# of tags in common / total # of tags for both tracks) can be calculated to give a measure of similarity between 0 and 1, which will be added to the overall similarity score.
- +
-Finally, genre tags on audio files are sometimes too vague to be useful. Thus, genre metadata will be supplemented with free-text tags derived from online sources, including MusicBrainz and Last.FM. At analysis time, these tags will be downloaded and stored in a table of the local SQLite database. Then, a simple metric known as the Jaccard index (# of tags in common / total # of tags for both tracks) can be calculated to give a measure of similarity between 0 and 1.+
  
 ====Requirements==== ====Requirements====
  
   * Match tracks according to user-specified filters   * Match tracks according to user-specified filters
 +  * Precalculate Gaussian models of track MFCCs
   * Rank the results using similarity score   * Rank the results using similarity score
     * Retrieve additional metadata (genre tags) for tracks     * Retrieve additional metadata (genre tags) for tracks
     * Calculate track energy, tag similarity     * Calculate track energy, tag similarity
-    * Analyze ​(small) sets of tracks for rhythmic/​timbral similarity ​on the fly +    * Compare ​(small) sets of tracks for rhythmic/​timbral similarity ​using KL divergence
-    * must not interfere with performance (disable on slow machines, or even scrap?)+
   * GUI Widgets   * GUI Widgets
     * Selector view     * Selector view
-    ​* choose which filters are active +      ​* choose which filters are active 
-    * BPM range slider+      * BPM range slider
     * Selection criteria preference pane     * Selection criteria preference pane
-    ​* set the relative importance of similarity functions+      * set default filters  
 +      ​* set the relative importance of similarity functions
  
 =====Work Breakdown===== =====Work Breakdown=====
Line 58: Line 57:
     * modify **SearchQueryParser** to search for BPM range, keys in comparison to current track     * modify **SearchQueryParser** to search for BPM range, keys in comparison to current track
       * allow to search for previously-used as follow-up ​       * allow to search for previously-used as follow-up ​
-    * create ​**SelectorRank** class to return ​ranked ​list of songs according to user's weighted similarity function+    * modify ​**SelectorLibraryTableModel** class to rank a list of songs according to user's weighted similarity function
   * Energy and Timbral Similarity Plugins   * Energy and Timbral Similarity Plugins
     * **AnalyzerEnergy**     * **AnalyzerEnergy**
Line 69: Line 68:
     * **TODO: create generic class for getting and storing data from RESTful APIs?**     * **TODO: create generic class for getting and storing data from RESTful APIs?**
   * UI   * UI
-    * **SelectorLibraryTableView** 
     * **DlgSelector**     * **DlgSelector**
     * **DlgPrefSelector**     * **DlgPrefSelector**
gsoc2013_track_selector.txt · Last modified: 2013/06/28 17:59 by chrisjr