SongKong Jaikoz

SongKong and Jaikoz Music Tagger Community Forum

Resolving non-uniqueness in classical "WORK" tag

I am running into a few difficulties attempting to retag my (moderately large) classical library using SongKong.

One of the most awkward issues is getting the “WORK” tag right. This is essential for my intended use case with LMS (Lyrion Music Server) which organises by and allows browsing by classical work. Unfortunately there is no unique string to describe a classical work, so we may see, for example

  • Brandenburgisches Konzert Nr. 1 F-Dur, BWV 1046
  • Brandenburg Concerto no. 1 in F major, BWV 1046
  • Concerto No. 1 in F, BWV 1046
  • Brandenburg Concerto no. 1

as there is ambiguity in the language, whether to include the key and catalogue number and more. Is there some way that these can be canonicalised? I see that MusicBrainz has the concept of aliases which can sometimes resolve the language ambiguity. But to get this right, I would need some kind of matching to perform disambiguation. Is there any functionality in Songkong for doing this?

Keith

Yes, when SongKong matches to MusicBrainz if the tracks are a recording of a work (movement ) and that work is part of a work (work) then all tracks of the work will have the same value for the WORK field and that should work with Lyrion Music Server

If this is not happening for you please run Create Support Files so I can take look

All the associated tracks in a single album do indeed have the same WORK. But what about different recordings of the same work? I have four different recordings of the Brandenburg Concertos by different performers. They should be identical too, and they frequently aren’t.

Can you run Create Support Files without seeing the actual file details it’s just guesswork on my part.

Okay the issue may be the following.

When we match an album to MusicBrainz, if that album contains tracks that represent Movements that are part of a Work then hopefully as well as the album MusicBrainz will contain a Work entity for each Movement and an overall Work that these works as part of. In such case each track will have a Mb Recording Work field show the movment work, and a MB Work representing the overall work, and all the movements will have the same value for the MB Work field. They will also have a Work field that represents the overall work, but this will not neccessarily have the same value as the Mb Work field. The reason being that the Work field shows the work as described on the album because this is most likely how the user knows and refers to the work, so this can vary for the same work on different albums.

The main reason we do it this way, is that the actual work name may be in a different language and script to the customers own language, but the album is most likely in customers language so they can better understand the work title as it is on the album

Here is an example, I have this album containing a symphony by Antonín Dvořák who is Czech.

image

The album titles are in English, but the underlying Work is witten in Czech

I dont understand Czech so I would prefer to see the English titles, if we look at the fields added by SongKong we see MB Recording Work and Mb Work are in Czech

but Work is in English

image

So I think this is why you are seeing variations in different recordngs of the same Work

If you want to use the Mb Work instead you could use the Scripter task to set work to mb_work

e.g

if(isclassical =='1'  && mbwork.length > 0)
{
   work=mbwork
}

image

Hi, thankyou for the support files, thngs are as described I previous post, but with the added complication that the Work is part of a larger Work (The Brandenberg Concertos), I go into detail using your support files below.

So here are two of your folders:

Example A

This one

links to this MusicBrainz release

image

Example B

And this one

image

links to this MusicBrainz release

Notice in Example A the track listing on MusicBrainz does show the Bach Works Catalog but in Example B it does not, this will reflect the tracklisting/liner notes on the physical disc.

Now lets look at the details for track 2

Example A

So here Work is set to Brandenburg Concerto no. 1 in F major, BWV 1046. To complicate matters slightly the MusicBrainz equivalent is stored in the MB Work Level 1 field as Brandenburgisches Konzert Nr. 1 F-Dur, BWV 1046. This is because the work is part of a larger work the BrandenBurg Concertos, or to give their orginal name Six concerts avec plusieurs instruments which is stored in the MB Work field.

Note there are also Id fields so if we click on the MB Work Level 1 Id field we go straight to the MusicBrainz Work page for this id

Example B

So here Work is set to Brandenburg Concerto No. 1 in F major, it doesn’t include the Bach Works Catalog reflecting the track listing on the album .Just like Example A MusicBrainz equivalent is stored in the MB Work Level 1 field as Brandenburgisches Konzert Nr. 1 F-Dur, BWV 1046 and the MB Ids point to exactly the same work

Conclusion
The Work field usually reflects the title in the album tracklisting which may differ slightly from the underlying Work, if you would like all Work titles to reflect the underlying Work this can be done with Scripter but we need to improve the script slightly to deal with cases such as this when the MB Work we want is not in MB Work but in MB Work Level 1

if(isclassical =='1')  
{
   if(mbworklevel1.length > 0)
   {
      work=mbworklevel1
   }
   else if(mbwork.length >0)
   {
      work=mbwork
   }
}

Possibly there should be an option on the Classical tab of Fix Songs to always use the MusicBrainz work name, I will have a think about it.

Thanks, I can work with this. I wonder if it would be further possible to test for a localisation alias (which does exist for this work) and translate into the English version? I haven’t yet found any documentation on the correspondence between MB entries and scripting variables like “mbworklevel1”.

There’s an additional anomaly with the use of MB work IDs which will need addressing though. Look at track 09 of the Masaaki Suzuki recording. The MB work ID lists this as part of “Concerto for 3 Harpsichords in C major, BWV 1064”. This is a correct attribution. Bach’s manuscript lists only two chords of the final cadence of the second (slow) movement of the third Brandenburg concerto, presumably intending the performaers to insert something to their liking. Suzuki has chosen a movement from the Concerto for 3 harpsichords. However for present purposes it becomes part of the 3rd Brandenburg concerto and the “WORK” and Overall WORK should reflect this, in order to play in the correct sequence. I’m not sure how to handle this, but I assume the solution will have to be encoded as some special case in the script. Time to brush up on my JavaScript, methinks…

Not yet, aliases used to only be availble for artists I was not aware they were now available for all entities but that sounds like a good idea - raised an issue.

So Mb Recording Work is the work (usually movement in classical) that recording has a recording of relationship with, this work may be part of a larger work, and this may be part of another work and so the top level work is stored in Mb Work

If there are more than two works involved (i,e not just movement and work) then the works inbetween will be stored in Mb Work Level N with N starting at 1.

So in most cases will just have Mb Recording Work and Mb Work , with Mb Recording Work storing Movement and Mb Work storing Work

If the recording is recording of a work that is not part of a larger work you would have Mb Recording Work and Mb Work, both with same value, this is the case for most Popular music, because in Musicbrainz Work is just a composition of some kind not particular to Classical

If the recording is a recording of a movement that is part of a work, and that work is part of a larger work then you will have Mb Recording Work, Mb Work Level 1 and Mb Work as is the case with your Brandenburg Concvertos example.

Most Operas have this three level structure e.g https://musicbrainz.org/work/597e017a-2c97-40c0-9eeb-430a0461e4ad

There are cases where there are more than three levels

The differences can be seen in the View As Spreadsheet part of report

e.g

image

I dont quite follow exactly what you want but maybe just manually fix it, or if you want to script so that you can rerun SongKong over your collection without changing it back and without having to set the fields to Only Modify If Empty then you could add a simple line to script along the lines of

if(mb_work='Concerto for 3 Harpsichords in C major, BWV 1064') { work ='Correct Value') }

I don’t yet have a good specification of what I want. This one is trickily slightly more general than a single instance in the entire catalogue but still pretty restricted. I might anticipate it recurring if I buy yet another version of the Brandenburgs!

As I do anticipate re-running songkong on the entire collection again, I want to script the fix rather than do it manually every time. But perhaps the fix could be more general that for this specific choice of replacement. I’m still trying to understand what principles MB is applying (https://musicbrainz.org/work/7791610b-ec18-3478-ab9f-2b770d7df458) and the meaning of the phrase “is the basis of” they use for the relationship.

It seems there are two versions of the same work so is the basis of is saying that was the original work and it is the basis of a slightly different version of the work