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