1 #LyX 1.6.7 created this file. For more info see http://www.lyx.org/
6 \use_default_options false
11 \font_typewriter default
12 \font_default_family default
19 \paperfontsize default
27 \paperorientation portrait
30 \paragraph_separation indent
32 \quotes_language english
35 \paperpagestyle default
36 \tracking_changes false
45 Free Media Player Specifications
53 version 1.0; September 9, 2010
57 Copyright 2009-2010 by
58 \begin_inset Flex Element:Firstname
61 \begin_layout Plain Layout
68 \begin_inset Flex Element:Surname
71 \begin_layout Plain Layout
78 \begin_inset CommandInset href
80 target "mitchell@kde.org"
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
95 It is designed to be robust against future needs and to prevent possible
96 conflicts with other tag identifiers and values.
99 \begin_layout Standard
100 \begin_inset CommandInset toc
101 LatexCommand tableofcontents
108 \begin_layout Section
112 \begin_layout Subsection
116 \begin_layout Standard
117 You may use this specification under either of the following licenses, at
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:
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
130 \begin_inset Flex URL
133 \begin_layout Plain Layout
135 http://creativecommons.org/licenses/by-nd/3.0/
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.
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)
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.
156 \begin_inset Flex URL
159 \begin_layout Plain Layout
161 http://www.gnu.org/licenses/
170 \begin_layout Subsection
174 \begin_layout Standard
175 Terminology follws that specified in RFC2119,
176 \begin_inset Quotes eld
179 Key words for use in RFCs to Indicate Requirement Levels
180 \begin_inset Quotes erd
185 \begin_inset Flex URL
188 \begin_layout Plain Layout
190 http://www.ietf.org/rfc/rfc2119.txt
195 for more information.
198 \begin_layout Section
202 \begin_layout Standard
203 The metadata tag formats evolved from Quod Libet's VorbisComments suggestions
205 \begin_inset Flex URL
208 \begin_layout Plain Layout
210 http://code.google.com/p/quodlibet/wiki/Specs_VorbisComments
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.
223 \begin_layout Standard
224 All newly-specified tags carry an identifier
225 \begin_inset Quotes eld
229 \begin_inset Quotes erd
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
243 \begin_inset Quotes eld
247 \begin_inset Quotes erd
250 identifier and this specification document is therefore used in a similar
251 fashion to XML schema declarations.
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
260 \begin_layout Subsection
261 Common Data and Tag Information
264 \begin_layout Standard
265 This section provides
266 \begin_inset Quotes eld
270 \begin_inset Quotes erd
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.
277 \begin_layout Standard
278 For all tag formats, the following is defined:
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
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.
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.
305 \begin_layout Itemize
306 All value strings must escape each colon (':'), semicolon (';') and backslash
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.
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;
326 \begin_layout Itemize
327 Float values SHOULD be limited to six decimal places.
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.
341 \begin_layout Standard
342 The following sections describe where the information should be stored in
343 specific tag formats.
346 \begin_layout Subsubsection
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
354 The Description SHOULD be in CamelCase as specified in the following sections,
359 \begin_layout Subsubsection
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.
371 \begin_layout Subsubsection
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.
382 \begin_layout Subsubsection
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,
394 \begin_layout Subsubsection
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,
406 \begin_layout Subsection
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.
421 \begin_layout Standard
422 Three types of ratings are currently defined: user ratings, critic ratings,
423 and automatic (or algorithmic) ratings.
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
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).
449 \begin_layout Subsubsection
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.
458 \begin_layout Itemize
459 Ratings SHOULD only be rounded when necessary, in order to increase cross-player
463 \begin_layout Subsubsection
467 \begin_layout Itemize
468 The canonical rating value in FMPS_Rating SHOULD be set whenever a user
470 This is in addition to any value stored for that particular user in FMPS_Rating
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.
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.
481 \begin_layout Subsubsection
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
492 \begin_layout Itemize
493 Applications supporting multiple user ratings SHOULD have a way for users
494 to define their preferred identifier.
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.
504 \begin_layout Standard
506 \begin_inset Quotes eld
509 Alice Abba::0.6;;Bob Beatles::0.8
510 \begin_inset Quotes erd
516 \begin_layout Subsection
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
529 \begin_inset Quotes erd
532 MUST be used to denote this; there MUST NOT be empty strings.
535 \begin_layout Standard
537 \begin_inset Quotes eld
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
548 \begin_layout Subsubsection
549 FMPS_Rating_Algorithm
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.
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
567 \begin_inset Quotes erd
570 of algorithms, or some arbitrary other value that can be used for identificatio
574 \begin_layout Standard
576 \begin_inset Quotes eld
579 Amarok::AutoRate::0.52;;VLC::Standard::0.6;;QuodLibet::RatingPlugin
581 :X::0.35;;The Free Music Player Alliance::Rating Algorithm 1::0.5
582 \begin_inset Quotes erd
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
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.
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.
606 \begin_layout Subsection
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.
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).
629 \begin_layout Subsubsection
633 \begin_layout Itemize
634 Playcounts MUST be a float value not less than 0.0.
635 0.0 is valid and means unplayed.
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,
643 for display to the user).
646 \begin_layout Subsubsection
647 User Playcount Criteria
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
658 \begin_inset Quotes erd
661 if it meets the following criteria, inspired by Last.fm's scrobbling rules:
664 \begin_layout Itemize
665 If the track is less than thirty seconds long, the entire song MUST be played.
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
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.
678 \begin_layout Itemize
679 If the track is longer than eight minutes, at least four minutes of the
680 track MUST be played.
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.
689 \begin_layout Subsubsection
693 \begin_layout Itemize
694 The canonical playcount value in FMPS_Playcount SHOULD be set whenever a
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.
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.
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.
713 \begin_layout Itemize
714 FMPS_Playcount MUST store
715 \begin_inset Quotes eld
719 \begin_inset Quotes erd
722 of a track according to the rules in Section 2.4.2.
725 \begin_layout Subsubsection
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
736 \begin_layout Itemize
737 Applications supporting multiple user playcounts SHOULD have a way for users
738 to define their preferred identifier.
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.
748 \begin_layout Itemize
749 FMPS_Playcount_User MUST store
750 \begin_inset Quotes eld
754 \begin_inset Quotes erd
757 of a track according to the rules in Section 2.4.2.
760 \begin_layout Standard
762 \begin_inset Quotes eld
765 Alice Abba::1.0;;Bob Beatles::133.0
766 \begin_inset Quotes erd
772 \begin_layout Subsubsection
773 FMPS_Playcount_Algorithm
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.
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
791 \begin_inset Quotes erd
794 of algorithms, or some arbitrary other value that can be used for identificatio
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.
804 \begin_layout Standard
806 \begin_inset Quotes eld
809 Amarok::AutoPlaycount::152.69;;VLC::Standard::198.0;;QuodLibet::PlaycountPlugin
811 :X::1652.19;;The Music Player Alliance::Playcount Algorithm 1::0.5
812 \begin_inset Quotes erd
818 \begin_layout Subsection
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
826 As many of these tags as desired can be specified, to include all relevant
827 performer information.
830 \begin_layout Itemize
831 Performer roles use the identifier
832 \begin_inset Quotes eld
836 \begin_inset Quotes erd
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
846 \begin_inset Quotes erd
850 \begin_inset Quotes eld
854 \begin_inset Quotes erd
858 \begin_inset Quotes eld
862 \begin_inset Quotes erd
868 \begin_layout Standard
870 \begin_inset Quotes eld
873 Willy Nelson::Guitar;;Eric Clapton::Guitar (Backup);;B.B.
875 \begin_inset Quotes erd
881 \begin_layout Subsection
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.
894 \begin_layout Itemize
895 The identifier for the (canonical) lyrics text is
896 \begin_inset Quotes eld
900 \begin_inset Quotes erd
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.
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.
914 \begin_layout Standard
916 \begin_inset Quotes eld
919 Alice Aardvark::[lyrics];;Bob Baboon::[lyrics];;http
921 ://www.lyricssite.net::[lyrics]
922 \begin_inset Quotes erd
928 \begin_layout Subsection
930 \begin_inset Quotes eld
934 \begin_inset Quotes erd
940 \begin_layout Standard
942 \begin_inset Quotes eld
946 \begin_inset Quotes erd
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.
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
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
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
977 ALBUM and ALBUMARTIST for VorbisComments.
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
991 \begin_layout Itemize
992 Values MUST be a list (as defined in Section 2.1) in the form of Application::Typ
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.
1002 \begin_layout Itemize
1003 Type MUST be one of the following values, without quotes:
1004 \begin_inset Quotes eld
1008 \begin_inset Quotes erd
1011 (indicating a general-purpose album, usually by a single artist) or
1012 \begin_inset Quotes eld
1016 \begin_inset Quotes erd
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
1027 \begin_inset Quotes erd
1034 \begin_layout Standard
1036 \begin_inset Quotes eld
1039 Amarok::Album::2982ab29ef;;AmarokUser::Compilation::My Compilation;;Banshee::Com
1040 pilation::ad8slpbzl229zier;;FMPSAlliance::Album::de9f2c7fd25e1b3afad3e85a0bd17d9
1042 \begin_inset Quotes erd