diff --git a/beetsplug/lastgenre/aliases.yaml b/beetsplug/lastgenre/aliases.yaml new file mode 100644 index 000000000..a76c4f099 --- /dev/null +++ b/beetsplug/lastgenre/aliases.yaml @@ -0,0 +1,72 @@ +# Ampersands / Delimiters +drum and bass: + - d(rum)?[ &n/]*b(ass)? +r&b: + - r(hythm)?[ &n/]*b(lues)? +rock and roll: + - rock[- ‐'&n/]*roll + +# Hyphenation +\1-\2: + - ([ckj])[- ]*(pop) + - (j)[- ]*(rock) + - (post)[- ]*(\w+) + - (g?lo)[- ]*(fi) + - ([pg])[- ]*(funk) + - (synth)[- ]*(pop) +avant-garde: + - avant[- ]*(garde?)? + +# Adding space +\1 \2: + - (nu)[ -]*(disco|jazz|metal|soul) + - (dark)[ -]*(wave) + - (blues|folk|indie|gothic|progressive|alternative|punk)[ -]*(rock) + - (ska)[ -]*(jazz) + - (synth)[- ]*(funk) + - (glitch|hip|trip)y?(?:[ -]*hip)?[ -]*(hop) + +# Removing delimiters +\1\2: + - (synth)[- ]*(wave) + - (psy)[ -]*(trance) + - (chill)[ -]*(out) + +# Old School spellings: old-school death metal, oldschool hip-hop, old-skool-jungle/-hardcore +old school death metal: + - old[ -]*(?:school|skool)[ -]+death[ -]*metal +old school hip hop: + - old[ -]*(?:school|skool)[ -]+hip[ -]*hop +old school \1: + - old[ -]*(?:school|skool)[ -]+(\w+) + +# Terminology / Synonyms +electronic: + - electronic music +world music: + - world +downtempo: + - down[ -]*beat +shoegaze: + - shoegaz(e?r?|ing) +footwork: + - (chicago )?footwork( music)? +juke: + - (chicago )?juke( music| house)? + +# Compound genres +alternative rock: + - alt[ -]*rock +# negative lookahead avoids matching 'gothic metal' +gothic rock: + - goth(?!ic)([ -]*rock)? +# avoids matching 'progressive metal' +progressive rock: + - prog([ -]*rock)? +punk rock: + - punk +# psy folk, psych-pop, psychedelic-rock, psychedelic soul, but not psychedelic (standalone) +psychedelic \1: + - psy(?:ch(?:edelic)?)?[ -]*(folk|pop|rock|soul) +dixieland: + - dixieland[ -]*jazz diff --git a/beetsplug/lastgenre/genres-tree.yaml b/beetsplug/lastgenre/genres-tree.yaml index d7acfbc1f..d97568b21 100644 --- a/beetsplug/lastgenre/genres-tree.yaml +++ b/beetsplug/lastgenre/genres-tree.yaml @@ -257,6 +257,7 @@ - broken beat - florida breaks - nu skool breaks + - breaks - chiptune: - bitpop - game boy music @@ -268,12 +269,12 @@ - disco polo - euro disco - italo disco - - nu-disco + - nu disco - space disco - downtempo: - acid jazz - balearic beat - - chill out + - chillout - dub music - dubtronica - ethnic electronica @@ -293,7 +294,7 @@ - jungle: - darkside jungle - ragga jungle - - oldschool jungle + - old school jungle - raggacore - sambass - techstep @@ -327,7 +328,7 @@ - indietronica - new rave - space rock - - synthpop + - synth-pop - synthpunk - electronica: - berlin school @@ -358,6 +359,7 @@ - happy hardcore - hardstyle - jumpstyle + - old school hardcore - makina - speedcore - terrorcore @@ -426,6 +428,7 @@ - dub techno - free tekno - ghettotech + - industrial techno - minimal - nortec - schranz @@ -437,9 +440,10 @@ - acid trance - classic trance - dream trance - - goa trance: + - psytrance: - dark psytrance - full on + - goa trance - psybreaks - psyprog - suomisaundi @@ -492,8 +496,8 @@ - gangsta rap - glitch hop - golden age hip hop + - hardcore hip hop - hip hop soul - - hip pop - hyphy - industrial hip hop - instrumental hip hop @@ -620,11 +624,13 @@ - turkish pop - vispop - wonky pop -- rhythm and blues: +- r&b: - funk: - deep funk - go-go - p-funk + - synth funk + - minneapolis sound - soul: - blue-eyed soul - neo soul @@ -670,6 +676,7 @@ - death/doom - goregrind - melodic death metal + - old school death metal - technical death metal - doom metal: - epic doom metal @@ -708,6 +715,7 @@ - traditional heavy metal - math rock - new wave: + - synthwave - world fusion - paisley underground - pop rock @@ -786,7 +794,7 @@ - chanson - canción de autor - nueva canción -- world: +- world music: - world dub - world fusion - worldbeat diff --git a/beetsplug/lastgenre/genres.txt b/beetsplug/lastgenre/genres.txt index 571b6f350..c13bf5399 100644 --- a/beetsplug/lastgenre/genres.txt +++ b/beetsplug/lastgenre/genres.txt @@ -1,5 +1,5 @@ 2 tone -2-step garage +2-step 4-beat 4x4 garage 8-bit @@ -12,10 +12,12 @@ acid rock acoustic music acousticana adult contemporary music +african african popular music african rumba afrobeat aleatoric music +alternative alternative country alternative dance alternative hip hop @@ -112,7 +114,7 @@ blue-eyed soul bluegrass blues blues ballad -blues-rock +blues rock boogie boogie woogie boogie-woogie @@ -123,6 +125,7 @@ brazilian jazz breakbeat breakbeat hardcore breakcore +breaks breton music brill building pop britfunk @@ -227,6 +230,7 @@ chicano rap chicha chicken scratch children's music +chill chillout chillwave chimurenga @@ -234,6 +238,7 @@ chinese music chinese pop chinese rock chip music +chiptune cho-kantrum chongak chopera @@ -336,7 +341,6 @@ dabka dadra daina dalauna -dance dance music dance-pop dance-punk @@ -349,10 +353,10 @@ danza danzón dark ambient dark cabaret +dark wave dark pop darkcore darkstep -darkwave de ascultat la servici de codru de dragoste @@ -395,7 +399,6 @@ disney pop diva house divine rock dixieland -dixieland jazz djambadon djent dodompa @@ -415,6 +418,7 @@ drone metal drone music dronology drum and bass +drumfunk dub dub house dubanguthu @@ -497,6 +501,7 @@ folk pop folk punk folk rock folktronica +footwork forró franco-country freak-folk @@ -518,6 +523,7 @@ full on funaná funeral doom funk +funk / soul funk metal funk rock funkcore @@ -679,6 +685,7 @@ impressionist music improvisational incidental music indian pop +indie indie folk indie music indie pop @@ -688,12 +695,13 @@ indo jazz indo rock indonesian pop indoyíftika +industrial industrial death metal industrial hip hop industrial metal -industrial music industrial musical industrial rock +industrial techno instrumental rock intelligent dance music international latin @@ -755,6 +763,8 @@ jtek jug band jujitsu juju +juke +juke/footwork juke joint blues jump blues jumpstyle @@ -968,6 +978,7 @@ min'yo mineras mini compas mini-jazz +minimal minimal techno minimalist music minimalist trance @@ -1063,7 +1074,7 @@ nintendocore nisiótika no wave noh -noise music +noise noise pop noise rock nongak @@ -1074,6 +1085,7 @@ nortec norteño northern soul nota +nu disco nu jazz nu metal nu soul @@ -1083,7 +1095,10 @@ nyatiti néo kýma obscuro oi! +old school death metal +old school hardcore old school hip hop +old school jungle old-time oldies olonkho @@ -1190,11 +1205,13 @@ progressive trance progressive thrash metal protopunk psych folk +psychedelic folk psychedelic music psychedelic pop psychedelic rock -psychedelic trance +psychedelic soul psychobilly +psytrance punk blues punk cabaret punk jazz @@ -1249,8 +1266,7 @@ renaissance music requiem rhapsody rhyming spiritual -rhythm & blues -rhythm and blues +r&b ricercar riot grrrl rock @@ -1314,6 +1330,7 @@ shabad shalako shan'ge shango +shangaan electro shape note shibuya-kei shidaiqu @@ -1328,8 +1345,10 @@ sica siguiriyas silat sinawi +singer-songwriter situational ska +ska jazz ska punk skacore skald @@ -1406,9 +1425,11 @@ symphonic metal symphonic poem symphonic rock symphony +synth-pop +synth funk synthcore -synthpop synthpunk +synthwave t'ong guitar taarab tai tu @@ -1454,6 +1475,7 @@ tinga tinku toeshey togaku +trad trad jazz traditional bluegrass traditional heavy metal diff --git a/test/plugins/test_lastgenre.py b/test/plugins/test_lastgenre.py index 5c1e19f04..32eca9294 100644 --- a/test/plugins/test_lastgenre.py +++ b/test/plugins/test_lastgenre.py @@ -1039,17 +1039,20 @@ class TestAliases: [ ("dnb", "drum and bass"), ("drum n bass", "drum and bass"), - ("r&b", "rhythm and blues"), - ("rnb", "rhythm and blues"), + ("r&b", "r&b"), + ("rnb", "r&b"), ("rock & roll", "rock and roll"), ("rock'n'roll", "rock and roll"), ("kpop", "k-pop"), + ("k -pop", "k-pop"), ("j rock", "j-rock"), ("post rock", "post-rock"), ("lofi", "lo-fi"), ("lo fi", "lo-fi"), ("p funk", "p-funk"), - ("synth pop", "synthpop"), + ("synth funk", "synth funk"), + ("synth pop", "synth-pop"), + ("synth-wave", "synthwave"), ("avantgarde", "avant-garde"), ("avant gard", "avant-garde"), ("nu-jazz", "nu jazz"), @@ -1059,11 +1062,11 @@ class TestAliases: ("nu - disco", "nu disco"), ("electronic music", "electronic"), ("world", "world music"), - ("chill", "chillout"), + ("chill", "chill"), ("chill out", "chillout"), ("chill-out", "chillout"), - ("dark wave", "darkwave"), - ("dark-wave", "darkwave"), + ("dark wave", "dark wave"), + ("dark-wave", "dark wave"), ("blues rock", "blues rock"), ("blues-rock", "blues rock"), ("folk-rock", "folk rock"), @@ -1072,17 +1075,29 @@ class TestAliases: ("shoegazing", "shoegaze"), ("hip-hop", "hip hop"), ("triphop", "trip hop"), - ("alt", "alternative rock"), + ("punk", "punk rock"), + ("alt", "alt"), ("alt rock", "alternative rock"), - ("alternative", "alternative rock"), + ("alternative", "alternative"), ("goth", "gothic rock"), ("goth rock", "gothic rock"), ("gothic rock", "gothic rock"), ("prog", "progressive rock"), ("prog rock", "progressive rock"), ("progressive rock", "progressive rock"), - ("trad", "traditional folk"), - ("traditional", "traditional folk"), + ("trad", "trad"), + ("traditional", "traditional"), + ("indie", "indie"), + ("indie rock", "indie rock"), + ("juke/footwork", "juke/footwork"), + ("Funk / Soul", "funk / soul"), + ("psy-trance", "psytrance"), + ("psy rock", "psychedelic rock"), + ("psych-pop", "psychedelic pop"), + ("disney", "disney"), + ("old-school death-metal", "old school death metal"), + ("old-skool-hip-hop", "old school hip hop"), + ("old school-jungle", "old school jungle"), ], ) def test_default_alias_patterns(self, config, input_genre, expected_genre):