TagLib: Update metadata readers

Update the readers to support the newly added tag fields, and also read
the supported format list from the library itself.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-02-17 04:23:29 -08:00
parent 65e2da2d9e
commit 7e23e80b24
2 changed files with 72 additions and 50 deletions

View file

@ -66,37 +66,43 @@
if(tag) {
TagLib::String artist, albumartist, composer, title, album, genre, comment, unsyncedlyrics;
int year, track, disc;
float rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak;
TagLib::Tag::ReplayGain rg;
TagLib::String cuesheet;
TagLib::String soundcheck;
artist = tag->artist();
//albumartist = tag->albumartist();
//composer = tag->composer();
albumartist = tag->albumartist();
composer = tag->composer();
title = tag->title();
album = tag->album();
genre = tag->genre();
comment = tag->comment();
//cuesheet = tag->cuesheet();
//unsyncedlyrics = tag->unsyncedlyrics();
cuesheet = tag->cuesheet();
unsyncedlyrics = tag->unsyncedlyrics();
year = tag->year();
[dict setObject:@(year) forKey:@"year"];
if(year)
[dict setObject:@(year) forKey:@"year"];
track = tag->track();
[dict setObject:@(track) forKey:@"track"];
if(track)
[dict setObject:@(track) forKey:@"track"];
/*disc = tag->disc();
[dict setObject:@(disc) forKey:@"disc"];*/
disc = tag->disc();
if(disc)
[dict setObject:@(disc) forKey:@"disc"];
/*rgAlbumGain = tag->rgAlbumGain();
rgAlbumPeak = tag->rgAlbumPeak();
rgTrackGain = tag->rgTrackGain();
rgTrackPeak = tag->rgTrackPeak();
[dict setObject:@(rgAlbumGain) forKey:@"replaygain_album_gain"];
[dict setObject:@(rgAlbumPeak) forKey:@"replaygain_album_peak"];
[dict setObject:@(rgTrackGain) forKey:@"replaygain_track_gain"];
[dict setObject:@(rgTrackPeak) forKey:@"replaygain_track_peak"];
rg = tag->replaygain();
if(!rg.isEmpty()) {
if(rg.albumGainSet())
[dict setObject:@(rg.albumGain()) forKey:@"replaygain_album_gain"];
if(rg.albumPeakSet())
[dict setObject:@(rg.albumPeak()) forKey:@"replaygain_album_peak"];
if(rg.trackGainSet())
[dict setObject:@(rg.trackGain()) forKey:@"replaygain_track_gain"];
if(rg.trackPeakSet())
[dict setObject:@(rg.trackPeak()) forKey:@"replaygain_track_peak"];
}
soundcheck = tag->soundcheck();
if(!soundcheck.isEmpty()) {
@ -108,13 +114,16 @@
}
if(wantedTag.size() >= 10) {
float volume1 = -log10((double)((uint32_t)wantedTag[0].toInt(16)) / 1000) * 10;
float volume2 = -log10((double)((uint32_t)wantedTag[1].toInt(16)) / 1000) * 10;
float volumeToUse = MIN(volume1, volume2);
float volumeScale = pow(10, volumeToUse / 20);
[dict setObject:@(volumeScale) forKey:@"volume"];
bool ok1, ok2;
float volume1 = -log10((double)((uint32_t)wantedTag[0].toInt(&ok1, 16)) / 1000) * 10;
float volume2 = -log10((double)((uint32_t)wantedTag[1].toInt(&ok2, 16)) / 1000) * 10;
if(ok1 && ok2) {
float volumeToUse = MIN(volume1, volume2);
float volumeScale = pow(10, volumeToUse / 20);
[dict setObject:@(volumeScale) forKey:@"volume"];
}
}
}*/
}
if(!artist.isEmpty())
[dict setObject:[NSString stringWithUTF8String:artist.toCString(true)] forKey:@"artist"];

View file

@ -78,41 +78,47 @@
if(tag) {
TagLib::String artist, albumartist, composer, title, album, genre, comment, unsyncedlyrics;
int year, track, disc;
float rgAlbumGain, rgAlbumPeak, rgTrackGain, rgTrackPeak;
TagLib::Tag::ReplayGain rg;
TagLib::String cuesheet;
TagLib::String soundcheck;
artist = tag->artist();
//albumartist = tag->albumartist();
//composer = tag->composer();
albumartist = tag->albumartist();
composer = tag->composer();
title = tag->title();
;
album = tag->album();
genre = tag->genre();
comment = tag->comment();
//cuesheet = tag->cuesheet();
cuesheet = tag->cuesheet();
//unsyncedlyrics = tag->unsyncedlyrics();
unsyncedlyrics = tag->unsyncedlyrics();
year = tag->year();
[dict setObject:@(year) forKey:@"year"];
if(year)
[dict setObject:@(year) forKey:@"year"];
track = tag->track();
[dict setObject:@(track) forKey:@"track"];
if(track)
[dict setObject:@(track) forKey:@"track"];
/*disc = tag->disc();
[dict setObject:@(disc) forKey:@"disc"];*/
disc = tag->disc();
if(disc)
[dict setObject:@(disc) forKey:@"disc"];
/*rgAlbumGain = tag->rgAlbumGain();
rgAlbumPeak = tag->rgAlbumPeak();
rgTrackGain = tag->rgTrackGain();
rgTrackPeak = tag->rgTrackPeak();
[dict setObject:@(rgAlbumGain) forKey:@"replaygain_album_gain"];
[dict setObject:@(rgAlbumPeak) forKey:@"replaygain_album_peak"];
[dict setObject:@(rgTrackGain) forKey:@"replaygain_track_gain"];
[dict setObject:@(rgTrackPeak) forKey:@"replaygain_track_peak"];*/
rg = tag->replaygain();
if(!rg.isEmpty()) {
if(rg.albumGainSet())
[dict setObject:@(rg.albumGain()) forKey:@"replaygain_album_gain"];
if(rg.albumPeakSet())
[dict setObject:@(rg.albumPeak()) forKey:@"replaygain_album_peak"];
if(rg.trackGainSet())
[dict setObject:@(rg.trackGain()) forKey:@"replaygain_track_gain"];
if(rg.trackPeakSet())
[dict setObject:@(rg.trackPeak()) forKey:@"replaygain_track_peak"];
}
/*soundcheck = tag->soundcheck();
soundcheck = tag->soundcheck();
if(!soundcheck.isEmpty()) {
TagLib::StringList tag = soundcheck.split(" ");
TagLib::StringList wantedTag;
@ -122,13 +128,16 @@
}
if(wantedTag.size() >= 10) {
float volume1 = -log10((double)((uint32_t)wantedTag[0].toInt(16)) / 1000) * 10;
float volume2 = -log10((double)((uint32_t)wantedTag[1].toInt(16)) / 1000) * 10;
float volumeToUse = MIN(volume1, volume2);
float volumeScale = pow(10, volumeToUse / 20);
[dict setObject:@(volumeScale) forKey:@"volume"];
bool ok1, ok2;
float volume1 = -log10((double)((uint32_t)wantedTag[0].toInt(&ok1, 16)) / 1000) * 10;
float volume2 = -log10((double)((uint32_t)wantedTag[1].toInt(&ok2, 16)) / 1000) * 10;
if(ok1 && ok2) {
float volumeToUse = MIN(volume1, volume2);
float volumeScale = pow(10, volumeToUse / 20);
[dict setObject:@(volumeScale) forKey:@"volume"];
}
}
}*/
}
if(!artist.isEmpty())
[dict setObject:[NSString stringWithUTF8String:artist.toCString(true)] forKey:@"artist"];
@ -192,8 +201,12 @@
}
+ (NSArray *)fileTypes {
// May be a way to get a list of supported formats
return @[@"asf", @"wma", @"mpc", @"mp3", @"mp4", @"m4a", @"apl", @"wav", @"aif", @"aiff", @"wv", @"wvp", @"ogg", @"oga", @"opus"];
NSMutableArray *extlist = [[NSMutableArray alloc] init];
TagLib::StringList exts = TagLib::FileRef::defaultFileExtensions();
for(const auto &ext : exts) {
[extlist addObject:[NSString stringWithUTF8String:ext.toCString(true)]];
}
return [NSArray arrayWithArray:extlist];
}
+ (NSArray *)mimeTypes {