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