CueSheet parser: Support quirky FLAC generated CueSheets that contain sample counts instead of frames
This commit is contained in:
parent
ccbfc6ec4b
commit
a1522aeb6e
4 changed files with 45 additions and 27 deletions
|
@ -177,17 +177,18 @@
|
|||
|
||||
NSArray *msf = [time componentsSeparatedByString:@":"];
|
||||
size_t count = [msf count];
|
||||
if (count < 1 || count > 3) {
|
||||
if (count != 1 && count != 3) {
|
||||
continue;
|
||||
}
|
||||
|
||||
double seconds = 0;
|
||||
double seconds;
|
||||
BOOL timeInSamples = NO;
|
||||
|
||||
if (count == 1)
|
||||
seconds = [[msf objectAtIndex:0] floatValue] / 75;
|
||||
else if (count == 2)
|
||||
seconds = [[msf objectAtIndex:0] intValue] + ([[msf objectAtIndex:1] floatValue]/75);
|
||||
else if (count == 3)
|
||||
if (count == 1) {
|
||||
seconds = [[msf objectAtIndex:0] floatValue];
|
||||
timeInSamples = YES;
|
||||
}
|
||||
else
|
||||
seconds = (60*[[msf objectAtIndex:0] intValue]) + [[msf objectAtIndex:1] intValue] + ([[msf objectAtIndex:2] floatValue]/75);
|
||||
|
||||
if (track == nil) {
|
||||
|
@ -199,6 +200,7 @@
|
|||
[CueSheetTrack trackWithURL:[self urlForPath:path relativeTo:filename]
|
||||
track:track
|
||||
time:seconds
|
||||
timeInSamples:timeInSamples
|
||||
artist:artist
|
||||
album:album
|
||||
title:title
|
||||
|
|
|
@ -114,10 +114,14 @@
|
|||
|
||||
bytesPerFrame = (bitsPerSample/8) * channels;
|
||||
|
||||
trackStart = [track time] * sampleRate;
|
||||
double _trackStart = [track time];
|
||||
if (![track timeInSamples]) _trackStart *= sampleRate;
|
||||
trackStart = _trackStart;
|
||||
|
||||
if (nextTrack && (embedded || ([[[nextTrack url] absoluteString] isEqualToString:[[track url] absoluteString]]))) {
|
||||
trackEnd = [nextTrack time] * sampleRate;
|
||||
double _trackEnd = [nextTrack time];
|
||||
if (![nextTrack timeInSamples]) _trackEnd *= sampleRate;
|
||||
trackEnd = _trackEnd;
|
||||
}
|
||||
else {
|
||||
trackEnd = [[properties objectForKey:@"totalFrames"] doubleValue];
|
||||
|
@ -201,7 +205,9 @@
|
|||
|
||||
float sampleRate = [[[decoder properties] objectForKey:@"sampleRate"] floatValue];
|
||||
|
||||
trackStart = [track time] * sampleRate;
|
||||
double _trackStart = [track time];
|
||||
if (![track timeInSamples]) _trackStart *= sampleRate;
|
||||
trackStart = _trackStart;
|
||||
|
||||
CueSheetTrack *nextTrack = nil;
|
||||
if (i + 1 < [tracks count]) {
|
||||
|
@ -209,7 +215,9 @@
|
|||
}
|
||||
|
||||
if (nextTrack && (embedded || [[[nextTrack url] absoluteString] isEqualToString:[[track url] absoluteString]])) {
|
||||
trackEnd = [nextTrack time] * sampleRate;
|
||||
double _trackEnd = [nextTrack time];
|
||||
if (![nextTrack timeInSamples]) _trackEnd *= sampleRate;
|
||||
trackEnd = _trackEnd;
|
||||
}
|
||||
else {
|
||||
trackEnd = [[[decoder properties] objectForKey:@"totalFrames"] longValue];
|
||||
|
|
|
@ -25,10 +25,11 @@
|
|||
float trackPeak;
|
||||
|
||||
double time; //Starting time for the track
|
||||
BOOL timeInSamples;
|
||||
}
|
||||
|
||||
+ (id)trackWithURL:(NSURL *)u track:(NSString *)t time:(double)s artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak;
|
||||
- (id)initWithURL:(NSURL *)u track:(NSString *)t time:(double)s artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak;
|
||||
+ (id)trackWithURL:(NSURL *)u track:(NSString *)t time:(double)s timeInSamples:(BOOL)tis artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak;
|
||||
- (id)initWithURL:(NSURL *)u track:(NSString *)t time:(double)s timeInSamples:(BOOL)tis artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak;
|
||||
|
||||
|
||||
- (NSString *)track;
|
||||
|
@ -45,5 +46,6 @@
|
|||
- (float)trackPeak;
|
||||
|
||||
- (double)time;
|
||||
- (BOOL)timeInSamples;
|
||||
|
||||
@end
|
||||
|
|
|
@ -11,12 +11,12 @@
|
|||
|
||||
@implementation CueSheetTrack
|
||||
|
||||
+ (id)trackWithURL:(NSURL *)u track:(NSString *)t time:(double)s artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak
|
||||
+ (id)trackWithURL:(NSURL *)u track:(NSString *)t time:(double)s timeInSamples:(BOOL)tis artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak
|
||||
{
|
||||
return [[CueSheetTrack alloc] initWithURL:u track:t time:s artist:a album:b title:l genre:g year:y albumGain:albumGain albumPeak:albumPeak trackGain:trackGain trackPeak:trackPeak];
|
||||
return [[CueSheetTrack alloc] initWithURL:u track:t time:s timeInSamples:tis artist:a album:b title:l genre:g year:y albumGain:albumGain albumPeak:albumPeak trackGain:trackGain trackPeak:trackPeak];
|
||||
}
|
||||
|
||||
- (id)initWithURL:(NSURL *)u track:(NSString *)t time:(double)s artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak
|
||||
- (id)initWithURL:(NSURL *)u track:(NSString *)t time:(double)s timeInSamples:(BOOL)tis artist:(NSString *)a album:(NSString *)b title:(NSString *)l genre:(NSString *)g year:(NSString *)y albumGain:(float)albumGain albumPeak:(float)albumPeak trackGain:(float)trackGain trackPeak:(float)trackPeak
|
||||
{
|
||||
self = [super init];
|
||||
if (self)
|
||||
|
@ -30,6 +30,7 @@
|
|||
year = [y copy];
|
||||
|
||||
time = s;
|
||||
timeInSamples = tis;
|
||||
|
||||
self->albumGain = albumGain;
|
||||
self->albumPeak = albumPeak;
|
||||
|
@ -55,6 +56,11 @@
|
|||
return time;
|
||||
}
|
||||
|
||||
- (BOOL)timeInSamples
|
||||
{
|
||||
return timeInSamples;
|
||||
}
|
||||
|
||||
- (NSString *)artist
|
||||
{
|
||||
return artist;
|
||||
|
|
Loading…
Reference in a new issue