History:Object Model/Artist Thoughts

From MusicBrainz Wiki
Revision as of 00:43, 22 November 2005 by DonRedman (talk | contribs) (changed MainArtist to PrimaryArtist (Imported from MoinMoin))
Jump to navigationJump to search

This is a future sketch of how linking artists to "albums"/"tracks" (I use paranthesis as I mean the words in the current sense) could work in the future. It is just a dump of thoughts and later will be worked into other pages. Aim is to solve multiple artist problems and alias problems. Though we still need an interim solution for SG5.

Vocabulary

First we'll define some vocabulary.

Relationships

When selecting the artists for a released album and its tracks (however defined) you want to do three things:

  1. Relate every artist that took part in the release with a description of their role on it
  2. Have a label describing the PrimaryArtist(s) how they are written on the release (ReleaseArtistLabel)
  3. Relating the ReleaseArtistLabel directly to the according ArtistEntities of the ReleaseArtists

The third step is not quite obvious first and might look redundant concerning you also have linked them with their role. Though it has advantages. First if you include TrackGrouping then most contributors are linked to the super groups of the released objects and not the released objects themselves (indeed that leads to not allowing performance ARs and other AdvancedRelationshipTypes to be used for albums any more but only for TrackGroups). Second you also can combine 3. with 1. to solve a redundancy problem of 1.: several releases might have the same ReleaseArtistLabel. Also we want to have some consistency in the ReleaseArtistLabels and keep them easy to maintain. So it might come handy to share them between the releases.

A solution might look like this:

  • Relate all artists/contributors via AdvancedRelationships to the place they belong (that is a super group of a track mostly)
  • Relate ReleaseArtists with core database links to the albums/tracks and give the user the possibility to select a name from the artist: either the ArtistName itself or one of the ArtistAliases. This is then used as the ReleaseArtistLabel for the released album/track.
  • Though: if there are several ReleaseArtists, let the user relate them all to the release and select an ArtistName/ArtistAlias for all of them. Also let the user enter join phrases which are used to combine the selected names to the final ReleaseArtistLabel (LukZ proposal).

Note that as all artists are linked to the appropriate group with AdvancedRelationships there is no need to describe roles for the extra linked ReleaseArtists.

Also note that we have a nice side effect: this is 100% compatible with ID3v2, so good for tagging MP3s. A user with a player that does not differentiate artists by MusicBrainzID but by the main artist field (I think that's the case for every player) might chose to always tag his files with the main ArtistName(s) and not with the ReleaseArtistLabel as this might split one artist into several in the player display.

Then again we have discussed about the VA album problem. It is a difference if an album really is performed by various artists or if it is mostly performed by one artist (who is credited on the front cover) and only one or two tracks are performed by others (contributing with the main artist). So we might want to allow albums that contain songs from different artists to be credited to one single artist (or one or more ReleaseArtists to be correct) as AlbumArtist and still display all TrackArtists.

Rules

Let us now define a bit clearer when we have one PrimaryArtist, when several PrimaryArtists and when we have a collaboration (which again is one PrimaryArtist). Therefore we consider the simple case that there are two artists, artist A and artist B. Then:

  • The artists are working together over a longer period / have done several songs together / have done songs together which were mostly released under a (steady or similar) common ReleaseArtistLabel and do not so much appear on albums of the artists alone -> create a collaboration