More > JRiver Media Center 25 for Windows
Classical music: Shuffle play for multi-movement works
tom9920:
I have found a way to enable shuffle play in a way that keeps multi-movement works together. Here's how I did it. At a high level, the approach is based on these steps:
* Create a user-defined field that has a unique value for each multi-movement work;
* Create a "seed" playlist that contains individual tracks from works to be included in the final playlist;
* Create the final playlist by expanding the seed playlist to all the tracks in the multi-movement work.
Let's see how this works using an example. Let's suppose I want to play three randomly selected piano sonatas by Beethoven.
Step 1: Create a user-defined field called "opus" and, for each track of a Beethoven piano sonata, store the related opus number (e.g., "Op. 106")
Step 2: Create a seed playlist that randomly selects three unique tracks and is itself randomly shuffled: [Media Type]=[Audio] -[Opus]=[] [Composer]=[Beethoven, Ludwig van] [Name]="Piano Sonata" ~nodup= ~n=3 ~sort=Random
Notes For Step 2: The rule for opus is not blank is included as the expand step later would otherwise include all tracks without an opus number in the final playlist. The rules for composer and name are included to exclude works by other composers and works that are not sonatas; depending on the way you tag tracks you may need some other rule(s) to limit the results to Beethoven piano sonatas..
Step 3: Create a final playlist: (([Media Type]=[audio] [=save(0,v_filter[opus][artist])1]=1) or (playlistid==insert your seed playlist # here [=save(1,v_filter[opus][artist])1]=1)) [=load(v_filter[opus][artist])]=1
Notes for Step 3: Use the seed playlist number (not name) to replace the text in red. The first command in this string stores the value "0" in the global variable "v_filter" for each combination of opus and artist in your database. The reason for using the opus and artist combination is for the case that you have multiple performances of the same work by different artists. After this command is executed, if Richard Goode playing the second movement of Op. 106 is in the seed playlist, the global variable associated with this combination now equals "1". The next command stores the value "1" in the global variable in the opus and artist combination where it matches a combination in your seed playlist. So to continue the example, the global variable related to the tracks for Goode's first and third movements of Op. 106 will now also equal 1. The last command loads the tracks with the global variable = "1" into your final playlist.
Thanks to mark_h whose post titled "[HOWTO] Generate an EXPANDED superset from a limited subset" provided the general approach used here.
Have fun with this!
wer:
As you've found, MC doesn't have good straightforward support for the multi-movement compositions of Classical music.
However, a feature was added that makes this task much easier than the method you've happened onto using global variables. (In fact there are a couple of easier ways to do this, without using global variables.) Global variables are too complicated to easily implement for a lot of people.
The easiest way is to rely on the "Link Tracks" feature.
Simply select all the movements in a composition, and right-click, and select Library Tools->Link Tracks
Now, when added to a Smartlist, these tracks will play together in order.
You should still use the "Remove Duplicate" modifier to ensure the composition appears on the playlist only once.
Also, regarding your "Opus" field, you may find it's more efficient to use calculated data, rather than entering data manually.
I use a custom field "Composition" for this purpose. It is a field of type "Calculated Data" with the definition:
listitem([name],0,:)
This works in conjunction with having a consistent naming convention for classical music. I name my classical tracks such that the name of the composition comes first, separated from the track-specific info by a colon. So if you have the three tracks for Mozart's 1st Piano Concerto named as follows:
Concerto No.1 in F major, K.37: I. Allegro
Concerto No.1 in F major, K.37: II. Andante
Concerto No.1 in F major, K.37: III. Allegro
They will all automatically share the [Composition] value "Concerto No.1 in F major, K.37"
So simply by naming tracks correctly, they will automatically share Composition fields. This makes it possible to do what you're after without using global variables, and in fact without even using linked tracks.
tom9920:
Thanks for the reply. My goal was to be able to play classical compositions randomly.
I tested link tracks and found that play order was not preserved when shuffling a playlist. But maybe I made a mistake in testing? (Also, I didn't see that it was easy in practice to automate the process of linking tracks.)
And of course sorting by name (with the right naming convention) will keep multi-movement tracks together, but again, it wouldn't work in the case where you have a rule in a smartlist that shuffles the tracks.
Regarding the "opus" field, I used that example to keep my explanation simple. In practice any field that groups the related movements with a shared unique value works, and I populated the field I used for this purpose with an expression based on my own naming conventions.
I agree that my approach is not very intuitive. My ask--many versions back--was for a playlist group containing other playlists to shuffle the child playlists rather than the tracks of all the child playlists combined. There are probably other good solutions but I guess there aren't enough people using J River to manage classical music to make a better solution a priority.
wer:
--- Quote from: tom9920 on May 17, 2020, 04:27:17 pm ---(Also, I didn't see that it was easy in practice to automate the process of linking tracks.)
--- End quote ---
Linking tracks is a manual process, but it's a two-second process that can be performed when ripping or importing tracks. It's a very small component of the time necessary to edit metadata, especially the metadata of classical music, which always requires manipulation.
--- Quote from: tom9920 on May 17, 2020, 04:27:17 pm ---I tested link tracks and found that play order was not preserved when shuffling a playlist. But maybe I made a mistake in testing?
--- End quote ---
I presume because you are posting in the MC25 board, you are using that version. Perhaps there is some issue with shuffling linked tracks in that version, but I don't have a copy laying around to test, so I couldn't say if it's something you're doing wrong or some issue in MC25.
However, in MC26, the correct order of linked tracks is respected, when shuffling both manually ordered playlists and smartlists where the shuffle modifier is used. I see no mention in the release notes this was changed since MC25.
--- Quote from: tom9920 on May 17, 2020, 04:27:17 pm ---And of course sorting by name (with the right naming convention) will keep multi-movement tracks together, but again, it wouldn't work in the case where you have a rule in a smartlist that shuffles the tracks.
--- End quote ---
Not correct. I do this all the time. If you construct your smartlist correctly, the order of multi-movement compositions can be preserved in a shuffled smartlist, even without using linked tracks. I myself don't use linked tracks, because I just can't be bothered. My naming scheme coupled with the calculated fields I use gets the job done. If I recall correctly, I developed it before the Linked Tracks feature was created.
Dennis in FL:
--- Quote from: wer on May 17, 2020, 01:13:13 pm ---
I use a custom field "Composition" for this purpose. It is a field of type "Calculated Data" with the definition:
listitem([name],0,:)
This works in conjunction with having a consistent naming convention for classical music. I name my classical tracks such that the name of the composition comes first, separated from the track-specific info by a colon. So if you have the three tracks for Mozart's 1st Piano Concerto named as follows:
Concerto No.1 in F major, K.37: I. Allegro
Concerto No.1 in F major, K.37: II. Andante
Concerto No.1 in F major, K.37: III. Allegro
They will all automatically share the [Composition] value "Concerto No.1 in F major, K.37"
So simply by naming tracks correctly, they will automatically share Composition fields. This makes it possible to do what you're after without using global variables, and in fact without even using linked tracks.
--- End quote ---
You lost me. I understand the Composition calculated field and movemnet naming convention. What I don't understand is how they play as a group in a playlist as the composition name and in the correct order. How do you play a "composition?"
Navigation
[0] Message Index
[#] Next page
Go to full version