Skip to content

Commit

Permalink
- Debug: added multiple letter case checks at debug.
Browse files Browse the repository at this point in the history
- Debug: added accent checks (instead of single quotes) at debug.
- Debug: added ASCII compatibility checks at debug.
- Descriptors: fixed multiple letter case errors.
- Descriptors: fixed accent usage instead of single quote.
- Cultural Regions: improved capitalization logic.
  • Loading branch information
regorxxx committed Apr 11, 2022
1 parent 055c9c5 commit 30a15fb
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 17 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,17 @@
- HTML: Selecting a node and pressing shift while hovering another node highlights the shortest path between them.
- HTML: Added favicon.
- Debug: added 'graphStatistics' function which will perform basic statistical analysis over the entire graph, providing variables like: mean, median, standard deviation, distance histogram, etc. Given those values, it's reasonably easy to 'choose' the right values to retrieve nodes for a given distance threshold.
- Debug: added multiple letter case checks at debug.
- Debug: added accent checks (instead of single quotes) at debug.
- Debug: added ASCII compatibility checks at debug.
### Changed
- HTML: Changed CSS layout to adjust sizes according to window.
### Removed
### Fixed
- Descriptors: fixed multiple letter case errors.
- Descriptors: fixed accent usage instead of single quote.
- Cultural Regions: improved capitalization logic.
- Progress code in multiple tools have been fixed to display more accurately the percentage progress in the log.

## [1.1.0] - 2021-12-23
### Added
Expand Down
18 changes: 9 additions & 9 deletions helpers/music_graph_descriptors_xxx.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
//03/04/22
//05/04/22

/*
These are the variables of the music graph: nodes (styles and genres), links, link weighting (aka distance) and rendering settings.
Expand Down Expand Up @@ -100,27 +100,27 @@ const music_graph_descriptors = {
['Celtic Folk_supergenre' , ['Circle','Jig','Scottish','Celtic Folk','Traditional European Folk','Bal Folk','Irish','Scottish Folk','Celtic New Age']],
['African Folk_supergenre' , ['Desert Blues','Malian Folk','Griot','Isicathamiya','Mauritanian Folk','Niger Folk','Nubian Folk','Sahrawi Folk','Tishoumaren','Gnawa']],
['Asian Folk_supergenre' , ['Tuvan','Hindustani','Israeli Folk','Afghan Folk']],
['European Folk_supergenre' , ['British Folk-Rock','British Folk-Jazz','Folk Baroque','Andro','Bourree','Bresse','Chapelloise','Circle','Farelquesh','Gavotte','Hanterdro','Kost ar c`hoad','Laridé','Mazurka','Jig','Plinn','Polka','Rond','Scottish','Tarantella','Tricot','Vals','Traditional European Folk','Bal Folk','German Folk','Irish','Scottish Folk','Romani','Georgian Folk']],
['European Folk_supergenre' , ['British Folk-Rock','British Folk-Jazz','Folk Baroque','Andro','Bourree','Bresse','Chapelloise','Circle','Farelquesh','Gavotte','Hanterdro','Kost ar C\'hoad','Laridé','Mazurka','Jig','Plinn','Polka','Rond','Scottish','Tarantella','Tricot','Vals','Traditional European Folk','Bal Folk','German Folk','Irish','Scottish Folk','Romani','Georgian Folk']],
['South European Folk_supergenre' , ['Cantautor','Rumba','Rumba Catalana','Rumba Fusión','Flamenco','Fado','Jota','Spanish Folk','Traditional European Folk','Éntekhno']],
['Country_supergenre' , ['Alt. Country','Americana','Neo-Traditional Country','Contemporary Country','Outlaw Country','Country Pop','Country Rock','Nashville Sound','Bakersfield Sound','Progressive Bluegrass','Bluegrass','Honky Tonk','Old-Timey','Hillbilly','Country Boogie']],
['R&B_supergenre' , ['Funktronica','Contemporary R&B','Ambient Funk','Urban Soul','Future Soul','Neo Soul','Electrofunk','Deep Funk','Disco','Soul Blues','Smooth Soul','Disco','Classic Funk','P-Funk','Funk Rock','Contemporary Funk','Psychedelic Funk','Psychedelic Soul','New Orleans R&B','Funk Blues','Deep Funk Revival','Philadelphia Soul','Motown Sound','Southern Soul','Doo Wop','R&B']],
['Blues_supergenre' , ['Contemporary Blues','Desert Blues','Hill Country Blues','Soul Blues','Modern Electric Blues','Psychedelic Blues','Blues Rock','Funk Blues','British Blues','Zydeco','Chicago Blues','Detroit Blues','Memphis Blues','Jump Blues','Texas Blues','Piano Blues','Vaudeville Blues','Country Blues','Delta Blues']],
['Gospel_supergenre' , ['Contemporary Christian Music','Christian Rock','Modern Gospel','Ragtime','Stride','Traditional Gospel','Spirituals','Worksongs']],
['Jazz_supergenre' , ['Third Stream','Contemporary Jazz','Electro Swing','Nordic Jazz','Nu Jazz','Future Jazz','Acid Jazz','Smooth Jazz','Jazz-Rock','Fusion','Post-Bop','Free Jazz','Avant-Garde Jazz','Soul-Jazz','Jazz-Blues','Jazz-Funk','Hard-Bop','Cool Jazz','Bebop','New Orleans Jazz Revival','Dixieland Revival','Modal Jazz','Latin-Jazz','Fado','Bossa Nova','Swing','Mainstream Jazz','Gypsy-Jazz','Big Band','Chicago Jazz','New Orleans Jazz','Dixieland']],
['Jamaican_supergenre' , ['Reggaeton','Ragga Hip-Hop','Ska Revival','Reggae Fusion','Ragga','Dancehall','Ska revival','UK Reggae','Dub','Roots Reggae','Rocksteady','Ska','Calypso','Mento']],
['Jamaican_supergenre' , ['Reggaeton','Ragga Hip-Hop','Ska Revival','Reggae Fusion','Ragga','Dancehall','UK Reggae','Dub','Roots Reggae','Rocksteady','Ska','Calypso','Mento']],
['Rap_supergenre' , ['Glitch Hop','Urban Breaks','Trap','Hip-Hop Soul','Pop Rap','Conscious','British Hip-Hop','South Coast','Midwest','East Coast','Gangsta','Horrorcore','Reggaeton','Progressive Rap','Ragga Hip-Hop','Jazz-Rap','West Coast','Miami Bass','Bounce','Golden Age','Hardcore Rap','Melodic Hardcore','Electro','Old-School','Alt. Rap','Underground Rap','Psychedelic Rap']],
['Breakbeat_supergenre' , ['EDM Trap','Future Bass','Bassline','Glitch Hop','Breakbeat Garage','Broken Beats','Nu Skool Breaks','UK Garage','Chemical Breaks','Big Beat','Trip Hop','Florida Breaks','Breakdance','Electro']],
['Drum & Bass_supergenre' , ['Future Bass','Post-Dubstep','Dubstep','Bassline','Breakbeat Garage','Liquid Funk','Neuro Funk','Intelligent Drum & Bass','Ambient Drum & Bass','Jazzstep','Jump up','Hardstep','Techstep','Darkcore','Darkstep','Old School Jungle']],
['Drum & Bass_supergenre' , ['Future Bass','Post-Dubstep','Dubstep','Bassline','Breakbeat Garage','Liquid Funk','Neuro Funk','Intelligent Drum & Bass','Ambient Drum & Bass','Jazzstep','Jump Up','Hardstep','Techstep','Darkcore','Darkstep','Old School Jungle']],
['Hardcore_supergenre' , ['New Beat','Hardcore Techno','Hardcore Rave','Breakbeat Hardcore','Darkcore','Darkstep','Happy Hardcore','Bouncy Techno','Trancecore','Acidcore','Gabber','Speedcore','Frenchcore','Terrorcore','Nu Style Gabber','Mainstream Hardcore','Hardstyle']],
['Techno_supergenre' , ['Ghetto House','Ghettotech','Juke','Hardtechno','Tech Trance','Tech House','Industrial Techno','Minimal Techno','Ambient Techno','IDM','Hardtek','(Free)Tekno','Hardcore Techno','Hardcore Rave','New Beat','Detroit Techno']],
['Techno_supergenre' , ['Ghetto House','Ghettotech','Juke','Hardtechno','Tech Trance','Tech House','Industrial Techno','Minimal Techno','Ambient Techno','IDM','Hardtek','Freetekno','Hardcore Techno','Hardcore Rave','New Beat','Detroit Techno']],
['House_supergenre' , ['Fidget House','Electro House','Moombahton','Microhouse','Minimal House','Ghetto House','French House','Funky House','Tech House','NRG','Hard NRG','Hard House','Progressive House','Deep House','Ibiza House','Ibiza Trance','Dream House','Dream Trance','Hip House','Eurodance','Acid House','Chicago House','Garage House']],
['Trance_supergenre' , ['Neo Trance','Epic Trance','Hardtrance','NRG','Hard NRG','Hard House','Eurotrance','Vocal Trance','Progressive Trance','Goa Trance','Psytrance','Ibiza House','Ibiza Trance','Dream House','Dream Trance','Classic Trance','Acid Trance']],
['Downtempo_supergenre' , ['Synthwave','Vaporwave','Minimal Wave','Nu Jazz','Minimal Industrial','Digital Minimalism','Glitch','Ambient Breaks','Illbient','Chill-Out Downtempo','Ambient House','Ambient','Ambient Electronic','Ambient New Age','Nature Music','New Age','Neo-Classical New Age','Hang Music','Healing Music','New Age','New Acoustic','Dark Ambient','Dark Industrial','Bit Music','Synth','Muzak','Minimalism','Lounge','Exotica','Musique Concrete']],
['Classical Medieval Era_supergenre', ['Ballata','Estampie','Gregorian','Chant','Madrigal','Motet','Organum','Saltarero']],
['Classical Renaissance Era_supergenre',['Choral','Ballade','Canzona','Carol','Fantasia','Galliard','Intermedio','Lauda','Litany','Madrigal','Madrigal','comedy','Madrigale','spirituale','Mass','Motet','Motet-chanson','Opera','Pavane','Ricercar','Sequence','Tiento','Toccata']],
['Classical Renaissance Era_supergenre',['Choral','Ballade','Canzona','Carol','Fantasia','Galliard','Intermedio','Lauda','Litany','Madrigal','Madrigal','Comedy','Madrigale Spirituale','Mass','Motet','Motet-Chanson','Opera','Pavane','Ricercar','Sequence','Tiento','Toccata']],
['Classical Baroque Era_supergenre', ['Allemande','Canon','Cantata','Chaconne','Concerto','Courante','Fugue','Classical Gavotte','Gigue','Mass','Minuet','Opera','Opera','Oratorio','Partita','Passacaglia','Passepied','Prelude','Sarabande','Sinfonia','Sonata','Suite','Sonatina']],
['Classical Classical Era_supergenre', ['Bagatelle','Ballade','Ballet','Caprice','Carol','Concerto','Dance','Divertimento','Étude','Fantasy','Impromptu','Intermezzo','Lied','Mass','Classical Mazurka','March','Music','hall','Nocturne','Octet','Opera','Oratorio','Polonaise','Prelude','Quartet','Quintet','Requiem','Rhapsody','Rondo','Scherzo','Serenade','Sinfonia','concertante','Sonata','Symphony','Suite','Waltz']],
['Classical Romantic Era_supergenre', ['Bagatelle','Ballade','Ballet','Caprice','Carol','Concerto','Dance','Divertimento','Étude','Fantasy','Impromptu','Intermezzo','Lied','Mass','Classical Mazurka','March','Music','hall','Nocturne','Octet','Opera','Oratorio','Polonaise','Prelude','Quartet','Quintet','Requiem','Rhapsody','Rondo','Scherzo','Serenade','Sinfonia','concertante','Sonata','Symphony','Suite','Waltz']],
['Classical Classical Era_supergenre', ['Bagatelle','Ballade','Ballet','Caprice','Carol','Concerto','Dance','Divertimento','Étude','Fantasy','Impromptu','Intermezzo','Lied','Mass','Classical Mazurka','March','Music Hall','Nocturne','Octet','Opera','Oratorio','Polonaise','Prelude','Quartet','Quintet','Requiem','Rhapsody','Rondo','Scherzo','Serenade','Sinfonia Concertante','Sonata','Symphony','Suite','Waltz']],
['Classical Romantic Era_supergenre', ['Bagatelle','Ballade','Ballet','Caprice','Carol','Concerto','Dance','Divertimento','Étude','Fantasy','Impromptu','Intermezzo','Lied','Mass','Classical Mazurka','March','Music Hall','Nocturne','Octet','Opera','Oratorio','Polonaise','Prelude','Quartet','Quintet','Requiem','Rhapsody','Rondo','Scherzo','Serenade','Sinfonia Concertante','Sonata','Symphony','Suite','Waltz']],
['Classical Modernist Era_supergenre', ['Avant-Garde Classical','Contemporary Classical','Neo-Classical','Third Stream','Ambient Classical']],
['Japanese Classical_supergenre', ['Kabuki']],
['Indian Classical_supergenre', ['Hindustani']]
Expand Down Expand Up @@ -189,7 +189,7 @@ const music_graph_descriptors = {
['Traditional American Folk XL' , ['American Primitive Guitar','Neo-Traditional Folk','Traditional American Folk','Appalachian']],
['Asian Folk XL' , ['Tuvan','Hindustani','Israeli Folk','Afghan Folk']],
['African Folk XL' , ['Desert Blues','Malian Folk','Griot','Isicathamiya','Mauritanian Folk','Niger Folk','Nubian Folk','Sahrawi Folk','Tishoumaren','Gnawa']],
['Bal Folk XL' , ['Andro','Bourree','Bresse','Chapelloise','Circle','Farelquesh','Gavotte','Hanterdro','Jig','Kost ar c`hoad','Laridé','Mazurka','Jig','Plinn','Polka','Rond','Scottish','Tarantella','Tricot','Vals']],
['Bal Folk XL' , ['Andro','Bourree','Bresse','Chapelloise','Circle','Farelquesh','Gavotte','Hanterdro','Jig','Kost ar C\'hoad','Laridé','Mazurka','Jig','Plinn','Polka','Rond','Scottish','Tarantella','Tricot','Vals']],
['European Folk XL' , ['Celtic Folk','Traditional European Folk','Bal Folk','Éntekhno','Folk Metal','Pagan Folk','German Folk','Irish','Jig','Scottish Folk','Romani']],
['Celtic Folk XL' , ['Celtic Folk','Folk Metal','Pagan Folk']],
['European Pre-Modern Folk XL' , ['Medieval','Renaissance']],
Expand Down
43 changes: 40 additions & 3 deletions helpers/music_graph_xxx.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
//04/02/22
//05/02/22

// Required since this script is loaded on browsers for drawing too!

Expand Down Expand Up @@ -346,6 +346,7 @@ function music_graph_fordrawing(descriptor = music_graph_descriptors) {

/*
Extensive graph checking for debugging. Use this along the html rendering to check there are no duplicates, wrong links set, not connected nodes, typos, etc.
Unoptimized code on multiple loops since this should be run only on demand for testing once on a while...
*/
function graphDebug(graph = music_graph(), bShowPopupOnPass = false) {
console.log('music_graph_descriptors_xxx: Basic debug enabled');
Expand Down Expand Up @@ -560,6 +561,44 @@ function graphDebug(graph = music_graph(), bShowPopupOnPass = false) {
bWarning = true;
}
});
// Check letter case
music_graph_descriptors.style_supergenre.forEach( (nodePair) => {
const nodeList = nodePair[1];
const sep = /([ \-&])/g; // Added parentheses so they are also included on the split array
const otherRegEx = [[/\bXL\b/ig, 'XL'], [/\bEDM\b/ig, 'EDM'], [/\bNRG\b/ig, 'NRG'], [/\bUK\b/ig, 'UK'], [/\bIDM\b/ig, 'IDM'], [/\bar\b/ig, 'ar']];
nodeList.forEach( (node) => {
let capNode = node.split(sep).map( (subS) => {return subS.charAt(0).toUpperCase() + subS.slice(1).toLowerCase();}).join('');
otherRegEx.forEach((rgex) => {capNode = capNode.replace(rgex[0], rgex[1]);});
if (capNode !== node) {
console.log('music_graph_descriptors_xxx Warning: \'style_supergenre\' has nodes not following standard letter case. Check \'Graph nodes and links\' section\n' + ' ' + node);
bWarning = true;
}
});
});
// Check ASCII compatibility
music_graph_descriptors.style_supergenre.forEach( (nodePair) => {
const nodeList = nodePair[1];
const asciiRegEx = [[/[\u0300-\u036f]/g, ''], [/\u0142/g, 'l']];
nodeList.forEach( (node) => {
let asciiNode = node.normalize('NFD');
asciiRegEx.forEach((rgex) => {asciiNode = asciiNode.replace(rgex[0], rgex[1]);});
if (asciiNode !== node) {
console.log('music_graph_descriptors_xxx Warning: \'style_supergenre\' has nodes not compatible with ASCII. Check \'Graph nodes and links\' section\n' + ' ' + node);
bWarning = true;
}
});
});
// Check accents instead of single quotes
music_graph_descriptors.style_supergenre.forEach( (nodePair) => {
const nodeList = nodePair[1];
const regEx = /[`´]/g;
nodeList.forEach( (node) => {
if (node.search(regEx) !== -1) {
console.log('music_graph_descriptors_xxx Warning: \'style_supergenre\' has nodes not following single quote usage (\'). Check \'Graph nodes and links\' section\n' + ' ' + node);
bWarning = true;
}
});
});
// Test basic paths using the graph.
// Try to load the already existing graph, otherwise uses a new one. If debug is called without the required dependencies then this is skipped.
var bGraphDeclared = true;
Expand Down Expand Up @@ -588,7 +627,6 @@ function graphDebug(graph = music_graph(), bShowPopupOnPass = false) {
let key_one = '';
let key_two = '';
let nextIndex = 1;

const superGenreNumbers = music_graph_descriptors.style_supergenre.length; // SuperGenres
for (let i = 0; i < superGenreNumbers; i++, nextIndex++) {
if (i + 1 === superGenreNumbers) {nextIndex = 0;}
Expand All @@ -607,7 +645,6 @@ function graphDebug(graph = music_graph(), bShowPopupOnPass = false) {
bWarning = true;
}
}

const style_supergenre_clusterNumbers = music_graph_descriptors.style_supergenre_cluster.length; // style_supergenre_clusters
for (let i = 0; i < style_supergenre_clusterNumbers; i++, nextIndex++) {
if (i + 1 === style_supergenre_clusterNumbers) {nextIndex = 0;}
Expand Down
6 changes: 3 additions & 3 deletions helpers/ngraph_helpers_xxx.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
//08/10/21
//11/04/22

// Required since this script is loaded on browsers for drawing too!
try { // On foobar
Expand Down Expand Up @@ -312,10 +312,10 @@ function get_nodes_from_path(graph, path) {
// To capitalize nodes if using standard descriptors
function capitalize(s) {
if (typeof s !== 'string') {return '';}
return s.charAt(0).toUpperCase() + s.slice(1);
return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
}

function capitalizeAll(s, sep = ' ') {
if (typeof s !== 'string') {return '';}
return s.split(sep).map( (subS) => {return subS.charAt(0).toUpperCase() + subS.slice(1);}).join(sep); // Split, capitalize each subString and join
return s.split(sep).map( (subS) => {return subS.charAt(0).toUpperCase() + subS.slice(1).toLowerCase();}).join(sep); // Split, capitalize each subString and join
}
4 changes: 2 additions & 2 deletions helpers/region_xxx.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
//10/01/22
//11/04/22

function regionMap({nodeName = 'node', culturalRegion} = {}) {
this.culturalRegion = culturalRegion || {
Expand Down Expand Up @@ -31,7 +31,7 @@ function regionMap({nodeName = 'node', culturalRegion} = {}) {
};

regionMap.prototype.capitalize = function capitalize(string) {
return string[0].toUpperCase() + string.slice(1);
return string.split(' ').map((_) => {return _[0].toUpperCase() + _.slice(1).toLowerCase();}).join(' ');
};

regionMap.prototype.has = function has(region) {
Expand Down

0 comments on commit 30a15fb

Please sign in to comment.