diff --git a/Plugins/CueSheet/CueSheet.m b/Plugins/CueSheet/CueSheet.m index 1e325f1fe..9bdc69954 100644 --- a/Plugins/CueSheet/CueSheet.m +++ b/Plugins/CueSheet/CueSheet.m @@ -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) { @@ -197,17 +198,18 @@ //Need to add basePath, and convert to URL [entries addObject: [CueSheetTrack trackWithURL:[self urlForPath:path relativeTo:filename] - track: track - time: seconds - artist:artist - album:album - title:title - genre:genre - year:year - albumGain:albumGain - albumPeak:albumPeak - trackGain:trackGain - trackPeak:trackPeak]]; + track:track + time:seconds + timeInSamples:timeInSamples + artist:artist + album:album + title:title + genre:genre + year:year + albumGain:albumGain + albumPeak:albumPeak + trackGain:trackGain + trackPeak:trackPeak]]; trackAdded = YES; } else if ([command isEqualToString:@"PERFORMER"]) diff --git a/Plugins/CueSheet/CueSheetDecoder.m b/Plugins/CueSheet/CueSheetDecoder.m index 1c4f42077..325289720 100644 --- a/Plugins/CueSheet/CueSheetDecoder.m +++ b/Plugins/CueSheet/CueSheetDecoder.m @@ -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]; diff --git a/Plugins/CueSheet/CueSheetTrack.h b/Plugins/CueSheet/CueSheetTrack.h index 142bc540c..387ab8d8e 100644 --- a/Plugins/CueSheet/CueSheetTrack.h +++ b/Plugins/CueSheet/CueSheetTrack.h @@ -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 diff --git a/Plugins/CueSheet/CueSheetTrack.m b/Plugins/CueSheet/CueSheetTrack.m index ca9d386dc..40a174639 100644 --- a/Plugins/CueSheet/CueSheetTrack.m +++ b/Plugins/CueSheet/CueSheetTrack.m @@ -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;