Foundation: config, schema/migrations, auth, stable IDs, metadata probing
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
// Package metadata reads audio/video tags and technical properties via
|
||||
// ffprobe. It shells out with an explicit argument list (never a shell),
|
||||
// so filenames and tag content can never be interpreted as commands.
|
||||
package metadata
|
||||
|
||||
// Tags holds the metadata VibeSonic understands, extracted from a single
|
||||
// media file. Multi-value fields (Artists, Genres) are kept as slices
|
||||
// rather than flattened into a single string, since a song can have
|
||||
// several performers or genres.
|
||||
type Tags struct {
|
||||
Title string
|
||||
SortTitle string
|
||||
|
||||
Album string
|
||||
SortAlbum string
|
||||
AlbumArtist string
|
||||
SortAlbumArtist string
|
||||
|
||||
Artists []string // primary + featured performers, in credit order
|
||||
Composer string
|
||||
Conductor string
|
||||
Contributors []Contributor // producer/engineer/remixer/etc.
|
||||
Genres []string
|
||||
|
||||
Year int
|
||||
OriginalYear int
|
||||
ReleaseDate string
|
||||
OriginalReleaseDate string
|
||||
RecordLabel string
|
||||
|
||||
TrackNumber int
|
||||
TrackTotal int
|
||||
DiscNumber int
|
||||
DiscTotal int
|
||||
DiscSubtitle string
|
||||
|
||||
Comment string
|
||||
ISRC string
|
||||
BPM int
|
||||
|
||||
MusicBrainzTrackID string
|
||||
MusicBrainzRecordingID string
|
||||
MusicBrainzAlbumID string
|
||||
MusicBrainzArtistID string
|
||||
|
||||
ReplayGainTrackGainDB *float64
|
||||
ReplayGainTrackPeak *float64
|
||||
ReplayGainAlbumGainDB *float64
|
||||
ReplayGainAlbumPeak *float64
|
||||
|
||||
HasEmbeddedArt bool
|
||||
EmbeddedArtStream int
|
||||
EmbeddedLyrics string
|
||||
|
||||
// Technical properties, read from the container/stream info rather
|
||||
// than tags.
|
||||
Format string
|
||||
Kind string // "song" or "video"
|
||||
DurationSeconds float64
|
||||
BitrateKbps int
|
||||
SampleRateHz int
|
||||
Channels int
|
||||
}
|
||||
|
||||
// Contributor is a non-performer credit, e.g. {Name: "Rick Rubin", Role: "producer"}.
|
||||
type Contributor struct {
|
||||
Name string
|
||||
Role string
|
||||
}
|
||||
Reference in New Issue
Block a user