Update to 1.0 RC3.
[xdg-specs:xdg-specs.git] / specifications / FMPSpecs / specification.lyx
1 #LyX 1.6.6.1 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 RC3; September 1, 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 Front Matter
110 \end_layout
111
112 \begin_layout Subsection
113 License
114 \end_layout
115
116 \begin_layout Standard
117 You may use this specification under either of the following licenses, at
118  your discretion.
119  Most will want to use it under Creative Commons; the GPL alternative is
120  in case future versions of the spec contain e.g.
121  code snippets that you would like to use in GPL programs:
122 \end_layout
123
124 \begin_layout Enumerate
125 This specification is licensed under the Creative Commons Attribution-Share
126  Alike 3.0 Unported License.
127  You are free to copy, distribute and transmit this work, provided that
128  the copyright information and full URL to the license information page
129  (
130 \begin_inset Flex URL
131 status collapsed
132
133 \begin_layout Plain Layout
134
135 http://creativecommons.org/licenses/by-nd/3.0/
136 \end_layout
137
138 \end_inset
139
140 ) remain intact.
141  If you alter, transform, or build upon this work, you may distribute the
142  resulting work only under the same or similar license to this one.
143  
144 \end_layout
145
146 \begin_layout Enumerate
147 This program is free software; you can redistribute it and/or modify it
148  under the terms of the GNU General Public License as published by the Free
149  Software Foundation; either version 2 of the License, or (at your option)
150  any later version.
151  This program is distributed in the hope that it will be useful, but WITHOUT
152  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
153  FOR A PARTICULAR PURPOSE.
154  See the GNU General Public License for more details.
155  See 
156 \begin_inset Flex URL
157 status collapsed
158
159 \begin_layout Plain Layout
160
161 http://www.gnu.org/licenses/
162 \end_layout
163
164 \end_inset
165
166 .
167  
168 \end_layout
169
170 \begin_layout Subsection
171 Terminology
172 \end_layout
173
174 \begin_layout Standard
175 Terminology follws that specified in RFC2119, 
176 \begin_inset Quotes eld
177 \end_inset
178
179 Key words for use in RFCs to Indicate Requirement Levels
180 \begin_inset Quotes erd
181 \end_inset
182
183 .
184  See 
185 \begin_inset Flex URL
186 status collapsed
187
188 \begin_layout Plain Layout
189
190 http://www.ietf.org/rfc/rfc2119.txt
191 \end_layout
192
193 \end_inset
194
195  for more information.
196 \end_layout
197
198 \begin_layout Section
199 Audio Metadata Tags
200 \end_layout
201
202 \begin_layout Standard
203 The metadata tag formats evolved from Quod Libet's VorbisComments suggestions
204  at 
205 \begin_inset Flex URL
206 status collapsed
207
208 \begin_layout Plain Layout
209
210 http://code.google.com/p/quodlibet/wiki/Specs_VorbisComments
211 \end_layout
212
213 \end_inset
214
215 , however this attempts to not only address ambiguities and incompatibilities
216  with the specification at that URL, but also to define how this functionality
217  should be applied across formats.
218  It is intended that as usable ways of inserting the metadata described
219  become available for formats not currently specified, that this document
220  will be updated to meet those needs.
221 \end_layout
222
223 \begin_layout Standard
224 All newly-specified tags carry an identifier 
225 \begin_inset Quotes eld
226 \end_inset
227
228 FMPS_
229 \begin_inset Quotes erd
230 \end_inset
231
232  to tie the tags to this specification.
233  The reason is simple: since the official metadata specifications either
234  fail to define or define unusable tags, these values are only official
235  to the extent that this specification is adopted.
236  Without an identifier to give context to the meanings and limitations of
237  the values, there is a real possibility that a noncompliant media player
238  will use the same tag names in an incompatible fashion, whether intentionally
239  or not, and there is no way to determine whether a seemingly compatible
240  use of the tags by a noncompliant player actually results in user-intended
241  behavior.
242  The 
243 \begin_inset Quotes eld
244 \end_inset
245
246 FMPS_
247 \begin_inset Quotes erd
248 \end_inset
249
250  identifier and this specification document is therefore used in a similar
251  fashion to XML schema declarations.
252 \end_layout
253
254 \begin_layout Standard
255 As these identifiers are read and modified only by players and advanced
256  users, it is not expected to be a hindrance to adoption or to cause undue
257  burden on either.
258 \end_layout
259
260 \begin_layout Subsection
261 Common Data and Tag Information
262 \end_layout
263
264 \begin_layout Standard
265 This section provides 
266 \begin_inset Quotes eld
267 \end_inset
268
269 up-front
270 \begin_inset Quotes erd
271 \end_inset
272
273  information that is pertinent to all tags described below, such as what
274  encoding to use and which tags to use in various formats.
275 \end_layout
276
277 \begin_layout Standard
278 For all tag formats, the following is defined:
279 \end_layout
280
281 \begin_layout Itemize
282 All identifiers are ASCII strings, and defined in the sections below.
283 \end_layout
284
285 \begin_layout Itemize
286 All values (including numeric values) are stored as strings, which MUST
287  adhere to the allowed encoding and length limits in the relevant tag format
288  specifications, but SHOULD use Unicode whenever possible.
289 \end_layout
290
291 \begin_deeper
292 \begin_layout Itemize
293 To keep the specification simple, no ranges of control characters are defined
294  which should never be included in a string.
295  It is assumed that the used string-handling library will properly handle
296  any such characters encountered.
297  It is highly recommended, however, that no such control characters are
298  used, except when specified below.
299 \end_layout
300
301 \end_deeper
302 \begin_layout Itemize
303 Although identifier case is specified for the different types of tags, compariso
304 ns against identifier strings MUST be case-insensitive.
305 \end_layout
306
307 \begin_layout Itemize
308 A period/full stop is used to separate the digits in a float value from
309  the fractional part of the float.
310  All float values MUST include a period/full stop (1 is not acceptable;
311  1.0 is correct).
312 \end_layout
313
314 \begin_layout Itemize
315 Float values SHOULD be limited to six decimal places.
316 \end_layout
317
318 \begin_layout Itemize
319 All lists are value strings.
320  For any lists, entries MUST be separated with a double semicolon ';;' and
321  fields within an entry MUST be separated with a double colon '::' (examples
322  in following sections).
323  This allows for easy splitting of list entries and entry fields with most
324  string libraries.
325  If any value needs to represent a double semicolon or double colon, it
326  MUST escape each of them with a backslash ('
327 \backslash
328 ;
329 \backslash
330 ;' or '
331 \backslash
332 :
333 \backslash
334 :').
335  It is not expected that there will be a need to escape these escape sequences
336  and thus further escaping is not currently defined.
337 \end_layout
338
339 \begin_layout Standard
340 The following sections describe where the information should be stored in
341  specific tag formats.
342 \end_layout
343
344 \begin_layout Subsubsection
345 MP3
346 \end_layout
347
348 \begin_layout Standard
349 MP3 values MUST be stored in a TXXX frame with the Description set to the
350  specified identifier and the Text set to the string representation of the
351  value.
352  The Description SHOULD be in CamelCase as specified in the following sections,
353  e.g.
354  FMPS_Rating.
355 \end_layout
356
357 \begin_layout Subsubsection
358 VorbisComments
359 \end_layout
360
361 \begin_layout Standard
362 Any file supporting VorbisComments (Vorbis, FLAC, Theora, Speex) MUST use
363  a comment with the Key set to the specified identifier and the Value set
364  to the string representation of the value.
365  The Key SHOULD be in all upper-case, e.g.
366  FMPS_RATING.
367 \end_layout
368
369 \begin_layout Subsubsection
370 APEv2
371 \end_layout
372
373 \begin_layout Standard
374 Any file supporting APEv2 MUST add a comment with the Key set to the specified
375  identifier and the Value set to the string representation of the value.
376  The Key SHOULD be in all upper-case, e.g.
377  FMPS_RATING.
378 \end_layout
379
380 \begin_layout Subsubsection
381 MP4
382 \end_layout
383
384 \begin_layout Standard
385 MP4 values MUST be stored at ----:com.apple.iTunes:Identifier with the value
386  a string representation of the tag's value.
387  The Identifier SHOULD be in CamelCase as specified in the following sections,
388  e.g.
389  FMPS_Rating.
390 \end_layout
391
392 \begin_layout Subsubsection
393 Windows Media
394 \end_layout
395
396 \begin_layout Standard
397 Windows Media values MUST be stored in the FMPS/Identifier namespace with
398  the value a string representation of the tag's value.
399  The Identifier SHOULD be in CamelCase as specified in the following sections,
400  e.g.
401  FMPS_Rating.
402 \end_layout
403
404 \begin_layout Subsection
405 Rating Tags
406 \end_layout
407
408 \begin_layout Standard
409 Most media players support the notion of rating content, however standards
410  for storing ratings in files do not exist.
411  Some file metadata formats completely lack rating fields; others require
412  personally identifiable information to be used as an identifier (such as
413  a user's email address) or an organizational identifier (which reduces
414  cross-player compatibility).
415  The goal therefore is simple: to avoid any personally identifying information
416  but to avoid tying the rating to a specific player.
417 \end_layout
418
419 \begin_layout Standard
420 Three types of ratings are currently defined: user ratings, critic ratings,
421  and automatic (or algorithmic) ratings.
422 \end_layout
423
424 \begin_layout Standard
425 Although users are more naturally able to understand integer ratings, only
426  advanced users will interact with these tags directly; otherwise they will
427  be presented to the user via a conforming application.
428  Meanwhile, there are tangible benefits to storing ratings as floating-point
429  numbers, mainly due to the fact that the increased precision allows for
430  a number of interesting and useful algorithmic rating schemes to be used.
431  However, using both integer and floating-point values unnecessarily increases
432  complexity of both this spec and application code.
433  Therefore, both values are stored as floating-point numbers.
434  Conversion to and from these and an integer scale presented to the user
435  in an application is easily accomplished in the application's code if it
436  is so desired.
437 \end_layout
438
439 \begin_layout Standard
440 Four tags are defined, corresponding to the three types of defined ratings,
441  plus a canonical value: FMPS_Rating_User; FMPS_Rating_Critic; FMPS_Rating_Algor
442 ithm; and FMPS_Rating (the canonical value).
443  A file that has no rating tag for a specific purpose is to be considered
444  unrated for that purpose (user, critic or algorithm).
445 \end_layout
446
447 \begin_layout Subsubsection
448 All Rating Tags
449 \end_layout
450
451 \begin_layout Itemize
452 Ratings SHALL be a float value between 0.0 and 1.0, inclusive.
453  0.0 SHALL be the lowest possible rating; 1.0 is the highest possible rating.
454 \end_layout
455
456 \begin_layout Itemize
457 Ratings SHOULD only be rounded when necessary, in order to increase cross-player
458  compatibility.
459 \end_layout
460
461 \begin_layout Subsubsection
462 FMPS_Rating
463 \end_layout
464
465 \begin_layout Itemize
466 The canonical rating value in FMPS_Rating SHOULD be set whenever a user
467  rates the track.
468  This is in addition to any value stored for that particular user in FMPS_Rating
469 _User.
470  This value is canonical because if a player does not support multiple users
471  (or if no user identifier is set), this is the value that MUST be returned.
472 \end_layout
473
474 \begin_layout Itemize
475 If a user removes ratings from a track in the media player's database, the
476  value of the FMPS_Rating tag SHOULD be cleared as well.
477 \end_layout
478
479 \begin_layout Subsubsection
480 FMPS_Rating_User
481 \end_layout
482
483 \begin_layout Itemize
484 If a player supports the notion of multiple users (perhaps from discovery
485  of the current user from the operating system) and wishes to allow the
486  users to keep separate ratings, it MUST store these values in the FMPS_Rating_U
487 ser tag.
488 \end_layout
489
490 \begin_layout Itemize
491 Applications supporting multiple user ratings SHOULD have a way for users
492  to define their preferred identifier.
493  
494 \end_layout
495
496 \begin_layout Itemize
497 The values are in the form of a list as defined in Section 2.1, with list
498  entries in the format of UserIdentifier::Value.
499  There MUST NOT be empty value strings.
500 \end_layout
501
502 \begin_layout Standard
503 Example: 
504 \begin_inset Quotes eld
505 \end_inset
506
507 Alice Abba::0.6;;Bob Beatles::0.8
508 \begin_inset Quotes erd
509 \end_inset
510
511 .
512 \end_layout
513
514 \begin_layout Subsection
515 FMPS_Rating_Critic
516 \end_layout
517
518 \begin_layout Itemize
519 The values MUST be in the form of a list as defined in Section 2.1, with
520  list entries in the format of Publication::Critic::Rating.
521  If the critic is unaffiliated, or if the rating is by a publication with
522  no byline, the special value 
523 \begin_inset Quotes eld
524 \end_inset
525
526 FMPS_Nothing
527 \begin_inset Quotes erd
528 \end_inset
529
530  MUST be used to denote this; there MUST NOT be empty strings.
531 \end_layout
532
533 \begin_layout Standard
534 Example: 
535 \begin_inset Quotes eld
536 \end_inset
537
538 Rolling Stone::Ralph Gleason::0.83;;musicOMH.com::FMPS_Nothing::0.76;;Metacritic::F
539 MPS_Nothing::0.8;;FMPS_Nothing::Some Dude::0.9
540 \begin_inset Quotes erd
541 \end_inset
542
543
544 \end_layout
545
546 \begin_layout Subsubsection
547 FMPS_Rating_Algorithm
548 \end_layout
549
550 \begin_layout Itemize
551 The values MUST be in the form of a list as defined in Section 2.1, with
552  list entries in the format of Application::Algorithm::Rating.
553  All fields MUST be defined; fields MUST NOT be left empty.
554 \end_layout
555
556 \begin_layout Itemize
557 In cases where the algorithm is intended to be global/collaborative/cross-applic
558 ation, the Application value SHOULD be set to some agreed-upon value.
559  In other words, it is RECOMMENDED to use the application name for the Applicati
560 on part of the identifier, but it MAY also be used to identify a 
561 \begin_inset Quotes eld
562 \end_inset
563
564 group
565 \begin_inset Quotes erd
566 \end_inset
567
568  of algorithms, or some arbitrary other value that can be used for identificatio
569 n.
570 \end_layout
571
572 \begin_layout Standard
573 Example: 
574 \begin_inset Quotes eld
575 \end_inset
576
577 Amarok::AutoRate::0.52;;VLC::Standard::0.6;;QuodLibet::RatingPluginX::0.35;;The
578  Free Music Player Alliance::Rating Algorithm 1::0.5
579 \begin_inset Quotes erd
580 \end_inset
581
582
583 \end_layout
584
585 \begin_layout Standard
586 A note on the floating point values: some players may only allow users to
587  rate in increments of whole numbers between 1 and 5; others 0 and 10; and
588  so on.
589  However, players SHOULD ensure that the rating they display and use for
590  any purpose adheres to that saved in the tag whenever possible, only rounding
591  this number when absolutely necessary.
592 \end_layout
593
594 \begin_layout Standard
595 For instance, if a track has a rating of 0.9 and an application only shows
596  ratings using five star icons in full-star increments, this would be rounded
597  within the application to five stars.
598  Howeer, if the player also shows the rating numerically, the application
599  would display 4.5 in the numeric field instead of the same 5 shown in the
600  star icons, thus more accurately reflecting the user's set rating.
601 \end_layout
602
603 \begin_layout Subsection
604 Playcount Tags
605 \end_layout
606
607 \begin_layout Standard
608 As with ratings, there are multiple kinds of playcount tags (user and algorithmi
609 c) in addition to a canonical value.
610  The user tag tracks how many times a song has been played for a user.
611  The auto/algorithmic value can be used in an application-specific way to
612  do interesting things; for instance, to cumulatively track exact percentages
613  of tracks played, in order to display to the user the number of days/hous/minut
614 es/seconds they have spent listening to a particular song.
615  
616 \end_layout
617
618 \begin_layout Standard
619 Three tags are defined, corresponding to the two types of defined playcounts,
620  plus a canonical value: FMPS_Playcount_User; FMPS_Playcount_Algorithm;
621  and FMPS_Playcount (the canonical value).
622  A file that has no playcount tag for a specific purpose is to be considered
623  unplayed for that purpose (user or algorithm).
624 \end_layout
625
626 \begin_layout Subsubsection
627 All Playcount Tags
628 \end_layout
629
630 \begin_layout Itemize
631 Playcounts MUST be a float value not less than 0.0.
632  0.0 is valid and means unplayed.
633 \end_layout
634
635 \begin_layout Itemize
636 The maximum value SHALL be 0.000001 less than the largest value able to be
637  stored in a 32-bit unsigned integer: 4,294,967,294.999999.
638  This is so that playcount values can be rounded to an integer equivalent,
639  if necessary (e.g.
640  for display to the user).
641 \end_layout
642
643 \begin_layout Subsubsection
644 User Playcount Criteria
645 \end_layout
646
647 \begin_layout Standard
648 The user playcount isn't meant to be set by the user, but rather to follow
649  these rules that define user behavior.
650  A file is to be considered 
651 \begin_inset Quotes eld
652 \end_inset
653
654 played
655 \begin_inset Quotes erd
656 \end_inset
657
658  if it meets the following criteria, inspired by Last.fm's scrobbling rules:
659 \end_layout
660
661 \begin_layout Itemize
662 If the track is less than thirty seconds long, the entire song MUST be played.
663 \end_layout
664
665 \begin_layout Itemize
666 If the track is more than thirty seconds long but less than eight minutes
667  long, at least fifty percent of the file MUST be played, calculated via
668  length of track.
669  For instance, if a track is one minute long, at least thirty seconds of
670  the track must have been played, although if the user skips backwards multiple
671  times and listens to the same ten seconds of the track three times in a
672  row, this may be considered a valid playcount.
673 \end_layout
674
675 \begin_layout Itemize
676 If the track is longer than eight minutes, at least four minutes of the
677  track MUST be played.
678 \end_layout
679
680 \begin_layout Standard
681 User playcounts have an additional restriction in that they MUST be float
682  values representing integers (1.0, 141.0, etc.).
683  They are never fractional values; a song was either played, or it wasn't.
684 \end_layout
685
686 \begin_layout Subsubsection
687 FMPS_Playcount
688 \end_layout
689
690 \begin_layout Itemize
691 The canonical playcount value in FMPS_Playcount SHOULD be set whenever a
692  user plays a track.
693  This is in addition to any value stored for that user in FMPS_Playcount_User.
694  This value is canonical because if a player does not support multiple users
695  (or if no user identifier is set) this is the value that MUST be returned.
696 \end_layout
697
698 \begin_layout Itemize
699 If a user has an identifier set to store per-user playcounts, when this
700  value is set it MUST be set to the value of that user's playcount.
701  In other words, the last value held in FMPS_Playcount will be equivalent
702  to the latest user's personal playcount, if any.
703 \end_layout
704
705 \begin_layout Itemize
706 If a user resets the playcount for a track in the media player's database,
707  the value of the FMPS_Playcount tag SHOULD be cleared as well.
708 \end_layout
709
710 \begin_layout Itemize
711 FMPS_Playcount MUST store 
712 \begin_inset Quotes eld
713 \end_inset
714
715 full plays
716 \begin_inset Quotes erd
717 \end_inset
718
719  of a track according to the rules in Section 2.4.2.
720 \end_layout
721
722 \begin_layout Subsubsection
723 FMPS_Playcount_User
724 \end_layout
725
726 \begin_layout Itemize
727 If a player supports the notion of multiple users (perhaps from discovery
728  of the current user from the operating system) and wishes to allow the
729  users to keep separate playcounts, it MUST store these values in the FMPS_Playc
730 ount_User tag.
731 \end_layout
732
733 \begin_layout Itemize
734 Applications supporting multiple user playcounts SHOULD have a way for users
735  to define their preferred identifier.
736  
737 \end_layout
738
739 \begin_layout Itemize
740 The values MUST be in the form of a list as defined in Section 2.1, with
741  list entries in the format of UserIdentifier::Value.
742  There MUST NOT be empty strings.
743 \end_layout
744
745 \begin_layout Itemize
746 FMPS_Playcount_User MUST store 
747 \begin_inset Quotes eld
748 \end_inset
749
750 full plays
751 \begin_inset Quotes erd
752 \end_inset
753
754  of a track according to the rules in Section 2.4.2.
755 \end_layout
756
757 \begin_layout Standard
758 Example: 
759 \begin_inset Quotes eld
760 \end_inset
761
762 Alice Abba::1.0;;Bob Beatles::133.0
763 \begin_inset Quotes erd
764 \end_inset
765
766 .
767 \end_layout
768
769 \begin_layout Subsubsection
770 FMPS_Playcount_Algorithm
771 \end_layout
772
773 \begin_layout Itemize
774 The values MUST be in the form of a list as defined in Section 2.3.1, with
775  list entries in the format of Application::Algorithm::Playcount.
776  All fields MUST be defined; fields MUST NOT be left empty.
777 \end_layout
778
779 \begin_layout Itemize
780 In cases where the algorithm is intended to be global/collaborative/cross-applic
781 ation, the Application value SHOULD be set to some agreed-upon value.
782  In other words, it is RECOMMENDED to use the application name for the Applicati
783 on part of the identifier, but it MAY also be used to identify a 
784 \begin_inset Quotes eld
785 \end_inset
786
787 group
788 \begin_inset Quotes erd
789 \end_inset
790
791  of algorithms, or some arbitrary other value that can be used for identificatio
792 n.
793 \end_layout
794
795 \begin_layout Itemize
796 For algorithms, a track's length MUST be considered to be worth 1.0 playcounts;
797  the user skipping parts of the track MAY decrease the value below 1.0, and
798  the user repeating parts of the track MAY increase this value past 1.0.
799 \end_layout
800
801 \begin_layout Standard
802 Example: 
803 \begin_inset Quotes eld
804 \end_inset
805
806 Amarok::AutoPlaycount::152.69;;VLC::Standard::198.0;;QuodLibet::RatingPluginX::165
807 2.19;;The Music Player Alliance::Rating Algorithm 1::0.5
808 \begin_inset Quotes erd
809 \end_inset
810
811
812 \end_layout
813
814 \begin_layout Subsection
815 Performer Roles
816 \end_layout
817
818 \begin_layout Standard
819 Performer roles allow you to describe the performers in a track.
820  Current support for these roles in tag formats is often sporadic or difficult
821  to parse.
822  As many of these tags as desired can be specified, to include all relevant
823  performer information.
824 \end_layout
825
826 \begin_layout Itemize
827 Performer roles use the identifier 
828 \begin_inset Quotes eld
829 \end_inset
830
831 FMPS_Performers
832 \begin_inset Quotes erd
833 \end_inset
834
835 .
836  The value MUST be a list in the form of Performer::Role, where Role is
837  the user-defined role (
838 \begin_inset Quotes eld
839 \end_inset
840
841 Guitar
842 \begin_inset Quotes erd
843 \end_inset
844
845
846 \begin_inset Quotes eld
847 \end_inset
848
849 Guitar (Backup)
850 \begin_inset Quotes erd
851 \end_inset
852
853
854 \begin_inset Quotes eld
855 \end_inset
856
857 Vocals
858 \begin_inset Quotes erd
859 \end_inset
860
861 ).
862 \end_layout
863
864 \begin_layout Standard
865 Example: 
866 \begin_inset Quotes eld
867 \end_inset
868
869 Willy Nelson::Guitar;;Eric Clapton::Guitar (Backup);;B.B.
870  King::Vocals
871 \begin_inset Quotes erd
872 \end_inset
873
874
875 \end_layout
876
877 \begin_layout Subsection
878 Lyrics
879 \end_layout
880
881 \begin_layout Standard
882 Embedding lyrics into a file allows users to save custom lyrics and to still
883  see the lyrics when not connected to the Internet.
884  Since different users may wish to have different sets of lyrics (for example,
885  if customizing lyrics against a music-only track) and different Internet
886  sources may have different lyrics, it is possible to store multiple lyrics
887  values by specifying a source.
888 \end_layout
889
890 \begin_layout Itemize
891 The identifier for the (canonical) lyrics text is 
892 \begin_inset Quotes eld
893 \end_inset
894
895 FMPS_Lyrics
896 \begin_inset Quotes erd
897 \end_inset
898
899 .
900  The value MUST be a string.
901  Spaces, tabs, and newlines SHOULD be preserved when saving the string,
902  and SHOULD be displayed properly to the user.
903 \end_layout
904
905 \begin_layout Itemize
906 Lyrics MAY also be stored in FMPS_Lyrics_Sources as a list (as defined in
907  Section 2.1), in which case the form MUST be Source::Data.
908 \end_layout
909
910 \begin_layout Standard
911 Example: 
912 \begin_inset Quotes eld
913 \end_inset
914
915 Alice Aardvark::[lyrics];;Bob Baboon::[lyrics];;lyricssite.net::[lyrics]
916 \begin_inset Quotes erd
917 \end_inset
918
919
920 \end_layout
921
922 \begin_layout Subsection
923 Album/Compilation (
924 \begin_inset Quotes eld
925 \end_inset
926
927 Various Artists
928 \begin_inset Quotes erd
929 \end_inset
930
931 ) Identifier
932 \end_layout
933
934 \begin_layout Standard
935 Compilations (or 
936 \begin_inset Quotes eld
937 \end_inset
938
939 Various Artists
940 \begin_inset Quotes erd
941 \end_inset
942
943  albums) can be difficult for music players to discover.
944  Sometimes the user places all files from a compilation in one directory
945  and expects that the music player will understand this; sometimes the user
946  has them in different directories but with the same album name and expects
947  that the music player will understand this; and so on.
948 \end_layout
949
950 \begin_layout Standard
951 Although there are existing solutions to identify albums and songs that
952  belong to the same album (such as MusicBrainz identifiers) many users have
953  not or do not want to tag their songs with MusicBrainz information.
954  This tag therefore provides a simple way for an application to assign a
955  album identifier to a track, indicating to what album a track belongs.
956  It also provides a simple way of marking the album as a compilation or
957  not.
958 \end_layout
959
960 \begin_layout Standard
961 This enables such use-cases as allowing a user to mark multiple tracks that
962  are part of a single compilation, and then have those tracks show up as
963  being together in a compilation the next time the user adds the tracks
964  to the music player.
965 \end_layout
966
967 \begin_layout Standard
968 This section purposefully does not define information about the album/compilatio
969 n; it is expected that the user must supply that information in appropriate
970  existing tags, e.g.
971  ALBUM and ALBUMARTIST for VorbisComments.
972 \end_layout
973
974 \begin_layout Itemize
975 The identifier for the album/compilation tag is FMPS_Albums_Compilations.
976  Although this tag will be most useful for compilation/Various Artists albums,
977  there may still be significant utility for a player in using this tag to
978  identify single-artist albums.
979  As a result, players MUST NOT make assumptions about whether the presence
980  tag identifies the track as belonging to a compilation/Various Artists
981  album and MUST explicitly derive this information from the tag value.
982 \end_layout
983
984 \begin_layout Itemize
985 Values MUST be a list (as defined in Section 2.1) in the form of Application::Typ
986 e::Identifier.
987  Applications MAY have more than one identifier, if the user wants to mark
988  a track as being present in multiple compilations, or to give user-defined
989  names to a compilation.
990  However, each list entry MUST be unique.
991  Similarly to other tags in this specification, there may be significant
992  utility in interoperating on the application names.
993 \end_layout
994
995 \begin_layout Itemize
996 Type MUST be one of the following values, without quotes: 
997 \begin_inset Quotes eld
998 \end_inset
999
1000 Album
1001 \begin_inset Quotes erd
1002 \end_inset
1003
1004  (indicating a general-purpose album, usually by a single artist) or 
1005 \begin_inset Quotes eld
1006 \end_inset
1007
1008 Compilation
1009 \begin_inset Quotes erd
1010 \end_inset
1011
1012  (indicating a compilation album, usually by multiple/various artists).
1013  Checks against this value MUST be case-insensitive.
1014  More values may be added in the future; if a player encounters an unknown
1015  value it SHOULD default to type 
1016 \begin_inset Quotes eld
1017 \end_inset
1018
1019 Album
1020 \begin_inset Quotes erd
1021 \end_inset
1022
1023 .
1024  
1025 \end_layout
1026
1027 \begin_layout Standard
1028 Example: 
1029 \begin_inset Quotes eld
1030 \end_inset
1031
1032 Amarok::Album::2982ab29ef;;AmarokUser::Compilation::My Compilation;;Banshee::Com
1033 pilation::ad8slpbzl229zier;;FMPSAlliance::Album::de9f2c7fd25e1b3afad3e85a0bd17d9
1034 b100db4b3
1035 \begin_inset Quotes erd
1036 \end_inset
1037
1038
1039 \end_layout
1040
1041 \end_body
1042 \end_document