Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Search-by-Distance-SMP (Read 25319 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Re: Search-by-Distance-SMP

Reply #50
I forgot to add that there is a difference about the way the data is added in those tags. One Tagger uses the Spotify model (which I think it's much much easier for the normal Foobar users, and I assume it's easier for you, in SMP, if you ever decide to use those tags). Picard's model I think it's more difficult (better said it's almost useless) for normal users because it's harder to use those values from tags.
For example , for Danceability :
in Picard , we have 2 tags, with these values
AB:HI:DANCEABILITY:DANCEABLE                   0.973414301872
AB:HI:DANCEABILITY:NOT DANCEABLE          0.0265856720507

In One Tagger, only one tag, easier:
1T_DANCEABILITY                        78

I noticed an interesting tag in Picard (gender tag), it's not offered by One Tagger :

AB:HI:GENDER:FEMALE             0.972042262554
AB:HI:GENDER:MALE                 0.0279577393085
This is a song by Janet Jackson.
Is it possible to add a gender filter ( for CUI filters , Album list panel, Library tree SMP, or other option) , using the data from those 2 tags?
If it is possible I could use Picard for this.
Another thing, I noticed that One tagger finds results for more songs, maybe it's possible that Spotify's data base is larger (or maybe it only happened to me).
Btw, if Spotify is not available in your country, and you need it to use One tagger (client id and client secret)I guess I can make an account for you and give you those dates.

Re: Search-by-Distance-SMP

Reply #51
I forgot to add that there is a difference about the way the data is added in those tags. One Tagger uses the Spotify model (which I think it's much much easier for the normal Foobar users, and I assume it's easier for you, in SMP, if you ever decide to use those tags). Picard's model I think it's more difficult (better said it's almost useless) for normal users because it's harder to use those values from tags.
For example , for Danceability :
in Picard , we have 2 tags, with these values
AB:HI:DANCEABILITY:DANCEABLE                   0.973414301872
AB:HI:DANCEABILITY:NOT DANCEABLE          0.0265856720507

In One Tagger, only one tag, easier:
1T_DANCEABILITY                        78

I noticed an interesting tag in Picard (gender tag), it's not offered by One Tagger :

AB:HI:GENDER:FEMALE             0.972042262554
AB:HI:GENDER:MALE                 0.0279577393085
This is a song by Janet Jackson.
Is it possible to add a gender filter ( for CUI filters , Album list panel, Library tree SMP, or other option) , using the data from those 2 tags?
If it is possible I could use Picard for this.
Another thing, I noticed that One tagger finds results for more songs, maybe it's possible that Spotify's data base is larger (or maybe it only happened to me).
Btw, if Spotify is not available in your country, and you need it to use One tagger (client id and client secret)I guess I can make an account for you and give you those dates.
Picard gives that data, but you are not supposed to use it as you did. I.e. it gives:
Code: [Select]
variable A: {
       value: Y,
       X: 40%,
       Y: 60%,
}
You may extract X and Y as you did, or just extract the bigger one, which is considered the actual "tag" (value). Spotify just gives you the percentage, but not the tag. i.e. it gives a number, but you have to convert that into actual tag values (danceable, not danceable). You simply have to configure it right. This is an example of the data that can be extracted (note some low level data and high level data have same name but are different things!)
https://acousticbrainz.org/373d355f-faae-4851-9022-11bcc4144ed3

Use cases are different. I see totally useless a percentage on queries ;) but obviously in SMP it can make sense. So in fact I disagree and I find more useful to have tag names (acoustic, danceable, party) than numbers on foobar2000, while it may be the opposite for a similarity scoring method.

About it finding more songs... yes and no. Let me remind you Spotify is closed source data. If I don't find a CD on picard I can submit it, there is a plugin which even copies the actual info from tracks and opens the web in your browser with that data. It takes 15 seconds to add a release. Then I can run their analysis tool on my PC and submit the data. Some time later if I reload the same album at picard it will be recognized and the data (mood, key, bpm, etc.) will be there ready to be saved on my files. Good luck doing that with Spotify hahahaha

I mean, they are different tools from different frame-minds. You can not add any data to One Tagger, you can only use what's there. If some release is missing you are out of luck, while the open source approach lets you collaborate and add those pieces. Obviously Spotify is the winner if we talk about which one has the bigger database... but not necessarily the one which satisfies everyone needs. One Tagger is also using discogs to tag releases, which is clearly out of scope for Piccard (and I agree it's a bigger database too).

In any case I'm not suggesting to use Picard for standard tagging (I use discogs) but only for Mood, BPM, key, etc. Composers are also a plus. And there you have too instruments, relationships,etc.

Re: Search-by-Distance-SMP

Reply #52
Well first discogs requires an account, the rest of the servers are mant for DJs (electronic music). So it's not as pretty as it seemed.
The audio features requires an spotify account as suspected.
Tried with a rolling stones album (12x5) with no luck hahaha
It also doesn't use any fingerprinting, so it looks for tags only if you filled some of the basic ones (or by filename). While picard recognizes audio even if it has zero tags.
Drag n drop is broken, it uses an electron interface and tries to reproduce the files instead of using them to find tags! You can drag n drop folders into picard without problems. Tag saving is not done automatically, you can discard/accept changes, here it's done without notice.
etc.
Picard gives you different releases to choose from. Discogs would allow you to do that, but the way it's implement limits that option since it's done all automatically.

Can not check the spotify audio features without an account, so at least the only part that would be really useful is out of my reach. Sorry for being so critic, but as a standard tagger it really sucks hahahaha (greatly prefer mp3tag+discogs, or picard or foobar+discogs) I will try to create an spotify account to test it more.

Re: Search-by-Distance-SMP

Reply #53
I think this gif shows most of the problems I mentioned:
Spoiler (click to show/hide)

But will try the Spotify thing since that was the main point anyway.

Re: Search-by-Distance-SMP

Reply #54
It's my fault , I should have warned you, haha. But now you understand why I didn't mentioned not even a single word about One Tagger's capabilities as a standard tagger, because it can't compete with Picard or other programs. It's meant to be used mostly by Dj
It's still a new software, it appeared 2 or 3 months ago, so we can't really compare anything. It will never be like Picard, MP3tag, or others, just a simple , maybe faster solution for some that don't need many features.
What I liked (I didn't even tested anything else) was only one thing, the Spotify implementation (which I think it's missing from other programs, no?),  it's also free . Obviously I would be glad if Spotify implementation appears in other programs, then I will not use One Tagger at all, haha . There is room for everybody, I also use Mp3tag, Picard, or Jaikoz Tagger

"Sorry for being so critic''
No problem, it's not my software :) As you said, they're different tools, even though they're both taggers, haha, they have a different vision and use

Hmm, I didn't quite understood you here ,about my question with the gender tag, sorry :
''You may extract X and Y as you did, or just extract the bigger one, which is considered the actual "tag" (value). Spotify just gives you the percentage, but not the tag. i.e. it gives a number, but you have to convert that into actual tag values (danceable, not danceable). You simply have to configure it right. ''

How can I get the actual "tag" (value)? I don't want a number in Gender tag, I want Male or Female. There's a setting in Picard? (I didn't find it) Or is something more complicated?





Re: Search-by-Distance-SMP

Reply #55
Its supposed that you may configure the plugin in such a way that you simply get the tag value (male) instead of numbers for both values. When I created a plugin for picard I did it that way (and that's what I use), have not tested it since then with that new plugin which extracts all data. I will take a look at it and report, since there must be a way. Either in the program or editing the plugin, if it's the latter I will upload my own fork of it.

Re: Search-by-Distance-SMP

Reply #56
Have updated the repository with the new menus to remap all missing tags, set weights, etc. This:
https://hydrogenaud.io/index.php?topic=120982.msg1000945#msg1000945
Also added the presets (masstagger) and a great optimization on speed for harmonic mixing.

If anyone want to test it, download the files directly from the repository not the releases. Please have in mind the relative path bug on SMP has not been solved yet, so I have no idea if it will work for you!
(it's recommended to also download the latest files from the rest of my scripts in that case, since I have changed all with major changes)

Re: Search-by-Distance-SMP

Reply #57
I forgot to add that there is a difference about the way the data is added in those tags. One Tagger uses the Spotify model (which I think it's much much easier for the normal Foobar users, and I assume it's easier for you, in SMP, if you ever decide to use those tags). Picard's model I think it's more difficult (better said it's almost useless) for normal users because it's harder to use those values from tags.
For example , for Danceability :
in Picard , we have 2 tags, with these values
AB:HI:DANCEABILITY:DANCEABLE                   0.973414301872
AB:HI:DANCEABILITY:NOT DANCEABLE          0.0265856720507

In One Tagger, only one tag, easier:
1T_DANCEABILITY                        78

I noticed an interesting tag in Picard (gender tag), it's not offered by One Tagger :

AB:HI:GENDER:FEMALE             0.972042262554
AB:HI:GENDER:MALE                 0.0279577393085
This is a song by Janet Jackson.
Is it possible to add a gender filter ( for CUI filters , Album list panel, Library tree SMP, or other option) , using the data from those 2 tags?
If it is possible I could use Picard for this.
Another thing, I noticed that One tagger finds results for more songs, maybe it's possible that Spotify's data base is larger (or maybe it only happened to me).
Btw, if Spotify is not available in your country, and you need it to use One tagger (client id and client secret)I guess I can make an account for you and give you those dates.
Back to the topic, the answer was scripting. Picard allows automatic scripting, so those multiple tags can be used to set only once with numbers or labels.

To get a label:
Code: [Select]
$set(timbre,‎$if($gte($substr(%ab:hi:timbre:bright%,2,3),5),Bright,Dark))
To get a number from 0 to 100:
Code: [Select]
$set(brightness,‎$substr(%ab:hi:timbre:bright%,2,4))

Note AcousticBrainz tags are complementary, i.e. ab:hi:timbre:bright and ab:hi:timbre:dark should sum 1... so only one of them is needed for scripting.

X

X

X

X

Applying the same principle to every tag, you may get full labels for all the data tags and also one number per set of tags (danceability, gender, etc.).

Finally you can remove the unwanted tags:
Code: [Select]
$unset(ab:hi:timbre:bright)
$unset(ab:hi:timbre:dark)
...

As can be seen, it's really hard to improve this workflow... since scripting allows you to do almost anything at picard (without needing to use masstagger at a later point at foobar). In conclusion, I still find better to use AcousticBrainz data since it's open source, does not require a third party api key by a closed source program (spotify), allows scripting to modify tags to your needs and offers both full tag labeling and/or raw values (numbers) to be used at a later point by other programs or scripts (foobar and SMP). Not saying I will not look at the spotify thing, but right now  I can assure this works.

Also I know regular users are "not capable" of writing such scripts for picard... but in that case they are also not capable of setting onetagger with an spotify api or setting these SMP scripts right to use those tags. In all cases it only requires a bit of time and attention...

As a solution, I will write myself the full set of picard's scripts which along the plugin should provide all the desired tags: gender, timbre, danceability, etc. with labels and/or single number (per set of tags). Only work left at user's side would be to install the required plugin, copy/paste the scripts and decide which tags they want to retrieve. I use pìcard too so makes sense to release it publicly. That should cover all problems you have with picard while also fulfilling all the requisites.

Right now I will put my efforts only in the tagging part. Those extra tags may be used -now- as custom string tags and custom num tags on Search by Distance. Also as queries in Playlist Tools. At some point I may implement them as default tags with their own logic.

Re: Search-by-Distance-SMP

Reply #58
Got the scripts workings and managed to retrieve/create these variables:

Code: [Select]
timbre -> bright/dark
brightness -> 0-100
danceability -> 0-100 (would prefer to move this to danceness, and use this one for Danceable/not Danceable) (*)
gender -> female/male
femaleness -> 0-100
tonality -> tonal/atonal
tonaleness -> 0-100
speechiness -> 0-100
acousticness -> 0-100 (uses mood acoustic as reference)
valence -> 0-100 ((mood happy + mood not sad) / 2) (**)
chords rate -> 0-100
chords key -> ...

(*) Would break Spotify's data direct comparisons
(**) Should be equivalent to Spotify's one


Will release them as soon as a bug is solved, since working with the scripts found the acousticBrainz plugin broke some scripts:
https://tickets.metabrainz.org/projects/PICARD/issues/PICARD-2256?filter=addedrecently

Re: Search-by-Distance-SMP

Reply #59
With your help, things look much much better for Picard, I will use the scripts definitely.  Btw, I didn't used scripts in Picard, until a few days ago, when I added 2 scripts

Re: Search-by-Distance-SMP

Reply #60
Please update AcousticBrainz Tags plugin to last version (2.2). It's a requisite, has a fix for the bug I found.
Then add these 3 scripts. Edit as needed if you want to have/delete only specific tags.
Also check the order. The "remove" script should be at the bottom (see image 1).

AcousticBrainz Tags Number
Code: [Select]
$noop(Sets -number- tags from AcousticBrainz high/low level data)
$noop(Recommended to removes all high/low level data afterwards)
$noop(Requires: AcousticBrainz Tags plugin 2.2+)
$noop(Requires: All high-level and subset of low-level tags enabled at plugin config)

$noop(Timbre tags: brightness -number-)
$set(_temp,%ab:hi:timbre:bright%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(brightness,%_temp%)

$noop(Danceability tags: danceness -number-)
$set(_temp,%ab:hi:danceability:danceable%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(danceness,%_temp%)

$noop(Gender tags: femaleness -number-)
$set(_temp,%ab:hi:gender:female%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(femaleness,%_temp%)

$noop(Voice/Instrumental tags: speechiness -number-)
$set(_temp,%ab:hi:voice_instrumental:voice%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(speechiness,%_temp%)

$noop(Acousticness tags: acousticness -number-)
$set(_temp,%ab:hi:mood_acoustic:acoustic%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(acousticness,%_temp%)

$noop(Valence tags: Valence -number-)
$set(_tempA,%ab:hi:mood_happy:happy%)
$set(_tempB,$get(ab:hi:mood_sad:not sad))
$if($eq($substr(%_tempA%,2,3),0),$set(_tempA,$substr(%_tempA%,3,4)),$set(_tempA,$substr(%_tempA%,2,4)))
$if($eq($substr(%_tempB%,2,3),0),$set(_tempB,$substr(%_tempB%,3,4)),$set(_tempB,$substr(%_tempB%,2,4)))
$set(valence,$div($add(%_tempA%,%_tempB%),2))

$noop(Tonality tags: tonaleness -number-)
$set(_temp,%ab:hi:tonal_atonal:tonal%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(tonaleness,%_temp%)

$noop(Chords tags: chords_rate -number-)
$set(_temp,%ab:lo:tonal:chords_changes_rate%)
$if($eq($substr(%_temp%,2,3),0),$set(_temp,$substr(%_temp%,3,4)),$set(_temp,$substr(%_temp%,2,4)))
$set(chords_rate,%_temp%)

AcousticBrainz Hi Tags Labels
Code: [Select]
$noop(Sets -label- tags from AcousticBrainz high/low level data)
$noop(Recommended to removes all high/low level data afterwards)
$noop(Requires: AcousticBrainz Tags plugin 2.2+)
$noop(Requires: All high-level and subset of low-level tags enabled at plugin config)

$noop(Timbre tags: timbre -label-)
$set(timbre,$if($gte($substr(%ab:hi:timbre:bright%,2,3),5),Bright,Dark))

$noop(Danceability tags: danceability -label-)
$set(danceability,$if($gte($substr(%ab:hi:danceability:danceable%,2,3),5),Danceable,Not danceable))

$noop(Gender tags: gender -label-)
$set(gender,$if($gte($substr(%ab:hi:gender:female%,2,3),5),Female,Male))

$noop(Tonality tags: tonality -label-)
$set(tonality,$if($gte($substr(%ab:hi:tonal_atonal:tonal%,2,3),5),Tonal,Atonal))

$noop(Chords tags: chords_key -label-)
$set(chords_key,%ab:lo:tonal:chords_key%)

AcousticBrainz High_Low Tags Remove
Code: [Select]
$noop(Removes all high/low level tags retrieved by AcousticBrainz Tags plugin)
$noop(Meant to be used along other scripts which uses this data first)
$noop(Requires: AcousticBrainz Tags plugin 2.2+)

$noop(ISMIR2004 Rhythm Classification Dataset "Ballroom dataset")
$unset(ab:hi:ismir04_rhythm:chachacha)
$unset(ab:hi:ismir04_rhythm:jive)
$unset(ab:hi:ismir04_rhythm:quickstep)
$unset(ab:hi:ismir04_rhythm:rumba-american)
$unset(ab:hi:ismir04_rhythm:rumba-international)
$unset(ab:hi:ismir04_rhythm:rumba-misc)
$unset(ab:hi:ismir04_rhythm:samba)
$unset(ab:hi:ismir04_rhythm:tango)
$unset(ab:hi:ismir04_rhythm:viennesewaltz)
$unset(ab:hi:ismir04_rhythm:waltz)

$noop(MIREX Audio Mood Classification Dataset)
$unset(ab:hi:moods_mirex:aggressive\, fiery\, tense/anxious\, intense\, volatile\, visceral)
$unset(ab:hi:moods_mirex:humorous\, silly\, campy\, quirky\, whimsical\, witty\, wry)
$unset(ab:hi:moods_mirex:literate\, poignant\, wistful\, bittersweet\, autumnal\, brooding)
$unset(ab:hi:moods_mirex:rollicking\, cheerful\, fun\, sweet\, amiable/good natured)
$unset(ab:hi:moods_mirex:passionate\, rousing\, confident\, boisterous\, rowdy)

$noop(genre_dortmund)
$unset(ab:hi:genre_dortmund:alternative)
$unset(ab:hi:genre_dortmund:blues)
$unset(ab:hi:genre_dortmund:electronic)
$unset(ab:hi:genre_dortmund:folk/country)
$unset(ab:hi:genre_dortmund:funk/soul/rnb)
$unset(ab:hi:genre_dortmund:jazz)
$unset(ab:hi:genre_dortmund:pop)
$unset(ab:hi:genre_dortmund:rap/hiphop)
$unset(ab:hi:genre_dortmund:rock)

$noop(genre_electronic)
$unset(ab:hi:genre_electronic:ambient)
$unset(ab:hi:genre_electronic:drum and bass)
$unset(ab:hi:genre_electronic:house)
$unset(ab:hi:genre_electronic:techno)
$unset(ab:hi:genre_electronic:trance)

$noop(genre_rosamerica)
$unset(ab:hi:genre_rosamerica:classical)
$unset(ab:hi:genre_rosamerica:dance)
$unset(ab:hi:genre_rosamerica:hiphop)
$unset(ab:hi:genre_rosamerica:jazz)
$unset(ab:hi:genre_rosamerica:pop)
$unset(ab:hi:genre_rosamerica:rhythm and blues)
$unset(ab:hi:genre_rosamerica:rock)
$unset(ab:hi:genre_rosamerica:speech)

$noop(genre_tzanetakis)
$unset(ab:hi:genre_tzanetakis:blues)
$unset(ab:hi:genre_tzanetakis:classical)
$unset(ab:hi:genre_tzanetakis:country)
$unset(ab:hi:genre_tzanetakis:disco)
$unset(ab:hi:genre_tzanetakis:hiphop)
$unset(ab:hi:genre_tzanetakis:jazz)
$unset(ab:hi:genre_tzanetakis:metal)
$unset(ab:hi:genre_tzanetakis:pop)
$unset(ab:hi:genre_tzanetakis:reggae)
$unset(ab:hi:genre_tzanetakis:rock)

$noop(Moods)
$unset(ab:hi:mood_acoustic:acoustic)
$unset(ab:hi:mood_acoustic:not acoustic)
$unset(ab:hi:mood_aggressive:aggressive)
$unset(ab:hi:mood_aggressive:not aggressive)
$unset(ab:hi:mood_electronic:electronic)
$unset(ab:hi:mood_electronic:not electronic)
$unset(ab:hi:mood_happy:happy)
$unset(ab:hi:mood_happy:not happy)
$unset(ab:hi:mood_party:party)
$unset(ab:hi:mood_party:not party)
$unset(ab:hi:mood_relaxed:relaxed)
$unset(ab:hi:mood_relaxed:not relaxed)
$unset(ab:hi:mood_sad:sad)
$unset(ab:hi:mood_sad:not sad)

$noop(Timbre)
$unset(ab:hi:timbre:bright)
$unset(ab:hi:timbre:dark)

$noop(Danceability)
$unset(ab:hi:danceability:danceable)
$unset(ab:hi:danceability:not danceable)

$noop(Gender)
$unset(ab:hi:gender:female)
$unset(ab:hi:gender:male)

$noop(Tonality)
$unset(ab:hi:tonal_atonal:tonal)
$unset(ab:hi:tonal_atonal:atonal)

$noop(Instrumental/Voice)
$unset(ab:hi:voice_instrumental:voice)
$unset(ab:hi:voice_instrumental:instrumental)

$noop(Chords, BMP & Key)
$unset(ab:lo:tonal:chords_key)
$unset(ab:lo:tonal:chords_changes_rate)
$unset(ab:lo:tonal:chords_scale)
$unset(ab:lo:tonal:key_key)
$unset(ab:lo:tonal:key_scale)
$unset(ab:lo:rhythm:bpm)

The set of scripts remove all high low data tags and creates these:
Code: [Select]
timbre
brightness
danceability
danceness
gender
femaleness
tonality
tonaleness
speechiness
acousticness
valence
chords rate
chords key

Note these scripts are subject to change (already swapped danceness with danceability), so if you tag your files with it beware you may need to re-tag/re-map them at some point whenever I add those variables on my multiple SMP tools.

The pts files are just text files with the picard scripts. They may be read in any text editor or you can use notepad++ with the xml language definition (for syntax highlighting). (see image 2 & 3)

Re: Search-by-Distance-SMP

Reply #61
Well... first fix. If the high level tags are missing for the release, now nothing is written (instead of using default -wrong- values). (*)

AcousticBrainz Hi Tags Labels
Code: [Select]
$noop(Sets -label- tags from AcousticBrainz high/low level data)
$noop(Recommended to removes all high/low level data afterwards)
$noop(Requires: AcousticBrainz Tags plugin 2.2+)
$noop(Requires: All high-level and subset of low-level tags enabled at plugin config)

$noop(Timbre tags: timbre -label-)
$set(_temp,%ab:hi:timbre:bright%)
$if(%_temp%,
$set(_temp,$if($gte($substr(%_temp%,2,3),5),Bright,Dark))
$set(timbre,%_temp%)
)

$noop(Danceability tags: danceability -label-)
$set(_temp,%ab:hi:danceability:danceable%)
$if(%_temp%,
$set(_temp,$if($gte($substr(%_temp%,2,3),5),Danceable,Not danceable))
$set(danceability,%_temp%)
)

$noop(Gender tags: gender -label-)
$set(_temp,%ab:hi:gender:female%)
$if(%_temp%,
$set(_temp,$if($gte($substr(%_temp%,2,3),5),Female,Male))
$set(gender,%_temp%)
)

$noop(Tonality tags: tonality -label-)
$set(_temp,%ab:hi:tonal_atonal:tonal%)
$if(%_temp%,
$set(_temp,$if($gte($substr(%_temp%,2,3),5),Tonal,Atonal))
$set(tonality,%_temp%)
)

$noop(Chords tags: chords_key -label-)
$set(_temp,%ab:lo:tonal:chords_key%)
$if(%_temp%,
$set(danceability,%_temp%)
)

Just replace this script, the others are fine. (and hope no one tagged their files yet!) Apart from this error, the scripts are now 100% safe and working as expected. Sorry.

For a release with all the AcousticBrainz tags -and already tagged by picard previously-, you should see something like this:
X
While one without the tags (the album has not been analyzed yet), you should see something like this (no changes): (**)
X

(*) For example a track without ab:hi:timbre:bright was set as timbre = dark, which is clearly wrong... since no tag means no -known- timbre.
(**) If you have albums on music brainz database -thus tagged with MBID's- but without acousticBrainz tags... you may analyze the files and send the results to their server. All is done automatically.
https://acousticbrainz.org/download
https://musicbrainz.org/doc/How_to_Submit_Analyses_to_AcousticBrainz

Re: Search-by-Distance-SMP

Reply #62
Thanks for the detailed explanation , I tested on a few files and everything seems ok. Thanks once again

Re: Search-by-Distance-SMP

Reply #63
Updated the repository with the Picard Scripts. No further changes (also included in last update of Playlist Tools).

Re: Search-by-Distance-SMP

Reply #64
Pushed a new update with some additions to the graph descriptors (genre and styles on the map). With the last batch I managed to cover my entire library (+430 different genre/styles) although there are many more on the descriptors added. That means is not probable to see many more updates on that field since essentially that covers all I know.

If using Playlist Tools (*), the menu entry named 'configuration\Search by Distance\Find genres/styles not on Graph' reports any genre/style not on the graph. Now I'm open to request to add those that may be considered relevant. Note I don't care at all about Last.FM - All music tags like "world music" or "African" which mean nothing, only real genre/styles please (Flamenco, Sadcore, Kabuki, Desert Blues, etc.). In any case user-defined styles may be added at 'music_graph_descriptors_xxx_user.js' so no one have to agree with me about what qualifies as genre/style.

People may also share that descriptor file which may be of interest to other users, or even me for future releases.

(*) I will consider adding the tools to the standard buttons from here too.

Now, considering the future development of this tool I'm thinking about adding:

- Cultural links restrictions mode: currently things like 'African' or 'Argentinian Rock' are skipped since they are not genres at all... but they may point to some specific music culture (and probably shared musical character). I may consider adding a new layer to the graph where certain styles are linked to an specific cultural group (for ex. Americana to American Music or Desert Blues to North African music) which may be used to further restrict playlist creation to things within the same cultural group. In that case it would use both the "real" genre/styles if they are linked to a group and tags that usually are skipped on the graph like 'African', etc.

- Integration with World-Map: since there is already a framework to get a database of artists and countries, it may be used (if locale tags are not found on tracks) to further refine playlists (for ex. "get me similar tracks to this song of Dylan but only from artists from Europe"). Also related to previous feature. Since it would use the database from the other script, and that one may be filled with values from Last fm and the Bio script, it would work without the need of re-tagging files.

- Themes with multiple files as reference: right now the tool uses only one track as reference. I have toyed with the idea of using an entire playlist at some point... at this point I have managed to do the first step of using a virtual file as container instead of a real track, that's what's called theme (and users may create their own based on tracks as references via buttons). The solution would be simply mixing the tags from all the files and retrieving tracks according to the entire set of tags. The alternative would be getting similar tracks for every track on the list and the mixing the results, but that would take time proportional to n which is simply not feasible for real use.

- Integrating low/high level data: alternative model to the use of moods, where things like valence, danceness, brightness, etc. are used.

Re: Search-by-Distance-SMP

Reply #65
@regor I have this problem (I noticed a few weeks ago, but somehow it wasn't time for this, to report it) Also, not only that it crashes when I do Shift L click but when I do ctrl L click to set the recipe, as you see , there's nothing there - LikeADJ (MusicBee), and the other recipes should be there. Although when I do Ctrl L click and I choose to open the folder with recipes , the folder opens correctly , the path is correct:  scripts\SMP\xxx-scripts\presets\Search by\recipes
Console :

[14:53:02] foo_spider_monkey_panel:
Error: Spider Monkey Panel v1.5.2 (Merged Buttons bar: Merged Buttons bar by xxx)
theme is null

File: buttons_sbd_menu_theme.js
Line: 101, Column: 16
Stack trace:
  createThemeMenu/<@buttons_sbd_menu_theme.js:101:16
  createThemeMenu@buttons_sbd_menu_theme.js:99:10
  newButtons.SimilarUserSet<@buttons_search_bydistance_customizable.js:44:4
  SimpleButton/this.onClick@buttons_xxx.js:138:25
  on_mouse_lbtn_up@buttons_xxx.js:222:11

And this is that error that appears in the message :

Error: Spider Monkey Panel v1.5.2 (Merged Buttons bar: Merged Buttons bar by xxx)
theme is null

File: buttons_sbd_menu_theme.js
Line: 101, Column: 16
Stack trace:
  createThemeMenu/<@buttons_sbd_menu_theme.js:101:16
  createThemeMenu@buttons_sbd_menu_theme.js:99:10
  newButtons.SimilarUserSet<@buttons_search_bydistance_customizable.js:44:4
  SimpleButton/this.onClick@buttons_xxx.js:138:25
  on_mouse_lbtn_up@buttons_xxx.js:222:11

I tested this also in a fresh portable install, but there it seems it works, no problem, so I don't know what it might me

Re: Search-by-Distance-SMP

Reply #66
One of your presets files got corrupted (maybe you edited one of them?), that's probably the problem. Overwrite this file at helpers, try to use the menus and check the console.

Somehow I missed a safecheck at that line (present at other places), so now it should not crash if the file doesn't load properly... but that still doesn't solve your installation problem. Take a look first at the console output before re-downloading and reinstalling all presets to be sure its only a local problem and not something on my side.

Re: Search-by-Distance-SMP

Reply #67
No crash now. I think I found the problem, this is from the console :
[19:02:14] Recipe file is not valid:.\profile\scripts\SMP\xxx-scripts\presets\Search by\recipes\LikeADJ (MusicBee).json

I didn't copied all because it's the same for all presets
It seems the path to the recipe folder is wrong, I don't know how that happened . This is what I have (I have no profile folder):

foobar2000 (2019)\scripts\SMP\xxx-scripts\presets\Search by\recipes

This is the problem, the path? If yes, where should I modify the path? I did right click on the button - Properties, but I'm not sure where to modify


Re: Search-by-Distance-SMP

Reply #68
Yep.. that's the problem. I think that's because you are using an older foobar version, don' you? (pre 1.6)

I added relative path support to all plugins but they require > 1.6, with files being within the profile folder. Not sure I'm gonna change that since it's too complex to check for 2 different paths at all instances, but right now you may either update the portable install or create a profile folder yourself. Then copy all scripts folder into it and done (it doesn't matter at all if you left the folder "foobar2000 (2019)\scripts" too, as long as there is a "foobar2000 (2019)\profile\scripts" folder with all the files).


EDIT: let me check someting.

EDIT2: well the problem was using pre 1.6 portable installs since they don't have profile folders. Have added an additional check for it at the lines of codes I found giving problems (testing it at foobar 1.4 myself). Should be solved, can not guarantee it's bug free since I only test on >1.6 portable installs.

Re: Search-by-Distance-SMP

Reply #69
No, it's not a old version, I have 1.6.6.
Edit.
I know, it should have been foobar2000 (2019)\profile\scripts\SMP\xxx-scripts\presets\Search by\recipes, but it's not. It's foobar2000 (2019)\scripts\SMP\xxx-scripts\presets\Search by\recipes . I have this portable install since 2019, and somehow, this is how it remained, after every update.

 

Re: Search-by-Distance-SMP

Reply #70
Then your installation is wrong, since you are missing the profile folder. Check my install instructions, the scripts must be at the profile folder for >1.6 portable installs. And 1.6 portable installs use a profile folder for its user data.

X

Anyway ironically the pre <1.6 fix may "fix" your problem too. But you have to fix your installation path or more problems will appear at some point (and that's why you have been noticing strange behaviors and crashes at multiple places!).

Quote
foobar2000 (2019)\profile\scripts\SMP\xxx-scripts\

Re: Search-by-Distance-SMP

Reply #71
fb2k v1.6+ can easily not have a profile folder from using an older version and then upgrading it in place. Only clean portable installs of v1.6+ generate a profile folder on first run.

But of course you already know everything and never need anything explained because you're a ****ing genius.

Re: Search-by-Distance-SMP

Reply #72
fb2k v1.6+ can easily not have a profile folder from using an older version and then upgrading it in place. Only clean portable installs of v1.6+ generate a profile folder on first run.

But of course you already know everything and never need anything explained because you're a ****ing genius.
Wow... XD @snotlicker really do yourself a favor and stop talking to me as I already asked previously, please. It really seems you have problems managing your emotions  ::)

Btw... I was talking about the installation of the scripts not foobar. So yep, the installation is wrong since I have explicitly asked in the instructions to install into the profile folder for >1.6, whether that folder exists or not, is created by foobar installation or not is totally irrelevant.

Re: Search-by-Distance-SMP

Reply #73
Using fb.ProfilePath would work for every scenario without hardcoding the word profile. Fighting existing standards that are there to make everyone's life easier is not the way to go.

BTW, I'm mocking you, I'm laughing. It's not something you can attribute to being overly emotional.

Re: Search-by-Distance-SMP

Reply #74
Really I'm tired of this... 3rd time I'm asking you to stop.
Using fb.ProfilePath would work for every scenario without hardcoding the word profile. Fighting existing standards that are there to make everyone's life easier is not the way to go.
Is not only being condescending which is annoying, but also thinking you know the solution to a problem without even taking a look at the code.

The current "file" path is saved at properties panel, and it allows either relative paths "./profile/scripts/" or "./scripts/" or absolute paths.

Paths are also saved according to being a portable installation or not. Putting something like fb.ProfilePath does nothing, since then what you save at the properties panel becomes a simple absolute path. And when you move your foobar installation into another PC with another disk letter (USB) then bam, your code breaks. And for sure I will not use eval() to allow even another way to input stupid things there only to evaluate fb.ProfilePath on the fly.

As solution I have taken the file helpers and replace  './' at the start with fb.FoobarPath on the fly on every call , which ironically is the RIGHT solution since any relative path must be relative to the foobar installation which is the real root. Not an arbitrary path which changes according to version number or where the user chooses to install things. This is clearly stated in the readme, and I follow the internal structure of the software. Which I don't like, because hey I found stupid not having a profile folder in all versions... but that's not my problem and life continues.

So no, please, stop telling me how to do the things I wanna do. It's fine you don't like my coding practices or me, but then go on and stop behaving like an angry bully since your behavior is becoming really ridiculous. Not gonna loose more time with you.

EDIT: And for sure... I'm not the one with a history behind me about being too emotional and having stupid discussions with other users, questionable behaviors,  deleting repositories, multiple accounts with new names, etc.  ::) Like you wanna repeat the same pattern again, but look for another user because that's not gonna happen with me. Take it easy.