Skip to content

Instantly share code, notes, and snippets.

@Davidblkx
Created August 28, 2016 06:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Davidblkx/9a348fe74bba03ce74a7da81572b2a63 to your computer and use it in GitHub Desktop.
Save Davidblkx/9a348fe74bba03ce74a7da81572b2a63 to your computer and use it in GitHub Desktop.
Struct with all frames presented in ID3v2.4
namespace ID3
{
public struct FramesID3v24
{
/// <summary>
/// This frame's purpose is to be able to identify the audio file in a
/// database, that may provide more information relevant to the content.
/// Since standardization of such a database is beyond this document, all
/// UFID frames begin with an 'owner identifier' field.It is a null-
/// terminated string with a URL [URL] containing an email address, or a
/// link to a location where an email address can be found, that belongs
/// to the organization responsible for this specific database
/// implementation.Questions regarding the database should be sent to
/// the indicated email address. The URL should not be used for the
/// actual database queries. The string
/// "http://www.id3.org/dummy/ufid.html" should be used for tests.The
/// 'Owner identifier' must be non-empty (more than just a termination).
/// The 'Owner identifier' is then followed by the actual identifier,
/// which may be up to 64 bytes. There may be more than one "UFID" frame
/// in a tag, but only one with the same 'Owner identifier'.
/// </summary>
public const string UniqueFileIdentifier = "UFID";
/// <summary>
/// The 'Content group description' frame is used if the sound belongs to
/// a larger category of sounds/music.For example, classical music is
/// often sorted in different musical sections(e.g. "Piano Concerto",
/// "Weather - Hurricane").
/// </summary>
public const string ContentGroupDescription = "TIT1";
/// <summary>
/// The 'Title/Songname/Content description' frame is the actual name of
/// the piece(e.g. "Adagio", "Hurricane Donna").
/// </summary>
public const string Title = "TIT2";
/// <summary>
/// The 'Subtitle/Description refinement' frame is used for information
/// directly related to the contents title(e.g. "Op. 16" or "Performed
/// live at Wembley").
/// </summary>
public const string Subtitle = "TIT3";
/// <summary>
/// The 'Album/Movie/Show title' frame is intended for the title of the
/// recording(or source of sound) from which the audio in the file is
/// taken.
/// </summary>
public const string Album = "TALB";
/// <summary>
/// The 'Original album/movie/show title' frame is intended for the title
/// of the original recording(or source of sound), if for example the
/// music in the file should be a cover of a previously released song.
/// </summary>
public const string OriginalAlbum = "TOAL";
/// <summary>
/// The 'Track number/Position in set' frame is a numeric string
/// containing the order number of the audio-file on its original
/// recording.This MAY be extended with a "/" character and a numeric
/// string containing the total number of tracks/elements on the original
/// recording.E.g. "4/9".
/// </summary>
public const string TrackNumber = "TRCK";
/// <summary>
/// The 'Part of a set' frame is a numeric string that describes which
/// part of a set the audio came from.This frame is used if the source
/// described in the "TALB" frame is divided into several mediums, e.g.a
/// double CD. The value MAY be extended with a "/" character and a
/// numeric string containing the total number of parts in the set. E.g.
/// "1/2".
/// </summary>
public const string PartOfSetNumber = "TPOS";
/// <summary>
/// The 'Set subtitle' frame is intended for the subtitle of the part of
/// a set this track belongs to.
/// </summary>
public const string SetSubtitle = "TSST";
/// <summary>
/// The 'ISRC' frame should contain the International Standard Recording
/// Code[ISRC] (12 characters).
/// </summary>
public const string ISRC = "TSRC";
/// <summary>
/// The 'Lead artist/Lead performer/Soloist/Performing group' is
/// used for the main artist.
/// </summary>
public const string Artist = "TPE1";
/// <summary>
/// The 'Band/Orchestra/Accompaniment' frame is used for additional
/// information about the performers in the recording.
/// </summary>
public const string Band = "TPE2";
/// <summary>
/// The 'Conductor' frame is used for the name of the conductor.
/// </summary>
public const string Conductor = "TPE3";
/// <summary>
/// The 'Interpreted, remixed, or otherwise modified by' frame contains
/// more information about the people behind a remix and similar
/// interpretations of another existing piece.
/// </summary>
public const string Interpreted = "TPE4";
/// <summary>
/// The 'Original artist/performer' frame is intended for the performer
/// of the original recording, if for example the music in the file
/// should be a cover of a previously released song.
/// </summary>
public const string OriginalArtist = "TOPE";
/// <summary>
/// The 'Lyricist/Text writer' frame is intended for the writer of the
/// text or lyrics in the recording.
/// </summary>
public const string Lyricist = "TEXT";
/// <summary>
/// The 'Original lyricist/text writer' frame is intended for the
/// text writer of the original recording, if for example the music in
/// the file should be a cover of a previously released song.
/// </summary>
public const string OriginalLyricist = "TOLY";
/// <summary>
/// The 'Composer' frame is intended for the name of the composer.
/// </summary>
public const string Composer = "TCOM";
/// <summary>
/// The 'Musician credits list' is intended as a mapping between
/// instruments and the musician that played it.Every odd field is an
/// instrument and every even is an artist or a comma delimited list of
/// artists.
/// </summary>
public const string MusicianCreditList = "TMCL";
/// <summary>
/// The 'Involved people list' is very similar to the musician credits
/// list, but maps between functions, like producer, and names.
/// </summary>
public const string InvolvedPeopleList = "TIPL";
/// <summary>
/// The 'Encoded by' frame contains the name of the person or
/// organization that encoded the audio file.This field may contain a
/// copyright message, if the audio file also is copyrighted by the
/// encoder.
/// </summary>
public const string EncodedBy = "TENC";
/// <summary>
/// The 'BPM' frame contains the number of beats per minute in the
/// main part of the audio.The BPM is an integer and represented as a
/// numerical string.
/// </summary>
public const string BeatsPerMinute = "TBPM";
/// <summary>
/// The 'Length' frame contains the length of the audio file in
/// milliseconds, represented as a numeric string.
/// </summary>
public const string Length = "TLEN";
/// <summary>
/// The 'Initial key' frame contains the musical key in which the sound
/// starts.It is represented as a string with a maximum length of three
/// characters.The ground keys are represented with "A","B","C","D","E",
/// "F" and "G" and half-keys represented with "b" and "#". Minor is
/// represented as "m", e.g. "Dbm" $00. Off key is represented with an
/// "o" only.
/// </summary>
public const string InitialKey = "TKEY";
/// <summary>
/// The 'Language' frame should contain the languages of the text or
/// lyrics spoken or sung in the audio.The language is represented with
/// three characters according to ISO-639-2 [ISO-639-2]. If more than one
/// language is used in the text their language codes should follow
/// according to the amount of their usage, e.g. "eng" $00 "sve" $00.
/// </summary>
public const string Language = "TLAN";
/// <summary>
/// The 'Content type', which ID3v1 was stored as a one byte numeric
/// value only, is now a string. You may use one or several of the ID3v1
/// types as numerical strings, or, since the category list would be
/// impossible to maintain with accurate and up to date categories,
/// define your own.Example: "21" $00 "Eurodisco" $00
/// </summary>
public const string ContentType = "TCON";
/// <summary>
/// The 'File type' frame indicates which type of audio this tag defines.
/// The following types and refinements are defined:
///
/// MIME MIME type follows
/// MPG MPEG Audio
/// /1 MPEG 1/2 layer I
/// /2 MPEG 1/2 layer II
/// /3 MPEG 1/2 layer III
/// /2.5 MPEG 2.5
/// /AAC Advanced audio compression
/// VQF Transform-domain Weighted Interleave Vector Quantization
/// PCM Pulse Code Modulated audio
///
/// but other types may be used, but not for these types though.This is
/// used in a similar way to the predefined types in the "TMED" frame,
/// but without parentheses.If this frame is not present audio type is
/// assumed to be "MPG".
/// </summary>
public const string FileType = "TFLT";
/// <summary>
/// The 'Media type' frame describes from which media the sound
/// originated.This may be a text string or a reference to the
/// predefined media types
/// </summary>
public const string MediaType = "TMED";
/// <summary>
/// The 'Mood' frame is intended to reflect the mood of the audio with a
/// few keywords, e.g. "Romantic" or "Sad".
/// </summary>
public const string Mood = "TMOO";
/// <summary>
/// The 'Copyright message' frame, in which the string must begin with a
/// year and a space character(making five characters), is intended for
/// the copyright holder of the original sound, not the audio file
/// itself.The absence of this frame means only that the copyright
/// information is unavailable or has been removed, and must not be
/// interpreted to mean that the audio is public domain.Every time this
/// field is displayed the field must be preceded with "Copyright " (C) "
/// ", where (C) is one character showing a C in a circle.
/// </summary>
public const string CopyrightMessage = "TCOP";
/// <summary>
/// The 'Produced notice' frame, in which the string must begin with a
/// year and a space character(making five characters), is intended for
/// the production copyright holder of the original sound, not the audio
/// file itself.The absence of this frame means only that the production
/// copyright information is unavailable or has been removed, and must
/// not be interpreted to mean that the audio is public domain.Every
/// time this field is displayed the field must be preceded with
/// "Produced " (P) " ", where(P) is one character showing a P in a
/// circle.
/// </summary>
public const string ProducedNotice = "TPRO";
/// <summary>
/// The publisherThe 'Publisher' frame simply contains the name of the label or publisher.
/// </summary>
public const string Publisher = "TPUB";
/// <summary>
/// The 'File owner/licensee' frame contains the name of the owner or
/// licensee of the file and it's contents.
/// </summary>
public const string FileOwner = "TOWN";
/// <summary>
/// The 'Internet radio station name' frame contains the name of the
/// internet radio station from which the audio is streamed.
/// </summary>
public const string InternetRadioStationName = "TRSN";
/// <summary>
/// The 'Internet radio station owner' frame contains the name of the
/// owner of the internet radio station from which the audio is
/// streamed.
/// </summary>
public const string InternetRadioStationOwner = "TRSO";
/// <summary>
/// The 'Original filename' frame contains the preferred filename for the
/// file, since some media doesn't allow the desired length of the
/// filename.The filename is case sensitive and includes its suffix.
/// </summary>
public const string OriginalFilename = "TOFN";
/// <summary>
/// The 'Playlist delay' defines the numbers of milliseconds of silence
/// that should be inserted before this audio.The value zero indicates
/// that this is a part of a multifile audio track that should be played
/// continuously.
/// </summary>
public const string PlaylistDelay = "TDLY";
/// <summary>
/// The 'Encoding time' frame contains a timestamp describing when the
/// audio was encoded.Timestamp format is described in the ID3v2
/// structure document[ID3v2 - strct].
/// </summary>
public const string EncodingTime = "TDEN";
/// <summary>
/// The 'Original release time' frame contains a timestamp describing
/// when the original recording of the audio was released.Timestamp
/// format is described in the ID3v2 structure document[ID3v2 - strct].
/// </summary>
public const string OriginalReleaseTime = "TDOR";
/// <summary>
/// The 'Recording time' frame contains a timestamp describing when the
/// audio was recorded.Timestamp format is described in the ID3v2
/// structure document[ID3v2 - strct].
/// </summary>
public const string RecordingTime = "TDRC";
/// <summary>
/// The 'Release time' frame contains a timestamp describing when the
/// audio was first released.Timestamp format is described in the ID3v2
/// structure document [ID3v2-strct].
/// </summary>
public const string ReleaseTime = "TDRL";
/// <summary>
/// The 'Tagging time' frame contains a timestamp describing then the
/// audio was tagged.Timestamp format is described in the ID3v2
/// structure document[ID3v2 - strct].
/// </summary>
public const string TaggingTime = "TDTG";
/// <summary>
/// The 'Software/Hardware and settings used for encoding' frame
/// includes the used audio encoder and its settings when the file was
/// encoded.Hardware refers to hardware encoders, not the computer on
/// which a program was run.
/// </summary>
public const string SoftwareSettings = "TSSE";
/// <summary>
/// The 'Album sort order' frame defines a string which should be used
/// instead of the album name(TALB) for sorting purposes.E.g.an album
/// named "A Soundtrack" might preferably be sorted as "Soundtrack".
/// </summary>
public const string AlbumSortOrder = "TSOA";
/// <summary>
/// The 'Performer sort order' frame defines a string which should be
/// used instead of the performer(TPE2) for sorting purposes.
/// </summary>
public const string PerformerSortOrder = "TSOP";
/// <summary>
/// The 'Title sort order' frame defines a string which should be used
/// instead of the title(TIT2) for sorting purposes.
/// </summary>
public const string TitleSortOrder = "TSOT";
/// <summary>
/// This frame is intended for one-string text information concerning the
/// audio file in a similar way to the other "T"-frames.The frame body
/// consists of a description of the string, represented as a terminated
/// string, followed by the actual string. There may be more than one
/// "TXXX" frame in each tag, but only one with the same description
/// </summary>
public const string UserDefinedTextInfo = "TXXX";
/// <summary>
/// The 'Commercial information' frame is a URL pointing at a web-page
/// with information such as where the album can be bought.There may be
/// more than one "WCOM" frame in a tag, but not with the same content.
/// </summary>
public const string ComercialInformation = "WCOM";
/// <summary>
/// The 'Copyright/Legal information' frame is a URL pointing at a
/// webpage where the terms of use and ownership of the file is
/// described.
/// </summary>
public const string CopyrightWebpage = "WCOP";
/// <summary>
/// The 'Official audio file webpage' frame is a URL pointing at a file
/// specific webpage.
/// </summary>
public const string OfficialAudioWebpage = "WOAF";
/// <summary>
/// The 'Official artist/performer webpage' frame is a URL pointing at
/// the artists official webpage.There may be more than one "WOAR" frame
/// in a tag if the audio contains more than one performer, but not with
/// the same content.
/// </summary>
public const string OfficialArtitstWebpage = "WOAR";
/// <summary>
/// The 'Official audio source webpage' frame is a URL pointing at the
/// official webpage for the source of the audio file, e.g.a movie.
/// </summary>
public const string OfficialSourceWebpage = "WOAS";
/// <summary>
/// The 'Official Internet radio station homepage' contains a URL
/// pointing at the homepage of the internet radio station.
/// </summary>
public const string OfficialInternetRadioWebpage = "WORS";
/// <summary>
/// The 'Payment' frame is a URL pointing at a webpage that will handle
/// the process of paying for this file.
/// </summary>
public const string PaymentWebpage = "WPAY";
/// <summary>
/// The 'Publishers official webpage' frame is a URL pointing at the
/// official webpage for the publisher.
/// </summary>
public const string PublishersWebpage = "WPUB";
/// <summary>
/// This frame is intended for URL [URL] links concerning the audio file
/// in a similar way to the other "W"-frames.The frame body consists
/// of a description of the string, represented as a terminated string,
/// followed by the actual URL.The URL is always encoded with ISO-8859-1
/// [ISO-8859-1]. There may be more than one "WXXX" frame in each tag,
/// but only one with the same description.
/// </summary>
public const string UserDefinedWebpage = "WXXX";
/// <summary>
/// This frame is intended for music that comes from a CD, so that the CD
/// can be identified in databases such as the CDDB[CDDB]. The frame
/// consists of a binary dump of the Table Of Contents, TOC, from the CD,
/// which is a header of 4 bytes and then 8 bytes/track on the CD plus 8
/// bytes for the 'lead out', making a maximum of 804 bytes.The offset
/// to the beginning of every track on the CD should be described with a
/// four bytes absolute CD-frame address per track, and not with absolute
/// time.When this frame is used the presence of a valid "TRCK" frame is
/// REQUIRED, even if the CD's only got one track. It is recommended that
/// this frame is always added to tags originating from CDs.There may
/// only be one "MCDI" frame in each tag.
/// </summary>
public const string MusicCdIdentifier = "MCDI";
/// <summary>
/// This frame allows synchronisation with key events in the audio
/// </summary>
public const string EventTimingCodes = "ETCO";
/// <summary>
/// This ID3v2 frame includes references that the
/// software can use to calculate positions in the file
/// </summary>
public const string MpegLocationLookupTable = "MLLT";
/// <summary>
/// For a more accurate description of the tempo of a musical piece, this
/// frame might be used. Each tempo code consists of one tempo part and one time
/// part.The tempo is in BPM described with one or two bytes. All tempo descriptors MUST be sorted in chronological
/// order.The first beat-stroke in a time-period is at the same time as
/// the beat description occurs.There may only be one "SYTC" frame in
/// each tag.
/// </summary>
public const string SynchronisedTempoCodes = "SYTC";
/// <summary>
/// This frame contains the lyrics of the song or a text transcription of
/// other vocal activities.
/// </summary>
public const string UnsynchronisedLyrics = "USLT";
/// <summary>
/// This is another way of incorporating the words, said or sung lyrics,
/// in the audio file as text, this time, however, in sync with the
/// audio.It might also be used to describing events
/// </summary>
public const string SynchronisedLyrics = "SYLT";
/// <summary>
/// This frame is intended for any kind of full text information that
/// does not fit in any other frame.
/// </summary>
public const string Comments = "COMM";
/// <summary>
/// It allows the user to say how much he wants to increase/decrease the volume on each
/// channel when the file is played
/// </summary>
public const string RelativeVolumeAdjustment2 = "RVA2";
/// <summary>
/// It allows the user to predefine an equalisation curve within the audio file.
/// </summary>
public const string Equalisation2 = "EQU2";
/// <summary>
/// Reverb left/right is the delay between every bounce
/// in ms.Reverb bounces left/right is the number of bounces that should
/// be made.The reverb
/// </summary>
public const string Reverb = "RVBR";
/// <summary>
/// This frame contains a picture directly related to the audio file.
/// </summary>
public const string AttachedPicture = "APIC";
/// <summary>
/// In this frame any type of file can be encapsulated
/// </summary>
public const string GeneralEncapsulatedObject = "GEOB";
/// <summary>
/// Counter of the number of times a file has been played.
/// </summary>
public const string PlayCounter = "PCNT";
/// <summary>
/// Provides a ranting system based on person's taste.
/// The rating is 1-255 where 1 is worst and 255 is best. 0 is unknown.
/// </summary>
public const string Popularmiter = "POPM";
/// <summary>
/// The recommended buffer size
/// </summary>
public const string RecommendedBufferSize = "RBUF";
/// <summary>
/// Indicates if the actual audio stream is encrypted, and by whom.
/// </summary>
public const string AudioEncryption = "AENC";
/// <summary>
/// The linked informationTo keep information duplication as low as possible this frame may be
/// used to link information from another ID3v2 tag that might reside in
/// another audio file or alone in a binary file.It is RECOMMENDED that
/// this method is only used when the files are stored on a CD-ROM or
/// other circumstances when the risk of file separation is low.
/// </summary>
public const string LinkedInformation = "LINK";
/// <summary>
/// Delivers information to the listener of how far into the
/// audio stream he picked up.
/// </summary>
public const string PositionSynchronisation = "POSS";
/// <summary>
/// Contains a brief description of the terms of use and
/// ownership of the file.
/// </summary>
public const string TermsOfUse = "USER";
/// <summary>
/// Might be used as a reminder of a made transaction
/// or, if signed, as proof.
/// </summary>
public const string Ownership = "OWNE";
/// <summary>
/// This frame enables several competing offers in the same tag by
/// bundling all needed information.
/// </summary>
public const string Comercial = "COMR";
/// <summary>
/// To identify with which method a frame has been encrypted.
/// </summary>
public const string EncryptionMethodRegistration = "ENCR";
/// <summary>
/// This frame enables grouping of otherwise unrelated frames. This can
/// be used when some frames are to be signed.To identify which frames
/// belongs to a set of frames a group identifier must be registered in
/// the tag with this frame.
/// </summary>
public const string GroupIdentificationRegistration = "GRID";
/// <summary>
/// Is used to contain information from a software producer
/// that its program uses and does not fit into the other frames.
/// </summary>
public const string Private = "PRIV";
/// <summary>
/// enables a group of frames, grouped with the 'Group
/// identification registration', to be signed.
/// </summary>
public const string Signature = "SIGN";
/// <summary>
/// Indicates where other tags in a file/stream can be found.
/// </summary>
public const string Seek = "SEEK";
/// <summary>
/// Audio files with variable bit rates are intrinsically difficult to
/// deal with in the case of seeking within the file.The ASPI frame
/// makes seeking easier by providing a list a seek points within the
/// audio file.The seek points are a fractional offset within the audio
/// data, providing a starting point from which to find an appropriate
/// point to start decoding.
/// </summary>
public const string AudioSeekPointIndex = "ASPI";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment