Update to 1.0 RC1
[xdg-specs:xdg-specs.git] / specifications / FMPSpecs / specification.lyx
1 #LyX 1.6.5 created this file. For more info see http://www.lyx.org/
2 \lyxformat 345
3 \begin_document
4 \begin_header
5 \textclass docbook
6 \use_default_options false
7 \language english
8 \inputencoding auto
9 \font_roman default
10 \font_sans default
11 \font_typewriter default
12 \font_default_family default
13 \font_sc false
14 \font_osf false
15 \font_sf_scale 100
16 \font_tt_scale 100
17
18 \graphics default
19 \paperfontsize default
20 \use_hyperref false
21 \papersize default
22 \use_geometry false
23 \use_amsmath 0
24 \use_esint 0
25 \cite_engine basic
26 \use_bibtopic false
27 \paperorientation portrait
28 \secnumdepth 3
29 \tocdepth 3
30 \paragraph_separation indent
31 \defskip medskip
32 \quotes_language english
33 \papercolumns 1
34 \papersides 1
35 \paperpagestyle default
36 \tracking_changes false
37 \output_changes false
38 \author "" 
39 \author "" 
40 \end_header
41
42 \begin_body
43
44 \begin_layout Title
45 Free Media Player Specifications
46 \end_layout
47
48 \begin_layout Title
49 Tag Specification
50 \end_layout
51
52 \begin_layout Date
53 version 1.0 RC1; May 30th, 2010
54 \end_layout
55
56 \begin_layout Author
57 Copyright 2009-2010 by 
58 \begin_inset Flex Element:Firstname
59 status collapsed
60
61 \begin_layout Plain Layout
62 Jeff
63 \end_layout
64
65 \end_inset
66
67  
68 \begin_inset Flex Element:Surname
69 status collapsed
70
71 \begin_layout Plain Layout
72 Mitchell
73 \end_layout
74
75 \end_inset
76
77  <
78 \begin_inset CommandInset href
79 LatexCommand href
80 target "mitchell@kde.org"
81 type "mailto:"
82
83 \end_inset
84
85 >
86 \end_layout
87
88 \begin_layout Abstract
89 This specification describes various audio file tag metadata intended to
90  increase interoperability between free music players for things such as
91  ratings, playcounts, performer roles, and more.
92  It does this by proposing standards for common functionality needs where
93  none currently exist, and doing so in a way that is easily adoptable cross-play
94 er and cross-format.
95  It is designed to be robust against future needs and to prevent possible
96  conflicts with other tag identifiers and values.
97 \end_layout
98
99 \begin_layout Standard
100 \begin_inset CommandInset toc
101 LatexCommand tableofcontents
102
103 \end_inset
104
105
106 \end_layout
107
108 \begin_layout Section
109 License
110 \end_layout
111
112 \begin_layout Standard
113 This specification is licensed under the Creative Commons Attribution-No
114  Derivative Works 3.0 Unported License.
115  You are free to copy, distribute and transmit this work, provided that
116  the copyright information and full URL to the license information page
117  (
118 \begin_inset Flex URL
119 status collapsed
120
121 \begin_layout Plain Layout
122
123 http://creativecommons.org/licenses/by-nd/3.0/
124 \end_layout
125
126 \end_inset
127
128 ) remain intact.
129  You may not alter, transform, or build upon this work.
130 \end_layout
131
132 \begin_layout Standard
133 The reason No Derivative Works is specified is due to the status of this
134  document as a specification.
135  Specifications become useless if they go forth and multiply; the utility
136  of a specification lies in having a common shared document.
137  If there is something that you feel needs to be added, updated or changed
138  in this specification, please email the author, who will be glad to work
139  with all interested parties.
140 \end_layout
141
142 \begin_layout Section
143 Audio Metadata Tags
144 \end_layout
145
146 \begin_layout Standard
147 The metadata tag formats evolved from Quod Libet's VorbisComments suggestions
148  at 
149 \begin_inset Flex URL
150 status collapsed
151
152 \begin_layout Plain Layout
153
154 http://code.google.com/p/quodlibet/wiki/Specs_VorbisComments
155 \end_layout
156
157 \end_inset
158
159 , however this attempts to not only address ambiguities and incompatibilities
160  with the specification at that URL, but also to define how this functionality
161  should be applied across formats.
162  It is intended that as usable ways of inserting the metadata described
163  become available for formats not currently specified, that this document
164  will be updated to meet those needs.
165 \end_layout
166
167 \begin_layout Standard
168 All newly-specified tags carry an identifier 
169 \begin_inset Quotes eld
170 \end_inset
171
172 FMPS_
173 \begin_inset Quotes erd
174 \end_inset
175
176  to tie the tags to this specification.
177  The reason is simple: since the official metadata specifications either
178  fail to define or define unusable tags, these values are only official
179  to the extent that this specification is adopted.
180  Without an identifier to give context to the meanings and limitations of
181  the values, there is a real possibility that a noncompliant media player
182  will use the same tag names in an incompatible fashion, whether intentionally
183  or not, and there is no way to determine whether a seemingly compatible
184  use of the tags by a noncompliant player actually results in user-intended
185  behavior.
186  The 
187 \begin_inset Quotes eld
188 \end_inset
189
190 FMPS_
191 \begin_inset Quotes erd
192 \end_inset
193
194  identifier and this specification document is therefore used in a similar
195  fashion to XML schema declarations.
196 \end_layout
197
198 \begin_layout Standard
199 As these identifiers are read and modified only by players and advanced
200  users, it is not expected to be a hindrance to adoption or to cause undue
201  burden on either.
202 \end_layout
203
204 \begin_layout Subsection
205 Common Data and Tag Information
206 \end_layout
207
208 \begin_layout Standard
209 This section provides 
210 \begin_inset Quotes eld
211 \end_inset
212
213 up-front
214 \begin_inset Quotes erd
215 \end_inset
216
217  information that is pertinent to all tags described below, such as what
218  encoding to use and which tags to use in various formats.
219 \end_layout
220
221 \begin_layout Standard
222 For all tag formats, the following is defined:
223 \end_layout
224
225 \begin_layout Itemize
226 All identifiers are ASCII strings, and defined in the sections below.
227 \end_layout
228
229 \begin_layout Itemize
230 All values are strings, which must adhere to the allowed encoding and length
231  limits in the relevant specifications, but should use Unicode whenever
232  possible.
233 \end_layout
234
235 \begin_deeper
236 \begin_layout Itemize
237 To keep the specification simple, no ranges of control characters are defined
238  which should never be included in a string.
239  It is assumed that the used string-handling library will properly handle
240  any such characters encountered.
241  It is highly recommended, however, that no such control characters are
242  used, except when specified below.
243 \end_layout
244
245 \end_deeper
246 \begin_layout Itemize
247 Although identifier case is specified for the different types of tags, compariso
248 ns against identifier strings MUST be case-insensitive.
249 \end_layout
250
251 \begin_layout Itemize
252 A period/full stop is used to separate the digits in a float value from
253  the fractional part of the float.
254  All float values MUST include a period/full stop (1 is not acceptable;
255  1.0 is correct).
256 \end_layout
257
258 \begin_layout Itemize
259 Float values should be limited to six decimal places.
260 \end_layout
261
262 \begin_layout Itemize
263 All lists are value strings.
264  For any lists, entries are separated with a double semicolon ';;' and fields
265  within an entry are separated with a double colon '::' (examples in following
266  sections).
267  This allows for easy splitting of list entries and entry fields with most
268  string libraries.
269  If any value needs to represent a double semicolon or double colon, it
270  should escape each of them with a backslash ('
271 \backslash
272 ;
273 \backslash
274 ;' or '
275 \backslash
276 :
277 \backslash
278 :').
279  It is not expected that there will be a need to escape these escape sequences
280  and thus further escaping is not currently defined.
281 \end_layout
282
283 \begin_layout Standard
284 The following sections describe where the information should be stored in
285  specific tag formats.
286 \end_layout
287
288 \begin_layout Subsubsection
289 MP3
290 \end_layout
291
292 \begin_layout Standard
293 MP3 values should be stored in a TXXX frame with the Description set to
294  the specified identifier and the Text set to the string representation
295  of the value.
296  The Description should be in CamelCase as specified in the following sections,
297  e.g.
298  FMPS_Rating.
299 \end_layout
300
301 \begin_layout Subsubsection
302 VorbisComments
303 \end_layout
304
305 \begin_layout Standard
306 Any file supporting VorbisComments (Vorbis, FLAC, Theora, Speex) should
307  add a comment with the Key set to the specified identifier and the Value
308  set to the string representation of the value.
309  The Key should be in all upper-case, e.g.
310  FMPS_RATING.
311 \end_layout
312
313 \begin_layout Subsubsection
314 APEv2
315 \end_layout
316
317 \begin_layout Standard
318 Any file supporting APEv2 should add a comment with the Key set to the specified
319  identifier and the Value set to the string representation of the value.
320  The Key should be in all upper-case, e.g.
321  FMPS_RATING.
322 \end_layout
323
324 \begin_layout Subsubsection
325 MP4
326 \end_layout
327
328 \begin_layout Standard
329 MP4 values should be stored at ----:com.apple.iTunes:Identifier with the value
330  a string representation of the tag's value.
331  The Identifier should be in CamelCase as specified in the following sections,
332  e.g.
333  FMPS_Rating.
334 \end_layout
335
336 \begin_layout Subsubsection
337 Windows Media
338 \end_layout
339
340 \begin_layout Standard
341 Windows Media values should be stored in the FMPS/Identifier namespace with
342  the value a string representation of the tag's value.
343  The Identifier should be in CamelCase as specified in the following sections,
344  e.g.
345  FMPS_Rating.
346 \end_layout
347
348 \begin_layout Subsection
349 Rating Tags
350 \end_layout
351
352 \begin_layout Standard
353 Most media players support the notion of rating content, however standards
354  for storing ratings in files do not exist.
355  Some file metadata formats completely lack rating fields; others require
356  personally identifiable information to be used as an identifier (such as
357  a user's email address) or an organizational identifier (which reduces
358  cross-player compatibility).
359  The goal therefore is simple: to avoid any personally identifying information
360  but to avoid tying the rating to a specific player.
361 \end_layout
362
363 \begin_layout Standard
364 Three types of ratings are currently defined: user ratings, critic ratings,
365  and automatic (or algorithmic) ratings.
366 \end_layout
367
368 \begin_layout Standard
369 Although users are more naturally able to understand integer ratings, only
370  advanced users will interact with these tags directly; otherwise they will
371  be presented to the user via a conforming application.
372  Meanwhile, there are tangible benefits to storing ratings as floating-point
373  numbers, mainly due to the fact that the increased precision allows for
374  a number of interesting and useful algorithmic rating schemes to be used.
375  However, using both integer and floating-point values unnecessarily increases
376  complexity of both this spec and application code.
377  Therefore, both values are stored as floating-point numbers.
378  Conversion to and from these and an integer scale presented to the user
379  in an application is easily accomplished in the application's code if it
380  is so desired.
381 \end_layout
382
383 \begin_layout Standard
384 Four tags are defined, corresponding to the three types of defined ratings,
385  plus a canonical value: FMPS_Rating_User; FMPS_Rating_Critic; FMPS_Rating_Algor
386 ithm; and FMPS_Rating (the canonical value).
387  A file that has no rating tag for a specific purpose is to be considered
388  unrated for that purpose (user, critic or algorithm).
389 \end_layout
390
391 \begin_layout Subsubsection
392 All Rating Tags
393 \end_layout
394
395 \begin_layout Itemize
396 Ratings are a float value between 0.0 and 1.0, inclusive.
397  0.0 is the lowest possible rating; 1.0 is the highest possible rating.
398 \end_layout
399
400 \begin_layout Itemize
401 Ratings should only be rounded when necessary, in order to increase cross-player
402  compatibility.
403 \end_layout
404
405 \begin_layout Subsubsection
406 FMPS_Rating
407 \end_layout
408
409 \begin_layout Itemize
410 The canonical rating value in FMPS_Rating should be set whenever a user
411  rates the track.
412  This is in addition to any value stored for that user in FMPS_Rating_User.
413  This value is canonical because if a player does not support multiple users
414  (or if no user identifier is set) this is the value that should be returned.
415 \end_layout
416
417 \begin_layout Itemize
418 If a user removes ratings from a track in the media player's database, the
419  value of the FMPS_Rating tag should be cleared as well.
420 \end_layout
421
422 \begin_layout Subsubsection
423 FMPS_Rating_User
424 \end_layout
425
426 \begin_layout Itemize
427 If a player supports the notion of multiple users (perhaps from discovery
428  of the current user from the operating system) and wishes to allow the
429  users to keep separate ratings, it stores these values in the FMPS_Rating_User
430  tag.
431 \end_layout
432
433 \begin_layout Itemize
434 Applications supporting multiple user ratings should have a way for users
435  to define their preferred identifier.
436  
437 \end_layout
438
439 \begin_layout Itemize
440 The values are in the form of a list as defined in Section 2.1, with list
441  entries in the format of UserIdentifier::Value.
442  There may not be empty strings.
443 \end_layout
444
445 \begin_layout Itemize
446 Example: 
447 \begin_inset Quotes eld
448 \end_inset
449
450 Alice Abba::0.6;;Bob Beatles::0.8
451 \begin_inset Quotes erd
452 \end_inset
453
454 .
455 \end_layout
456
457 \begin_layout Subsection
458 FMPS_Rating_Critic
459 \end_layout
460
461 \begin_layout Itemize
462 The values are in the form of a list as defined in Section 2.1, with list
463  entries in the format of Publication::Critic::Rating.
464  If the critic is unaffiliated, or if the rating is by a publication with
465  no byline, the special value 
466 \begin_inset Quotes eld
467 \end_inset
468
469 FMPS_Nothing
470 \begin_inset Quotes erd
471 \end_inset
472
473  should be used to denote this; there may not be empty strings.
474 \end_layout
475
476 \begin_layout Itemize
477 Example: 
478 \begin_inset Quotes eld
479 \end_inset
480
481 Rolling Stone::Ralph Gleason::0.83;;musicOMH.com::FMPS_Nothing::0.76;;Metacritic::F
482 MPS_Nothing::0.8;;FMPS_Nothing::Some Dude::0.9
483 \begin_inset Quotes erd
484 \end_inset
485
486
487 \end_layout
488
489 \begin_layout Subsubsection
490 FMPS_Rating_Algorithm
491 \end_layout
492
493 \begin_layout Itemize
494 The values are in the form of a list as defined in Section 2.1, with list
495  entries in the format of Application::Algorithm::Rating.
496  All fields must be defined; no fields may be left empty.
497 \end_layout
498
499 \begin_layout Itemize
500 In cases where the algorithm is intended to be global/collaborative/cross-applic
501 ation, the Application value should be set to some agreed-upon value.
502  In other words, it is suggested to use the application name for the Application
503  part of the identifier, but it may also be used to identify a 
504 \begin_inset Quotes eld
505 \end_inset
506
507 group
508 \begin_inset Quotes erd
509 \end_inset
510
511  of algorithms, or some arbitrary other value that can be used for identificatio
512 n.
513 \end_layout
514
515 \begin_layout Itemize
516 Example: 
517 \begin_inset Quotes eld
518 \end_inset
519
520 Amarok::AutoRate::0.52;;VLC::Standard::0.6;;QuodLibet::RatingPluginX::0.35;;The
521  Music Player Alliance::Rating Algorithm 1::0.5
522 \begin_inset Quotes erd
523 \end_inset
524
525
526 \end_layout
527
528 \begin_layout Standard
529 A note on the floating point values: some players may only allow users to
530  rate in increments of whole numbers between 1 and 5; others 0 and 10; and
531  so on.
532  However, players should try to ensure that the rating they display and
533  use for any purposes adheres to that saved in the tag when possible.
534  For instance, if a track has a rating of 0.9 and an application only shows
535  ratings using five star icons in full-star increments, this would be rounded
536  within the application to five stars.
537  However, the user may in fact have set the rating to 9/10 in another applicatio
538 n.
539  If the rating was being shown numerically, ideally the application would
540  only round this number when absolutely necessary and display 4.5 instead
541  of 5, which would more accurately reflect the user's set rating.
542 \end_layout
543
544 \begin_layout Subsection
545 Playcount Tags
546 \end_layout
547
548 \begin_layout Standard
549 As with ratings, there are multiple kinds of playcount tags (user and algorithmi
550 c) in addition to a canonical value.
551  The user tag tracks how many times a song has been played for a user.
552  The auto/algorithmic value can be used in an application-specific way to
553  do interesting things; for instance, to cumulatively track exact percentages
554  of tracks played, in order to display to the user the number of days/hous/minut
555 es/seconds they have spent listening to a particular song.
556  
557 \end_layout
558
559 \begin_layout Standard
560 Three tags are defined, corresponding to the two types of defined playcounts,
561  plus a canonical value: FMPS_Playcount_User; FMPS_Playcount_Algorithm;
562  and FMPS_Playcount (the canonical value).
563  A file that has no playcount tag for a specific purpose is to be considered
564  unplayed for that purpose (user or algorithm).
565 \end_layout
566
567 \begin_layout Subsubsection
568 User Playcount Criteria
569 \end_layout
570
571 \begin_layout Standard
572 The user playcount isn't meant to be set by the user, but rather to follow
573  these rules that define user behavior.
574  A file is to be considered 
575 \begin_inset Quotes eld
576 \end_inset
577
578 played
579 \begin_inset Quotes erd
580 \end_inset
581
582  if it meets the following criteria, inspired by Last.fm's scrobbling rules:
583 \end_layout
584
585 \begin_layout Itemize
586 If the track is less than thirty seconds long, the entire song must be played.
587 \end_layout
588
589 \begin_layout Itemize
590 If the track is more than thirty seconds long but less than eight minutes
591  long, at least fifty percent of the file must be played, calculated via
592  length of track.
593  For instance, if a track is one minute long, at least thirty seconds of
594  the track must have been played, although if the user skips backwards multiple
595  times and listens to the same ten seconds of the track three times in a
596  row, this may be considered a valid playcount.
597 \end_layout
598
599 \begin_layout Itemize
600 If the track is longer than eight minutes, at least four minutes of the
601  track must be played.
602 \end_layout
603
604 \begin_layout Standard
605 User playcounts are float values representing integers (1.0, 141.0, etc.).
606  They are never fractional values; a song was either played, or it wasn't.
607 \end_layout
608
609 \begin_layout Subsubsection
610 All Playcount Tags
611 \end_layout
612
613 \begin_layout Itemize
614 Playcounts are a float value not less than 0.0.
615  0.0 is valid and means unplayed.
616 \end_layout
617
618 \begin_layout Itemize
619 The maximum value is 0.000001 less than the largest value able to be stored
620  in a 32-bit unsigned integer: 4,294,967,294.999999.
621  This is so that playcount values can be rounded to an integer equivalent,
622  if necessary.
623 \end_layout
624
625 \begin_layout Subsubsection
626 FMPS_Playcount
627 \end_layout
628
629 \begin_layout Itemize
630 The canonical playcount value in FMPS_Playcount should be set whenever a
631  user plays a track.
632  This is in addition to any value stored for that user in FMPS_Playcount_User.
633  This value is canonical because if a player does not support multiple users
634  (or if no user identifier is set) this is the value that should be returned.
635 \end_layout
636
637 \begin_layout Itemize
638 If a user has an identifier set to store per-user playcounts, when this
639  value is set it should be set to the value of that user's playcount.
640  In other words, the last value held in FMPS_Playcount will be equivalent
641  to the latest user's personal playcount, if any.
642 \end_layout
643
644 \begin_layout Itemize
645 If a user resets the playcount for a track in the media player's database,
646  the value of the FMPS_Playcount tag should be cleared as well.
647 \end_layout
648
649 \begin_layout Itemize
650 FMPS_Playcount stores 
651 \begin_inset Quotes eld
652 \end_inset
653
654 full plays
655 \begin_inset Quotes erd
656 \end_inset
657
658  of a track according to the rules in Section 2.3.1.
659 \end_layout
660
661 \begin_layout Subsubsection
662 FMPS_Playcount_User
663 \end_layout
664
665 \begin_layout Itemize
666 If a player supports the notion of multiple users (perhaps from discovery
667  of the current user from the operating system) and wishes to allow the
668  users to keep separate playcounts, it stores these values in the FMPS_Playcount
669 _User tag.
670 \end_layout
671
672 \begin_layout Itemize
673 Applications supporting multiple user playcounts should have a way for users
674  to define their preferred identifier.
675  
676 \end_layout
677
678 \begin_layout Itemize
679 The values are in the form of a list as defined in Section 2.1, with list
680  entries in the format of UserIdentifier::Value.
681  There may not be empty strings.
682 \end_layout
683
684 \begin_layout Itemize
685 FMPS_Playcount_User stores 
686 \begin_inset Quotes eld
687 \end_inset
688
689 full plays
690 \begin_inset Quotes erd
691 \end_inset
692
693  of a track according to the rules in Section 1.3.1.
694 \end_layout
695
696 \begin_layout Itemize
697 Example: 
698 \begin_inset Quotes eld
699 \end_inset
700
701 Alice Abba::1.0;;Bob Beatles::133.0
702 \begin_inset Quotes erd
703 \end_inset
704
705 .
706 \end_layout
707
708 \begin_layout Subsubsection
709 FMPS_Playcount_Algorithm
710 \end_layout
711
712 \begin_layout Itemize
713 The values are in the form of a list as defined in Section 2.3.1, with list
714  entries in the format of Application::Algorithm::Playcount.
715  All fields must be defined; no fields may be empty.
716 \end_layout
717
718 \begin_layout Itemize
719 In cases where the algorithm is intended to be global/collaborative/cross-applic
720 ation, the Application value should be set to some agreed-upon value.
721  In other words, it is suggested to use the application name for the Application
722  part of the identifier, but it may also be used to identify a 
723 \begin_inset Quotes eld
724 \end_inset
725
726 group
727 \begin_inset Quotes erd
728 \end_inset
729
730  of algorithms, or some arbitrary other value that can be used for identificatio
731 n.
732 \end_layout
733
734 \begin_layout Itemize
735 For algorithms, a track's length should be considered to be worth 1.0 playcounts;
736  the user skipping parts of the track may decrease the value below 1.0, and
737  the user repeating parts of the track may increase this value past 1.0.
738 \end_layout
739
740 \begin_layout Itemize
741 Example: 
742 \begin_inset Quotes eld
743 \end_inset
744
745 Amarok::AutoPlaycount::152.69;;VLC::Standard::198.0;;QuodLibet::RatingPluginX::165
746 2.19;;The Music Player Alliance::Rating Algorithm 1::0.5
747 \begin_inset Quotes erd
748 \end_inset
749
750
751 \end_layout
752
753 \begin_layout Subsection
754 Performer Roles
755 \end_layout
756
757 \begin_layout Standard
758 Performer roles allow you to describe the performers in a track.
759  Current support for these roles in tag formats is sporadic or difficult
760  to parse.
761  As many of these tags as desired can be specified, to include all relevant
762  performer information.
763 \end_layout
764
765 \begin_layout Itemize
766 The identifier used is 
767 \begin_inset Quotes eld
768 \end_inset
769
770 FMPS_Performers.
771  The value is a list in the form of Performer::Role, where Role is the user-defi
772 ned role (
773 \begin_inset Quotes eld
774 \end_inset
775
776 Guitar
777 \begin_inset Quotes erd
778 \end_inset
779
780
781 \begin_inset Quotes eld
782 \end_inset
783
784 Guitar (Backup)
785 \begin_inset Quotes erd
786 \end_inset
787
788
789 \begin_inset Quotes eld
790 \end_inset
791
792 Vocals
793 \begin_inset Quotes erd
794 \end_inset
795
796 ).
797 \end_layout
798
799 \begin_layout Itemize
800 Example: 
801 \begin_inset Quotes eld
802 \end_inset
803
804 Willy Nelson::Guitar;;Eric Clapton::Backup Guitar;;B.B.
805  King::Vocals
806 \begin_inset Quotes erd
807 \end_inset
808
809
810 \end_layout
811
812 \begin_layout Subsection
813 Lyrics
814 \end_layout
815
816 \begin_layout Standard
817 Embedding lyrics into a file allows users to save custom lyrics and to still
818  see the lyrics when not connected to the Internet.
819  Since different users may wish to have different sets of lyrics (for example,
820  if customizing lyrics against a music-only track) and different Internet
821  sources may have different lyrics, it is possible to store multiple lyrics
822  values by specifying a source.
823 \end_layout
824
825 \begin_layout Itemize
826 The identifier for the (canonical) lyrics text is 
827 \begin_inset Quotes eld
828 \end_inset
829
830 FMPS_Lyrics
831 \begin_inset Quotes erd
832 \end_inset
833
834 .
835  The value is a string.
836  Spaces, tabs, and newlines should be preserved when saving the string and
837  displayed properly to the user.
838 \end_layout
839
840 \begin_layout Itemize
841 Lyrics may also be stored in FMPS_Lyrics_Sources as a list (as defined in
842  Section 2.1) in the form of Source::Data.
843 \end_layout
844
845 \begin_layout Subsection
846 Compilation Identifier
847 \end_layout
848
849 \begin_layout Standard
850 Compilations can be difficult for music players to discover.
851  Sometimes the user places all files from a compilation in one directory
852  and expects that the music player will understand this; sometimes the user
853  has them in different directories but with the same album name and expects
854  that the music player will understand this; and so on.
855 \end_layout
856
857 \begin_layout Standard
858 Although there are existing solutions to identify albums and songs that
859  belong to the same album (such as MusicBrainz identifiers) many users have
860  not or do not want to tag their songs with MusicBrainz information.
861  This tag therefore provides a simple way for an application to assign a
862  compilation identifier to a track, indicating to what compilation a track
863  belongs.
864 \end_layout
865
866 \begin_layout Standard
867 This enables such use-cases as allowing a user to mark multiple tracks that
868  are part of a single compilation, and then have those tracks show up as
869  being together in a compilation the next time the user adds the tracks
870  to the music player.
871 \end_layout
872
873 \begin_layout Standard
874 This section purposefully does not define information about the compilation;
875  it is expected that the user must supply that information in appropriate
876  existing tags, e.g.
877  ALBUMARTIST for VorbisComments.
878 \end_layout
879
880 \begin_layout Itemize
881 The identifier for the compilation tag is FMPS_Compilations.
882 \end_layout
883
884 \begin_layout Itemize
885 Values are a list (as defined in Section 2.1) in the form of Application::Identif
886 ier.
887  It is valid for applications to have more than one identifier, if the user
888  wants to mark a track as being present in multiple compilations.
889  However, each list entry must be unique.
890 \end_layout
891
892 \begin_layout Itemize
893 Example: 
894 \begin_inset Quotes eld
895 \end_inset
896
897 Amarok::2982ab29ef;;Banshee::ad8slpbzl229zier;;Amarok::My Compilation
898 \begin_inset Quotes erd
899 \end_inset
900
901
902 \end_layout
903
904 \end_body
905 \end_document