Resonite MetaDisc: Difference between revisions
m Bofh moved page User:Bofh/resmd to Resonite MetaDisc |
No edit summary |
||
| Line 54: | Line 54: | ||
! Name !! Type !! Multi-value !! Description | ! Name !! Type !! Multi-value !! Description | ||
|- | |- | ||
| Title || text || | | <code>Title</code> || text || {{TNo}} || Name of the track | ||
|- | |- | ||
| Artist || text || | | <code>Artist</code> || text || {{TYes}} || Artist(s) of the track | ||
|- | |- | ||
| Album || text || | | <code>Album</code> || text || {{TNo}} || Name of the album this track belongs to | ||
|- | |||
| <code>AlbumArtist</code> || text || {{TYes}} || Primary artist(s) that the album was credited to.<br/>For compilation albums, use the value <code>Various Artists</code>. | |||
|- | |||
| Publisher || text || {{TNo}} || Record label or publisher | |||
|- | |||
| <code>Year</code> || number || {{TNo}} || Year of recording/release/etc | |||
|- | |||
| <code>Genre</code> || enum/text || {{TYes}} || Music genre(s); use [[wikipedia:List of ID3v1 genres]] (w/ Winamp extensions) for guidance | |||
|- | |||
| <code>Remix</code> || enum || {{TNo}} || If this is a remix or other derivative work, indicates the type: <code>Remix</code>, <code>Cover</code>, <code>Arrangement</code>, <code>Edit</code>, <code>Other</code> | |||
|- | |||
| <code>Remix.OriginalArtist</code> || text || {{TYes}} || Artist(s) of the original track, if this is a remix/derivative | |||
|- | |||
| <code>Remix.OriginalYear</code> || number || {{TNo}} || Year of the original song's recording/release | |||
|- | |||
| <code>Remix.OriginalTitle</code> || text || {{TNo}} || Title of the original track, if this is a remix/derivative | |||
|- | |||
| <code>Subtitle</code> || text || {{TNo}} || | |||
|- | |||
| <code>Arranger</code> || text || {{TYes}} || | |||
|- | |||
| <code>Composer</code> || text || {{TYes}} || | |||
|- | |||
| <code>Conductor</code> || text || {{TYes}} || | |||
|- | |||
| <code>Lyricist</code> || text || {{TYes}} || | |||
|- | |||
| <code>MBID.Recording</code> || uuid || {{TNo}} || The track's MusicBrainz Recording ID | |||
|- | |||
| <code>MBID.Release</code> || uuid || {{TNo}} || The album's MusicBrainz Release ID | |||
|- | |||
| <code>MBID.Artist</code> || uuid || {{TYes}} || MusicBrainz IDs for the track's artist(s) | |||
|- | |||
| <code>MBID.AlbumArtist</code> || uuid || {{TYes}} || MusicBrainz IDs for the album's release artist(s) | |||
|- | |||
| <code>AlbumType</code> || enum || {{TNo}} || <code>Album</code>, <code>Single</code>, <code>EP</code>, <code>Compilation</code>, <code>Live</code>, <code>Mixtape</code>, <code>Other</code> | |||
|- | |||
| <code>BPM</code> || number || {{TNo}} || | |||
|- | |||
| <code>InitialKey</code> || text || {{TNo}} || | |||
|} | |} | ||
| Line 65: | Line 105: | ||
Song Orb implementations '''SHOULD''' include their own integrated player, but are not strictly required to. | Song Orb implementations '''SHOULD''' include their own integrated player, but are not strictly required to. | ||
You '''MUST''' ensure that all functionality of the Song Orb is disabled when the object root's <code>Active</code> field is set to false. (Notably, context menu entries need their [[reso:Component:ContextMenuItemSource]]'s <code>Enabled</code> field driven to false.) | |||
Revision as of 20:29, 26 January 2026
This specification is under heavy construction, and may be missing important information. |
Res-MD is a music disc format for Resonite. It offers flexibility, metadata support, and advanced features like shuffle playback and mixtape creation. In short, Res-MD delivers the functionality that today's netizens expect of their media, in a convenient virtual package.
Res-MD is also an open specification. You can create your own Res-MD players, editors, and even custom discs, as long as they conform to this specification.
Song Orbs
Song Orbs represent individual music tracks and their associated metadata. A Res-MD disc is, at its core, just a collection of these, and every disc can be modified simply by adding, removing, or rearranging the Song Orbs within.
Structure
This section requires cleanup to conform to specification writing style (e.g. RFC:2119). |
The root slot of a Song Orb needs to have a few things:
- An reso:Component:ObjectRoot
- A reso:Component:DynamicVariableSpace named
SongOrb - A reso:Component:Snapper with the keyword
SongOrb - A child slot named
Metadata- This is where the dynamic variables corresponding to the song's metadata attributes are stored.
Dynamic variables
The following dynamic variables MUST be present:
_RESMD(string): Magic version identifier. Currently0.1;SongOrbAudioClip(IAssetProvider<AudioClip>): Holds a reference to the audio clip for the track._SMFIELDS(string): Semicolon-separated list of metadata attributes present.
_RESMD and AudioClip SHOULD be stored directly on the object root, while _SMFIELDS SHOULD be placed in the Metadata slot.
Additionally, the reference Song Orb implementation defines the following variables, which are used by the integrated player, and may be used:
IsPlaying(bool): Controls the orb's playback animation.IsPausing(bool): Alters the playback animation to indicate a paused state.
If your Song Orb implementation uses string-type dynamic variables not defined here, their names MUST be prefixed with an underscore to prevent collisions with track metadata.
Metadata
Res-MD track metadata is stored as dynamic variables under the Metadata slot. These variables are always string-type, and are named exactly the same as the metadata attribute.
Metadata attribute names MUST be PascalCase, and MUST NOT contain underscores, spaces, or hyphens (periods are allowed). Also, the name of every attribute in use MUST be stored in _SMFIELDS as a semicolon-delimited list: for example, if the song has Title and Artist attributes, _SMFIELDS should be Title;Artist.
Some attributes might contain multiple values; in this case, each value should be separated by a semicolon.
Standard attributes
| Name | Type | Multi-value | Description |
|---|---|---|---|
Title |
text | No | Name of the track |
Artist |
text | Yes | Artist(s) of the track |
Album |
text | No | Name of the album this track belongs to |
AlbumArtist |
text | Yes | Primary artist(s) that the album was credited to. For compilation albums, use the value Various Artists.
|
| Publisher | text | No | Record label or publisher |
Year |
number | No | Year of recording/release/etc |
Genre |
enum/text | Yes | Music genre(s); use wikipedia:List of ID3v1 genres (w/ Winamp extensions) for guidance |
Remix |
enum | No | If this is a remix or other derivative work, indicates the type: Remix, Cover, Arrangement, Edit, Other
|
Remix.OriginalArtist |
text | Yes | Artist(s) of the original track, if this is a remix/derivative |
Remix.OriginalYear |
number | No | Year of the original song's recording/release |
Remix.OriginalTitle |
text | No | Title of the original track, if this is a remix/derivative |
Subtitle |
text | No | |
Arranger |
text | Yes | |
Composer |
text | Yes | |
Conductor |
text | Yes | |
Lyricist |
text | Yes | |
MBID.Recording |
uuid | No | The track's MusicBrainz Recording ID |
MBID.Release |
uuid | No | The album's MusicBrainz Release ID |
MBID.Artist |
uuid | Yes | MusicBrainz IDs for the track's artist(s) |
MBID.AlbumArtist |
uuid | Yes | MusicBrainz IDs for the album's release artist(s) |
AlbumType |
enum | No | Album, Single, EP, Compilation, Live, Mixtape, Other
|
BPM |
number | No | |
InitialKey |
text | No |
Integrated player
The Song Orb's integrated player exists solely for the end user. Implementors of Res-MD systems MUST NOT interface with it or assume it exists; reference the AudioClip instead.
Song Orb implementations SHOULD include their own integrated player, but are not strictly required to.
You MUST ensure that all functionality of the Song Orb is disabled when the object root's Active field is set to false. (Notably, context menu entries need their reso:Component:ContextMenuItemSource's Enabled field driven to false.)