diff core/magnatagatune/LFMTagsDB.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/LFMTagsDB.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,129 @@
+% ---
+% This is the wrapper and loader class for Last.Fm db
+% and related data
+% ---
+
+classdef LFMTagsDB < handle
+    
+    properties
+       
+       % connects the last.fm artists to MTTartist ids
+       matching_artists;
+       
+       % saves the last fm tags for last.fm artist ids
+       tagdb;
+    end
+    
+    properties(Dependent)
+        
+       lexicon;
+    end
+    
+    
+    methods
+        function db = LFMTagsDB(artistdb)
+            
+            % load data
+            load last.fm.mat;
+
+            % ---
+            % NOTE: here, we save the corresponding magnatagatune
+            % artists. There make sure that the last.fm artists 
+            % are properly associated!
+            %
+            % finally, the central last.fm artist index will refer 
+            % to both the MTT artist database and the tags
+            % ----
+            
+            % get all the clips artists
+            artists = artistdb.lexicon;
+
+            % assign artists to Last.Fm artists
+            lexicon = [];
+            annots = [];
+            
+            justfmartists = fmartists(:,2);
+            for i = 1:numel(justfmartists)
+                
+                %get matching MTT for each Last.fm artist
+                pos = strcellfind(artists, justfmartists{i});
+                
+                % save its id 
+                if ~isempty(pos)
+                    associds(i) = artistdb.get_annot_id(artists{pos});
+                end
+            end
+            
+            % ---
+            % TODO: assert wheather if the fmartist id actually coincide
+            % justfmartists_ids = matching_artists.get_annotid(justfmartists);
+            % ---
+            
+            % call superclass constructor
+            db.tagdb = AnnotDB(fmartist_annots_names, ...
+                fmartist_annots, associds);
+            
+            % save the mathing artists
+            db.matching_artists = AnnotDB('clips_by_annot', ...
+                justfmartists, associds);
+            
+        end
+    end
+    
+    
+    methods
+        
+       % retrieve annot by clip
+       function [out, score, aid] = annots(db, clip)
+           
+           % ---
+           % NOTE: we retrieve the tags for the artist matching the clips
+           % one
+           % ---
+           
+           fma_id = db.matching_artists.annotids_for_owner(clip.artist_id());
+           
+           artist = clip.artist();
+           
+           if ~isempty(fma_id)
+               
+                [out, score, aid] = db.tagdb.annots(fma_id);
+           else
+               warning('Artist %s not found in Last.fm tags DB', artist);
+           end
+       end 
+       
+        function out = annotids_for_owner(db, clip)
+           
+           % ---
+           % NOTE: we retrieve the tags for the artist matching the clips
+           % one
+           % ---
+           
+           fma_id = db.matching_artists.annotids_for_owner(clip.artist_id());
+           
+           artist = clip.artist();
+           
+           if ~isempty(fma_id)
+               
+                out = db.tagdb.annotids_for_owner( fma_id );
+           else
+               warning('Artist %s not found in Last.fm tags DB', artist);
+           end
+        end 
+       
+        function out = get.lexicon(db)
+        % gives back all the tags
+            
+            out = db.tagdb.lexicon;
+        end
+    end
+    
+    methods(Static)
+        
+        
+    end
+end
+    
+    
+    
\ No newline at end of file