Show
Ignore:
Timestamp:
29.10.2013 13:29:50 (6 years ago)
Author:
davidb
Message:

Added mapping for ID3v1 genre number to text-string

Location:
gs2-extensions/music-ir-src/trunk/perllib/plugins
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • gs2-extensions/music-ir-src/trunk/perllib/plugins/MusicIRPlugin.pm

    r26276 r28549  
    178178    } 
    179179 
     180    ### $self->check_for_existing_id3_genre($doc_obj); 
     181 
    180182    $doc_obj->associate_file($metadata_acexml_filename, "jsongminer.xml",  
    181183                 "text/xml", $top_section); 
  • gs2-extensions/music-ir-src/trunk/perllib/plugins/jSongMinerExtractor.pm

    r26276 r28549  
    9393} 
    9494 
     95sub map_id3v1_genre_num 
     96{ 
     97    my ($genre_num) = @_; 
     98 
     99    $genre_num =~ s/(/\(/g; 
     100    $genre_num =~ s/)/\)/g; 
     101    $genre_num =~ s/^[\(\[\{](.*)[\)\]\}]$/$1/; 
     102 
     103    if (($genre_num =~ m/^\d+$/) && ($genre_num >= 148)) { 
     104    return "Unknown"; 
     105    } 
     106 
     107    my $lookup_id3v1_genre = { 
     108    "0"  => "Blues", 
     109    "1"  => "Classic Rock", 
     110    "2"  => "Country", 
     111    "3"  => "Dance", 
     112    "4"  => "Disco", 
     113    "5"  => "Funk", 
     114    "6"  => "Grunge", 
     115    "7"  => "Hip-Hop", 
     116    "8"  => "Jazz", 
     117    "9"  => "Metal", 
     118    "10" => "New Age", 
     119    "11" => "Oldies", 
     120    "12" => "Other", 
     121    "13" => "Pop", 
     122    "14" => "R&B", 
     123    "15" => "Rap", 
     124    "16" => "Reggae", 
     125    "17" => "Rock", 
     126    "18" => "Techno", 
     127    "19" => "Industrial", 
     128    "20" => "Alternative", 
     129    "21" => "Ska", 
     130    "22" => "Death Metal", 
     131    "23" => "Pranks", 
     132    "24" => "Soundtrack", 
     133    "25" => "Euro-Techno", 
     134    "26" => "Ambient", 
     135    "27" => "Trip-Hop", 
     136    "28" => "Vocal", 
     137    "29" => "Jazz+Funk", 
     138    "30" => "Fusion", 
     139    "31" => "Trance", 
     140    "32" => "Classical", 
     141    "33" => "Instrumental", 
     142    "34" => "Acid", 
     143    "35" => "House", 
     144    "36" => "Game", 
     145    "37" => "Sound Clip", 
     146    "38" => "Gospel", 
     147    "39" => "Noise", 
     148    "40" => "Alternative Rock", 
     149    "41" => "Bass", 
     150    "42" => "Soul", 
     151    "43" => "Punk", 
     152    "44" => "Space", 
     153    "45" => "Meditative", 
     154    "46" => "Instrumental Pop", 
     155    "47" => "Instrumental Rock", 
     156    "48" => "Ethnic", 
     157    "49" => "Gothic", 
     158    "50" => "Darkwave", 
     159    "51" => "Techno-Industrial", 
     160    "52" => "Electronic", 
     161    "53" => "Pop-Folk", 
     162    "54" => "Eurodance", 
     163    "55" => "Dream", 
     164    "56" => "Southern Rock", 
     165    "57" => "Comedy", 
     166    "58" => "Cult", 
     167    "59" => "Gangsta", 
     168    "60" => "Top 40", 
     169    "61" => "Christian Rap", 
     170    "62" => "Pop/Funk", 
     171    "63" => "Jungle", 
     172    "64" => "Native US", 
     173    "65" => "Cabaret", 
     174    "66" => "New Wave", 
     175    "67" => "Psychadelic", 
     176    "68" => "Rave", 
     177    "69" => "Showtunes", 
     178    "70" => "Trailer", 
     179    "71" => "Lo-Fi", 
     180    "72" => "Tribal", 
     181    "73" => "Acid Punk", 
     182    "74" => "Acid Jazz", 
     183    "75" => "Polka", 
     184    "76" => "Retro", 
     185    "77" => "Musical", 
     186    "78" => "Rock & Roll", 
     187    "79" => "Hard Rock", 
     188    "80" => "Folk", 
     189    "81" => "Folk-Rock", 
     190    "82" => "National Folk", 
     191    "83" => "Swing", 
     192    "84" => "Fast Fusion", 
     193    "85" => "Bebob", 
     194    "86" => "Latin", 
     195    "87" => "Revival", 
     196    "88" => "Celtic", 
     197    "89" => "Bluegrass", 
     198    "90" => "Avantgarde", 
     199    "91" => "Gothic Rock", 
     200    "92" => "Progressive Rock", 
     201    "93" => "Psychedelic Rock", 
     202    "94" => "Symphonic Rock", 
     203    "95" => "Slow Rock", 
     204    "96" => "Big Band", 
     205    "97" => "Chorus", 
     206    "98" => "Easy Listening", 
     207    "99" => "Acoustic", 
     208    "100" => "Humour", 
     209    "101" => "Speech", 
     210    "102" => "Chanson", 
     211    "103" => "Opera", 
     212    "104" => "Chamber Music", 
     213    "105" => "Sonata", 
     214    "106" => "Symphony", 
     215    "107" => "Booty Bass", 
     216    "108" => "Primus", 
     217    "109" => "Porn Groove", 
     218    "110" => "Satire", 
     219    "111" => "Slow Jam", 
     220    "112" => "Club", 
     221    "113" => "Tango", 
     222    "114" => "Samba", 
     223    "115" => "Folklore", 
     224    "116" => "Ballad", 
     225    "117" => "Power Ballad", 
     226    "118" => "Rhythmic Soul", 
     227    "119" => "Freestyle", 
     228    "120" => "Duet", 
     229    "121" => "Punk Rock", 
     230    "122" => "Drum Solo", 
     231    "123" => "Acapella", 
     232    "124" => "Euro-House", 
     233    "125" => "Dance Hall", 
     234    "126" => "Goa", 
     235    "127" => "Drum & Bass", 
     236    "128" => "Club - House", 
     237    "129" => "Hardcore", 
     238    "130" => "Terror", 
     239    "131" => "Indie", 
     240    "132" => "BritPop", 
     241    "133" => "Negerpunk", 
     242    "134" => "Polsk Punk", 
     243    "135" => "Beat", 
     244    "136" => "Christian Gangsta Rap", 
     245    "137" => "Heavy Metal", 
     246    "138" => "Black Metal", 
     247    "139" => "Crossover", 
     248    "140" => "Contemporary Christian", 
     249    "141" => "Christian Rock", 
     250    "142" => "Merengue", 
     251    "143" => "Salsa", 
     252    "144" => "Thrash Metal", 
     253    "145" => "Anime", 
     254    "146" => "JPop", 
     255    "147" => "Synthpop"  
     256    }; 
     257 
     258    my $mapped_genre; 
     259 
     260    if (defined $lookup_id3v1_genre->{$genre_num}) { 
     261    print STDERR "*** changing $genre_num -> ", $lookup_id3v1_genre->{$genre_num}, "\n"; 
     262    $mapped_genre = $lookup_id3v1_genre->{$genre_num}; 
     263    } 
     264    else { 
     265    $mapped_genre = $genre_num; 
     266    } 
     267 
     268    return $mapped_genre; 
     269} 
     270 
     271sub check_for_existing_id3_genre 
     272{ 
     273    my $self = shift @_; 
     274    my ($doc_obj) = @_; 
     275 
     276    my $top_section=$doc_obj->get_top_section(); 
     277 
     278    # Look for ex.ID3.Genre as well, as special case 
     279    my $genre_md_list = $doc_obj->get_metadata($top_section,"ex.ID3.Genre"); 
     280    my @new_genre_md_list = (); 
     281     
     282    foreach my $gv (@$genre_md_list) { 
     283    print STDERR "*** got match on ex.ID3.Genre -> '$gv'\n"; 
     284    my $new_gv = map_id3v1_genre_num($gv); 
     285         
     286    push(@new_genre_md_list,$new_gv); 
     287    } 
     288     
     289    $doc_obj->delete_metadata($top_section,"ex.ID3.Genre"); 
     290    foreach my $gv (@new_genre_md_list) { 
     291    $doc_obj->add_utf8_metadata($top_section,"ex.ID3.Genre",$gv); 
     292    } 
     293} 
     294 
     295 
    95296sub parse_txt_metadata 
    96297{ 
    97298    my $self = shift @_; 
    98299    my ($doc_obj,$target_txt_file_path) = @_; 
     300 
     301    print STDERR "**#####** jSongMiner parsing txt metadata\n"; 
    99302 
    100303    if (open(MIN,"<$target_txt_file_path")) { 
     
    121324        $md_name =~ s/(API)?\^/./; 
    122325 
     326#       print STDERR "*** md_name = '$md_name'\n"; 
     327 
     328        if ($md_name =~ m/genre$/i) { 
     329        print STDERR "*** got match on $md_name -> $md_value\n"; 
     330        $md_value = map_id3v1_genre_num($md_value); 
     331        } 
     332 
    123333        $doc_obj->add_utf8_metadata($top_section,$md_name,$md_value); 
    124334    } 
    125335 
    126336    close(MIN); 
     337 
     338    $self->check_for_existing_id3_genre($doc_obj); 
     339 
    127340    } 
    128341    else {