Author Topic: How to create 'work', 'movement' tags using delimiters in classical titles.  (Read 2228 times)

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
Below follows the full explanation of this 'delimiting scheme'.
If you are in a "tl:dr/yeah, I get it" kinda mood, click
HERE to go to the brief version that just explains what to do.

This write-up became a lot longer than I anticipated on when I started it, so here is a brief introduction to avoid possible confusion, and prevent anyone wasting time reading all this, and finding out at the end that it is of no interest or advantage to him/her:

The basic idea and objective behind it is that if you make sure the titles of your classical tracks are up to par, following general recommendations on title formatting, then you could avoid the need of additionally maintaining extra tag frames such as 'work' and 'movement'.

It's just a system I designed for my own use, and certainly not to be considered as some general guideline.


Managing classical music in a digital music manager is quite a challenge.
One aspect of that, is that there are not many agreed-on standards on the construction, naming, and handling of classical compositions in regard to sections such as 'movements' 'scenes', acts' etc.

Therefor it is not so easy getting items such as 'work', 'bwv/opus nr.', 'act', 'scene' etc. categorized and displayed in a usable manner.
It's probably close to impossible to get that perfect anyway, since within different classical genres there is ambiguity in "what is a work", an act, a scene, part, movement, segment, etc.

And you will have a hard time finding content providers or tagging software working nicely together filling all necessary tag frames to full satisfaction, without using your own scripts, or do lots of tweaking.
(MusicBrainz/Picard is making progress, but not there quite yet)

Still, you'll want to organize and display your classical library with means available.
The common way to do this is by setting up and maintaining additional tag fields such as 'Work', 'Movement', etc.

But if the full titles of your classical tracks are well-arranged and complete, they will already contain the names of these elements.
Having that makes it possible to avoid the need to additionally maintain such additional tag frames.
This is the idea:

There is some sort of agreement on the structure of classical track titles.
It states that the title should not only contain the name of the particular track, but also the names of the above items in the structure the track is a part of.
So it should include items such as work, cat./opus number, act, movement, segment title, etc.

The general consensus is to use specific delimiters to separate these items.
So you will usually encounter commas, colons and hyphens as delimiters for work,cat./opus: movement-etc.
Those can indeed be very useful, since it makes it possible to dissect the separate items in the title, and use those to populate virtual (or regular) tags in MusicBee.

But a big problem is that these specific proposed delimiters are too common, will often occur more than once in a title, and are often not placed in the correct, or in a consistent position.
As a result, formulas depending on those limiters will often get disappointing results.

To improve on that, for my own setup I have decided a while back already on using some custom delimiters that have very little chance to give conflicts in existing titles.

And it has the intention to trying to avoid the necessity to populate and maintain additional tag frames such as 'work', 'cat.nr.', 'movement'.
Since, if the full title is constructed well, and already contains all that information, it would be somewhat superfluous and double work to additionally maintain those dedicated frames.
 
Recently I re-evaluated the scheme I was using, and improved some formulas. So I thought this was a good moment to share my efforts.

---------------------------------------

This 'howto' describes how to set up this 'classical title delimiting scheme' that I currently work with, and is intended for:

- users that are interested in getting a similar setup and would like some guidance. (and probably save a lot of time in figuring out the formulas)
- some brain-storming with other members (and myself...) to possibly get some more ideas, suggestions, improvements.

To summarize, the focus of this specific guide is on making it possible to dissect long, well-structured classical track titles, and infer separate manageable virtual tags for MusicBee from them.

Note that to have the benefits of the scheme described in this tutorial, you must be willing and prepared to apply a consistent structure of delimiters to all classical tracks in your library.

If most of your classical tracks currently already have the common delimiters, the 'search and replace' function, and/or the 'additional tagging tools' plugin can make the transition to these custom delimiters not too difficult to do.

If you are unwilling to change the titles using these custom delimiters, you can keep using the common recommended delimiters (comma, colon, hyphen) for your tracks, but then you will have to change the formulas of the virtual tags, by replacing all custom delimiters with the 'common' ones.
But then the end results will vary. (probably a lot)

Or you can just use this tutorial for ideas, testing and inspiration, and create/improve your own structure/workflow.

Let's begin:

This is how your classical titles should be constructed to make these formulas work:

Work • Opus· Scene ~ Title

- The work title is followed by a bullet (alt+0149)
- The catalogue nr. (BWV/opus) is followed by a middle dot (alt+0183)
- The Scene (or movement, depending on type of classical work) is followed by a tilde (alt+0126)

So you would have:
Dido and Aeneas • Z. 626· Act II ~ Scene II. "Oft she visits this lone mountain"

or:
Préludes flasques (pour un chien) • I. Voix d'intérieur


---------------------------------------


These are the formulas that dissect the full title, and create separate virtual tags for each item:


To create and populate a virtual tag for 'Work':

Code
$If($Contains(<Title>,§)="T",$Split(<Title>,"§",1),$If($Contains(<Title>,•)="T",$Split(<Title>," •",1),))

To create and populate a virtual tag for 'Opus/cat.':

Code
$If($Contains(<Title>,·)="T",$If($Contains(<Title>,•)="T",$Split($Split(<Title>,"• ",2),·,1),$Split(<Title>,·,1)),)

To create and populate a virtual tag for 'Work+Opus/cat.':

Code
$If($Contains(<Title>,§)="T",$Split(<Title>,§,1),$If($Contains(<Title>,·)="T",$Split(<Title>,·,1),$If($Contains(<Title>,•)="T",$Split(<Title>,•,1),)))


To create and populate a virtual tag for 'Act/mov.':

Code
$If($Contains(<Title>,~)="T",$If($Or($Contains(<Title>,•)="T",$Contains(<Title>,·)="T"),$If($And($Contains(<Title>,•)="T",$Contains(<Title>,·)="T"),$Split($Split(<Title>,·,2),~,1),$If($Contains(<Title>,·)="T",$Split($Split(<Title>,"· ",2)," ~",1),$Split($Split(<Title>,"• ",2)," ~",1))),$Split(<Title>," ~",1)),)

To create and populate a virtual tag for 'Scene/title':

Code
$If($Contains(<Title>,§)="T",$Split(<Title>,§,2),$If($Contains(<Title>,~)="T",$Split(<Title>,"~ ",2),$If($Contains(<Title>,·)="T",$Split(<Title>,"· ",2),$If($Contains(<Title>,•)="T",$Split(<Title>,"• ",2),<Title>))))

(I believe they work quite well, but I am open to suggestions if anybody knows shorter or possibly more efficient formulas?)


If all is setup as above, you should be able to get something like this screenshot.
(the titles of the first 8 tracks were designed to check if the formulas work correctly in all possible cases)



edit:
To clear up some possible confusion about the screenshot examples:
Not all classical compositions are multi-level, or have catalogue nrs.
Tracks 1-8 from the screenshot above represent such possibilities, and tests and shows if the formulas are able to dissect and infer the correct info in all cases.



With an actual classical work it could then show up like this in MusicBee:




                                                           __________________________________________


Some additional notes:

1.
You can choose your own, unique names for these virtual tags.
(Using the name 'Work' is not possible, since that's an existing regular tag. But you could use something like 'Work (v)')

The names I chose for 'Act/movement' and 'Scene/title' are subjective choices.
You might as well choose names such as 'part', 'piece' or 'segment'.
There is no absolute right or wrong here. (maybe unless you have only opera's, or only symphonies, etc. in your library)

2.
When you don't require separate fields for both 'work' and 'cat.nr.', just place the • icon after the cat.nr., and don't use the · icon.

3.
There will be tracks/albums, or situations where you don't require much fine-grained separation.
For those cases you can choose not to go in so much detail with the above delimiters, but use only one delimiter that must be placed in-between the 'work-cat.nr.' and the full 'act-scene-title'.

That delimiter must be: §
(alt+0167 section sign)
If these classical titles already have some delimitation, search&replacing the first : in a title, with § might give quick and good results.

4.
This scheme does not make use of the existing 'movement' and 'work' tag frames.
I had some doubts about using them or not, but after a period of experimenting, for now I decided not to.
My reasons for that are:

- the term 'movement' is rather ambiguous. (and sometimes inappropriate; Opera has no 'movements')
- there doesn't seem to be a lot of consensus on how the data in that frame is supposed to be used and handled.
- I wanted to limit the number of needed (non-virtual) tags.
- if 'work', 'scene', 'act' etc. are well defined and delimited in the title, I currently see no need or purpose to additionally populate these specific tags.
  (the virtual tags will show them perfectly)

5.
Maybe there should be an additional hierarchical level between/below 'act/movement' and 'title/scene'?
Is anybody using, or requiring more than two levels below 'work'?
(I would prefer to keep it as simple as possible myself, it's already complex enough)

6.
While the 'work' and 'movement' tag frames are not made use of in this scheme, for classical titles (and also 'popular' music works that are constructed from parts) I do activate them in MusicBee, because:

- It will make the movement# tag available.
- It will write the 'SHOW MOVEMENT=1' tag frame that can be used for other displaying purposes relating to classical music.
  (to activate these classical tags, click the small 'arrows up/down' icon right behind 'track title:' in the tag editor panel)

I myself use that flag for better displaying and handling of a mixed library containing both popular and classic music.

For example I created virtual tags named:

- 'Album/work' - which shows the album title for popular music, and the 'Work' name for classical works.
- 'Album/work artist' - which shows the album artist for popular music, and the 'composer+conductor+orchestra+main performer' for classical works.

                                                           __________________________________________


And finally some real world examples:


full delimiting:
Dido and Aeneas Z. 626· Act II ~ Scene II. "Oft she visits this lone mountain"

combined work/cat.nr. delimiting:
Dido and Aeneas, Z. 626 Act II ~ Scene II. "Oft she visits this lone mountain"

a composition that has no cat.nr. and just one level:
Préludes flasques (pour un chien)I. Voix d'intérieur

single (quick) delimiting:
Dido and Aeneas, Z. 626: § Act II,Scene II. "Oft she visits this lone mountain"


For all these examples, thanks to using these custom delimiters (and this scheme), you don't have to worry at all about occurrence and locations of colons, commas, hyphens etc. in the title.

And that is a big advantage, and an important reason for me setting up this scheme, since lots of classical titles 'in the wild' are quite a mess in regards to the use of these common delimiters.


                                                           __________________________________________



Feel free to give feedback if you see any flaws, or if you have suggestions to improve on this tips&tricks, or the scheme itself in any way.
Last Edit: November 25, 2017, 07:52:56 PM by hiccup

theta_wave

  • Hero Member
  • *****
  • Posts: 659
This is how your classical titles should be constructed to make these formulas work:

Work • Opus· Scene ~ Title

- The work title is followed by a bullet (alt+0149)
- The catalogue nr. (BWV/opus) is followed by a middle dot (alt+0183)
- The Scene (or movement, depending on type of classical work) is followed by a tilde (alt+0126)

So you would have:
Dido and Aeneas • Z. 626· Act II ~ Scene II. "Oft she visits this lone mountain"

or:
Préludes flasques (pour un chien) • I. Voix d'intérieur
Using the above examples with $rxreplace

Work
Code
$If($Contains(<title>,•)="T",$rxreplace(<title>,"(^.*?)(\s•.+$)","$1"),)
Opus/cat.
Code
$If($And($Contains(<title>,"•")="T",$Contains(<title>,"·")="T"),$rxreplace(<title>,"(?:^.*?\s•\s)(.*?)(·.+$)","$1"),)
Act/Mov.
Code
$If($And($Contains(<title>,"·")="T",$Contains(<title>,"~")="T"),$rxreplace(<title>,"(?:^.*?·\s)(.*?)(\s~.+$)","$1"),)
Title
Code
$If($Contains(<title>,"~")="T",$rxreplace(<title>,"(?:^.*?~\s)(.+$)","$1"),$If($Contains(<title>,"·")="T",$rxreplace(<title>,"(?:^.*?·\s)(.+$)","$1"),$If($Contains(<title>,"•")="T",$rxreplace(<title>,"(?:^.*?•\s)(.+$)","$1"),<title>)))

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
Using the above examples with $rxreplace

Close but no cigar ;-)





I have also considered using regex, but I thought that might put more burden on MusicBee than regular formulas?
Do you (or Steven) have ideas about that?
Last Edit: October 04, 2017, 06:04:31 PM by hiccup

Steven

  • Administrator
  • Hero Member
  • *****
  • Posts: 28737
if its just for display then it really shouldnt matter how complex the formulas are.
If you are talking about sorting/ grouping then it can become more of an issue as regex/ rxreplace are relatively expensive for processing

theta_wave

  • Hero Member
  • *****
  • Posts: 659
Using the above examples with $rxreplace

Close but no cigar ;-)

Hmmm, maybe I should have formatted them like this: $If(<Genre>="Classical",above regex formulas,"FIX YOUR TAGS")

 ;)

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
Hmmm, maybe I should have formatted them like this: $If(<Genre>="Classical",above regex formulas,"FIX YOUR TAGS")

 ;)

I understand it's a joke, but I'm not getting it?
And the tracks in my screenshot do have 'Classical' as genre.

And I don't see a reference to genre in your regexes?


On a side-note, I have not made my formulas dependent on 'genre' on purpose, since I also want them to work on Rock-operas, Jazz-suites or whatever.

theta_wave

  • Hero Member
  • *****
  • Posts: 659
Hmmm, maybe I should have formatted them like this: $If(<Genre>="Classical",above regex formulas,"FIX YOUR TAGS")

 ;)

I understand it's a joke, but I'm not getting it?
And the tracks in my screenshot do have 'Classical' as genre.

And I don't see a reference to genre in your regexes?

It was a joke in reference to the pic you posted testing my regex formulas.  Since I'm a classical music nut, I cringe at the sight of a <title> for a classical track without a catalog or opus reference, or an appropriate work title.  Basically, if the regex's don't work with your classical track's <title>, then the message "FIX YOUR TAGS" fills the field as a not-so-subtle reminder.  Just my 2c, no offense intended.

Here's a helpful reference: http://imslp.org/

Even itunes has a decent format for its classical album <title> fields.  Still, I have to run them through a custom mp3tag action group (akin to a macro) to get them in tip top shape.

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
It was a joke in reference to the pic you posted testing my regex formulas.  Since I'm a classical music nut, I cringe at the sight of a <title> for a classical track without a catalog or opus reference, or an appropriate work title.  Basically, if the regex's don't work with your classical track's <title>, then the message "FIX YOUR TAGS" fills the field as a not-so-subtle reminder.  Just my 2c, no offense intended.
Here's a helpful reference: http://imslp.org/
Even itunes has a decent format for its classical album <title> fields.  Still, I have to run them through a custom mp3tag action group (akin to a macro) to get them in tip top shape.

You are getting me even more confused now.
Have you read the content of my tutorial?
Is it clear that tracks 1-8 from the screenshot are just test cases I used to see if the formulas work for all possible occurring types of classical works?
Not all compositions are multi-level, and/or have catalogue nrs. That's what those tracks represent.

I only posted the last screenshot to show that your regex expressions fail to recognize some of such possible compositions.
For example: Test title #3 simulates a composition that is part of a 'work', 'a scene' and has a title.
It has no opus or BVW nr. That's not some sloppy omission. It has no catalogue nr.
And it is perfectly delimited.

The regex you posted doesn't extract the 'scene' though. It's only able to distract the 'work' and the 'title' from the full title, but it leaves the level in-between (named 'Scene') empty.
And it has troubles with dissecting tracks 5, 6 and 7 also.

edit
I added a comment below the original screenshot to explain that better.
Last Edit: October 03, 2017, 09:02:05 PM by hiccup

theta_wave

  • Hero Member
  • *****
  • Posts: 659
It has no opus or BVW nr. That's not some sloppy omission. It has no catalogue nr.
And it is perfectly delimited.
Depends on the context as a proper .csv delimitation would be akin to "Work•·Scene~Title" to account for the missing opus/catalog nr.  Ideally, taking example #3, the title format should be Work||Scene|Title, or whatever one's choice of delimiter so long it is the same.
Last Edit: October 03, 2017, 09:44:05 PM by theta_wave

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
Depends on the context as a proper .csv delimitation would be akin to "Work•·Scene~Title" (or ideally, Work||Scene|Title) to account for the missing opus/catalog nr.

Again, the opus nr. is not 'missing'. There never has been an opus nr. The composer died seconds after finishing his only, but very famous composition.
Why make any reference to something that never existed in the first place?

I have never seen iTunes guidelines, MusicBrainz guidelines, or any other examples where a delimiter is suggested for an item that doesn't exist for that work.

Do I understand correctly that in your workflow you use all these delimiters in all your classical tracks? Even if they indicate/reference to something that doesn't exist for those tracks? That seems weird to me.

The only far-sought reason I might consider to do that, is that e.g. I know a track has a BVW nr., but I am not sure what it is at that moment.
Then I could already add the delimiter for it, as some reminder it should be added at a later moment. But that's really very hypothetical.

theta_wave

  • Hero Member
  • *****
  • Posts: 659
Again, the opus nr. is not 'missing'. There never has been an opus nr. The composer died seconds after finishing his only, but very famous composition.
Why make any reference to something that never existed in the first place?

I have never seen iTunes guidelines, MusicBrainz guidelines, or any other examples where a delimiter is suggested for an item that doesn't exist for that work.

Do I understand correctly that in your workflow you use all these delimiters in all your classical tracks? Even if they indicate/reference to something that doesn't exist for those tracks? That seems weird to me.

The only far-sought reason I might consider to do that, is that e.g. I know a track has a BVW nr., but I am not sure what it is at that moment.
Then I could already add the delimiter for it, as some reminder it should be added at a later moment. But that's really very hypothetical.
The opus nr. was "missing" in the workflow, something you would key on immediately if you worked with csv's before.  Think of it as a spreadsheet with columns for criteria.  There is either going to be a value or a null value (nothing).  If you populate rows across the columns left to right, you have to account for the possibility that a value would be null in order to fill out the rest of the row correctly.  This will greatly simplify your schema whether you use $split or $rxreplace without going through unnecessary contortions.

<title> = Work • Opus • Scene • Title
Work: $rxreplace(<title>,"(^.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*$)","$1")
Opus: $rxreplace(<title>,"(^.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*$)","$2")
Scene: $rxreplace(<title>,"(^.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*$)","$3")
Title:$rxreplace(<title>,"(^.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*?)(?:\s•\s)(.*$)","$4")

Note: The above could be simplified further (^.*?)(\s•\s)(.*?)(?:\2)(.*?)(?:\2)(.*$)

If you ever looked at an xml output of Musicbrainz metadata, you'll see similar logic at play (for example, if the title is missing the markup would be <title></title>).

Finally, I'd like to mention that my workflow for classical music is nothing like yours (thank god).  Basically, I organize my classical music as "Work: Movement" making sure that the first semicolon is the only delimiter I need (see below).  I'm in no way suggesting that my way is the one true way.  I like it because it is simple and if feel the urge to look up a work by its catalog or opus number, the search box does the job for me since I mainly refer to works by their titles.



Last Edit: October 03, 2017, 11:33:01 PM by theta_wave

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
Ah, my confusion is diminishing to an acceptable level ;-)

Your formulas are not designed to dissect full titles with delimiters such as mine, or as proposed by iTunes, MusicBrainz et al. at all.
You use them to harvest data from csv-like sources.

That's quite different from what this tips&tricks is about.

And what is very different between what your formulas, and mine are able to do, is separating the levels between acts/movements vs. scenes/parts?
(please correct me if I am wrong)

But if that's true, your setup cannot achieve something like this:



(the header is the 'work' title appended with the name of the composer, it's not the album title)

At least not by querying the title. You would have to additionally populate the work and movement tags.

So then that's really different from what I am trying to do here.

Yet your feedback is very valuable, since it made me realize two specific things than can be improved on, so this scheme will become easier to use for a wider range of use(rs).

The first thing is that just like you, not everybody is interested in having separate fields for 'work title' and 'cat.nr.'
And to be honest, it's something I have doubts about myself also once in a while.

The other thing is that it's very likely that you don't always want to bother with applying this more complex delimiter scheme on tracks or works in your classical library.
Those could be works or tracks you don't care about that much, or works/albums that you are still evaluating to keep or not.

For those cases it would be nice to be able to use only one effective delimiter, to be placed in-between work/cat. nr. and the rest of the full title.
(this is actually what you are doing if I understand correctly)

I will make adjustments to my scheme to accommodate for these two scenarios.
As soon as I figured out the best way to do it I will edit the tutorial.
(edit: done that)

Thanks for brainstorming!


edit
changed the wording related to what I assumed your objectives were with your scheme ;-)
Last Edit: October 05, 2017, 11:11:08 AM by hiccup

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
This is the abbreviated tl;dr version of the start post.

It doesn't explain much about the background of this all (that's what the start post is for), it just explains what to do to make use of this scheme using delimiters in classical titles.

Create the following virtual tags:

Work (v)

Code
$If($Contains(<Title>,§)="T",$Split(<Title>,"§",1),$If($Contains(<Title>,•)="T",$Split(<Title>," •",1),))

Cat.nr. (v)
(note: this one is optional if you are not interested in a dedicated "op./BVW" field)

Code
$If($Contains(<Title>,·)="T",$If($Contains(<Title>,•)="T",$Split($Split(<Title>,"• ",2),·,1),$Split(<Title>,·,1)),)


Act/movement (v)

Code
$If($Contains(<Title>,~)="T",$If($Or($Contains(<Title>,•)="T",$Contains(<Title>,·)="T"),$If($And($Contains(<Title>,•)="T",$Contains(<Title>,·)="T"),$Split($Split(<Title>,·,2),~,1),$If($Contains(<Title>,·)="T",$Split($Split(<Title>,"· ",2)," ~",1),$Split($Split(<Title>,"• ",2)," ~",1))),$Split(<Title>," ~",1)),)


Scene/title (v)

Code
$If($Contains(<Title>,§)="T",$Split(<Title>,§,2),$If($Contains(<Title>,~)="T",$Split(<Title>,"~ ",2),$If($Contains(<Title>,·)="T",$Split(<Title>,"· ",2),$If($Contains(<Title>,•)="T",$Split(<Title>,"• ",2),<Title>))))


To make full use of these virtual tags, delimit your classical titles like this:

Work • cat.nr.· Act(movement) ~ Scene(title)

• = alt+0149 (bullet)
· = alt+0183 (middle dot)
~ = alt+0126 (tilde)


Tip: When you don't require separate fields for both 'work' and 'cat.nr.', just place the • icon after the cat.nr., and don't use the · icon.

For tracks that you don't require much fine-grained separation for at all, you can choose not to use the above delimiters, but only one delimiter, that must be placed in-between the 'work-cat.nr.' and the full 'act-scene-title'.

For that to work, you only have to put the following delimiter in the correct position:

§ = alt+0167 (section sign)

So that would look something like:
Work, cat.nr.: § Act(movement)-Scene(title)-blablabla


some real world examples:

full delimiting:
Dido and Aeneas Z. 626· Act II ~ Scene II. "Oft she visits this lone mountain"

combined work/cat.nr. delimiting:
Dido and Aeneas, Z. 626 Act II ~ Scene II. "Oft she visits this lone mountain"

a composition that has no cat.nr. and just one level:
Préludes flasques (pour un chien)I. Voix d'intérieur

single (quick) delimiting:
Dido and Aeneas, Z. 626: § Act II,Scene II. "Oft she visits this lone mountain"


For all these examples, thanks to using these custom delimiters (and this scheme), you don't have to worry at all about occurrence and locations of colons, commas, hyphens etc. in the title.
Last Edit: October 05, 2017, 11:01:43 AM by hiccup

hiccup

  • Member
  • Hero Member
  • *****
  • Posts: 2617
Perhaps useful to anyone else using a similar system that uses delimiters in the title to make several levels of a musical piece available for further processing:
I made a script for Picard that creates a title that contains the essential title information of a track, delimited up till three levels depending on applicability.
Depending on the type of musical piece, it could result in something you could consider to be: work-movement-part, or work-act-scene, etc.

For me it's a very helpful and now essential addition for automating the process to achieve what I described above.

It is dependent on having the 'Classical Extras' plugin for Picard installed.

A resulting title could look something like this:
work • movement › part

You can (should) change the delimiting characters to your own requirements.

Code
$set(title,$if($gte($get(_cwp_part_levels),1),$if($get(_cwp_work_top),$if($or($get(_cwp_extended_inter_work),$get(_cwp_extended_part)),$get(_cwp_work_top) • ,$get(_cwp_work_top)),)$if($get(_cwp_extended_inter_work),$if($get(_cwp_extended_part),$get(_cwp_extended_inter_work) › ,$get(_cwp_extended_inter_work)),)$get(_cwp_extended_part),%title%))

Note:
Don't take this as a seamless addition to my earlier posts in this thread.
I've moved on a bit, and made some changes to the things I described earlier.
So you'll probably need to get a bit creative to get it all to work the way you would like it to.