mpogue2 / SquareDesk

Fully-featured music player and sequence designer, designed for square dance callers
10 stars 4 forks source link

Feature: define canonical industry-standard metadata for MP3 files #102

Open mpogue2 opened 7 years ago

mpogue2 commented 7 years ago

SquareDesk now understands the iTunes TBPM ID3 tag (it sets what "100%" means for Tempo). There are others that it would be Really Nice to have applied by the Music Producers to their entire catalog. TBPM is super-useful as the first one, because BPM detection is not very reliable.

Here's the reference link: http://id3.org/id3v2.4.0-frames .

Here are the main tags I would like to see in all the music I buy (in priority order):

` TBPM - BPM TKEY - Key, e.g. A#m, BbM USLT - Unsynchronised lyrics ETCO - Event timing codes: end of initial silence intro start intro end main part start main part end outro start SYLT - Synchronized Lyrics RGAD - Replay Gain adjustment (This is not widely supported and I think it has been superseded by RVA2 in ID3v2.4 (and the XRVA tag for 2.3 compatibility).) TPUB - Publisher

TPE1 - Lead artist (singer) TPE2 - Band TLAN - Language (use ISO code) TDOR - Original release date WCOM - URL for purchasing `

mpogue2 commented 1 year ago

I would LOVE to have the music producers make the loops sample accurate, and stick them into the MP3 files.

mpogue2 commented 1 month ago

It looks like there IS a standard (partial, but it exists) for loop points:

https://www.reddit.com/r/monogame/comments/9unc7d/music_with_partial_loop/

https://forums.rpgmakerweb.com/index.php?threads/audio-looping-using-metadata-tags.74700/

The standard appears to be "include 2 of the following 3 ID3 tags":

mpogue2 commented 1 month ago

NOTE: If the values are in SAMPLES, there might be an issue with different MP3 decoders having different amounts of silence at the beginning. IIRC this can be on the order of 10's of milliseconds, making it not sample-accurate across MP3 decoder implementations.

Perhaps we could define the "start of song" with a threshold (some percentage of the max)?

mpogue2 commented 1 month ago

Ah, we could also just measure the "delay" (the silence added up front) for the decoder we use right now, and compensate for that. Then the LOOP* ID3 tags would be sample-accurate (or close enough to it, within a sample or two).

https://wiki.hydrogenaud.io/index.php?title=Gapless_playback

Also, if we stick with LOOPSTART and LOOPLENGTH, any shifts in the LOOPSTART are not likely to be audible, because that also shifts the calculated LOOPEND number, so the LOOPLENGTH stays constant.