diff --git a/Audio/Chain/ChunkList.h b/Audio/Chain/ChunkList.h index f025ca886..ffe24fc50 100644 --- a/Audio/Chain/ChunkList.h +++ b/Audio/Chain/ChunkList.h @@ -36,6 +36,8 @@ NS_ASSUME_NONNULL_BEGIN int dsd2pcmLatency; #endif + BOOL halveDSDVolume; + void *hdcd_decoder; BOOL formatRead; diff --git a/Audio/Chain/ChunkList.m b/Audio/Chain/ChunkList.m index a2043c075..b69458b01 100644 --- a/Audio/Chain/ChunkList.m +++ b/Audio/Chain/ChunkList.m @@ -19,6 +19,8 @@ #import "BadSampleCleaner.h" #endif +static void *kChunkListContext = &kChunkListContext; + #if DSD_DECIMATE /** * DSD 2 PCM: Stage 1: @@ -392,6 +394,10 @@ - (id)initWithMaximumDuration:(double)duration { dsd2pcmCount = 0; dsd2pcmLatency = 0; #endif + + halveDSDVolume = NO; + + [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.halveDSDVolume" options:(NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew) context:kChunkListContext]; } return self; @@ -419,6 +425,19 @@ - (void)dealloc { if(tempData) { free(tempData); } + + [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.halveDSDVolume" context:kChunkListContext]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if(context != kChunkListContext) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + if([keyPath isEqualToString:@"values.halveDSDVolume"]) { + halveDSDVolume = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] boolForKey:@"halveDSDVolume"]; + } } - (void)reset { @@ -648,8 +667,15 @@ - (AudioChunk *)convertChunk:(AudioChunk *)inChunk { inputBuffer = &tempData[buffer_adder]; inputChanged = YES; #if DSD_DECIMATE - float scaleFactor = 2.0f; - vDSP_vsdiv((float *)inputBuffer, 1, &scaleFactor, (float *)inputBuffer, 1, bytesReadFromInput / sizeof(float)); + if(halveDSDVolume) { + float scaleFactor = 2.0f; + vDSP_vsdiv((float *)inputBuffer, 1, &scaleFactor, (float *)inputBuffer, 1, bytesReadFromInput / sizeof(float)); + } +#else + if(!halveDSDVolume) { + float scaleFactor = 2.0f; + vDSP_vsmul((float *)inputBuffer, 1, &scaleFactor, (float *)inputBuffer, 1, bytesReadFromInput / sizeof(float)); + } #endif } else if(bitsPerSample <= 8) { samplesRead = bytesReadFromInput; diff --git a/Preferences/Preferences/Base.lproj/PathSuggester.xib b/Preferences/Preferences/Base.lproj/PathSuggester.xib index 011e9f093..d9b861bb1 100644 --- a/Preferences/Preferences/Base.lproj/PathSuggester.xib +++ b/Preferences/Preferences/Base.lproj/PathSuggester.xib @@ -1,8 +1,8 @@ - + - + @@ -84,11 +84,11 @@ - + - + diff --git a/Preferences/Preferences/Base.lproj/Preferences.xib b/Preferences/Preferences/Base.lproj/Preferences.xib index 214f0f650..5c692ae23 100644 --- a/Preferences/Preferences/Base.lproj/Preferences.xib +++ b/Preferences/Preferences/Base.lproj/Preferences.xib @@ -1,8 +1,8 @@ - + - + @@ -35,7 +35,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -145,18 +145,7 @@ - - + @@ -165,7 +154,11 @@ - + + + + + @@ -174,7 +167,11 @@ - + + + + + @@ -183,32 +180,11 @@ - - - - - - - - - - - - - - - - - - - - - - + @@ -221,6 +197,30 @@ + + + + + + + + + + + + + + @@ -232,9 +232,62 @@ - + + + + + + + + + + + + + + @@ -256,8 +309,8 @@ - - + + @@ -286,48 +339,6 @@ - - - - - - - - - - - - @@ -396,7 +407,7 @@ - + @@ -410,7 +421,7 @@ - + @@ -432,10 +443,10 @@ - + - + @@ -467,10 +478,10 @@ - + - + @@ -531,26 +542,26 @@ - - @@ -582,27 +593,27 @@ - - @@ -617,7 +628,7 @@ - + @@ -638,7 +649,7 @@ - + @@ -665,7 +676,7 @@ - + @@ -674,7 +685,7 @@ - + @@ -691,16 +702,7 @@ - - - - - - - - - - + @@ -730,7 +732,37 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -760,28 +792,7 @@ - - - - - - - - - - - - - - - - - - - - - - + @@ -790,7 +801,7 @@ - + @@ -806,23 +817,7 @@ - - - - - - - - - - - - TimeIntervalToStringTransformer - - - - - + @@ -831,7 +826,7 @@ - + @@ -840,7 +835,23 @@ - + + + + + + + + + + + + TimeIntervalToStringTransformer + + + + + @@ -849,7 +860,7 @@ - + @@ -858,7 +869,7 @@ - + @@ -871,7 +882,7 @@ - + @@ -880,7 +891,7 @@ - + @@ -889,7 +900,7 @@ - + @@ -902,7 +913,7 @@ - + diff --git a/Preferences/Preferences/en.lproj/Preferences.strings b/Preferences/Preferences/en.lproj/Preferences.strings index 96e4477db..7f5a770a7 100644 --- a/Preferences/Preferences/en.lproj/Preferences.strings +++ b/Preferences/Preferences/en.lproj/Preferences.strings @@ -241,3 +241,6 @@ /* Class = "NSTextFieldCell"; title = "Fade in/out:"; ObjectID = "Gp4-rA-1UF"; */ "Gp4-rA-1UF.title" = "Fade in/out:"; + +/* Class = "NSButtonCell"; title = "Reduce DSD volume level by 6 dB"; ObjectID = "Phw-hj-6tI"; */ +"Phw-hj-6tI.title" = "Reduce DSD volume level by 6 dB"; diff --git a/Preferences/Preferences/es.lproj/Preferences.strings b/Preferences/Preferences/es.lproj/Preferences.strings index b5eea291b..60b0ece21 100644 --- a/Preferences/Preferences/es.lproj/Preferences.strings +++ b/Preferences/Preferences/es.lproj/Preferences.strings @@ -240,3 +240,6 @@ /* Class = "NSTextFieldCell"; title = "Fade in/out:"; ObjectID = "Gp4-rA-1UF"; */ "Gp4-rA-1UF.title" = "Fundido:"; + +/* Class = "NSButtonCell"; title = "Reduce DSD volume level by 6 dB"; ObjectID = "Phw-hj-6tI"; */ +"Phw-hj-6tI.title" = "Reducir volumen de DSD en 6 dB"; diff --git a/Preferences/Preferences/pl.lproj/Preferences.strings b/Preferences/Preferences/pl.lproj/Preferences.strings index cc009df58..f14cee53f 100644 --- a/Preferences/Preferences/pl.lproj/Preferences.strings +++ b/Preferences/Preferences/pl.lproj/Preferences.strings @@ -103,3 +103,9 @@ /* Class = "NSButtonCell"; title = "Add other files in the same folder when adding a file"; ObjectID = "ws4-en-un8"; */ "ws4-en-un8.title" = "Add other files in the same folder when adding a file"; + +/* Class = "NSTextFieldCell"; title = "Fade in/out:"; ObjectID = "Gp4-rA-1UF"; */ +"Gp4-rA-1UF.title" = "Fade in/out:"; + +/* Class = "NSButtonCell"; title = "Reduce DSD volume level by 6 dB"; ObjectID = "Phw-hj-6tI"; */ +"Phw-hj-6tI.title" = "Reduce DSD volume level by 6 dB"; diff --git a/Preferences/Preferences/ru.lproj/Preferences.strings b/Preferences/Preferences/ru.lproj/Preferences.strings index e5a8cb097..dec16b3ce 100644 --- a/Preferences/Preferences/ru.lproj/Preferences.strings +++ b/Preferences/Preferences/ru.lproj/Preferences.strings @@ -202,3 +202,6 @@ /* Class = "NSTextFieldCell"; title = "Fade in/out:"; ObjectID = "Gp4-rA-1UF"; */ "Gp4-rA-1UF.title" = "Fade in/out:"; + +/* Class = "NSButtonCell"; title = "Reduce DSD volume level by 6 dB"; ObjectID = "Phw-hj-6tI"; */ +"Phw-hj-6tI.title" = "Reduce DSD volume level by 6 dB"; diff --git a/Preferences/Preferences/tr.lproj/Preferences.strings b/Preferences/Preferences/tr.lproj/Preferences.strings index 818687e1e..6950ab802 100644 --- a/Preferences/Preferences/tr.lproj/Preferences.strings +++ b/Preferences/Preferences/tr.lproj/Preferences.strings @@ -241,3 +241,6 @@ /* Class = "NSTextFieldCell"; title = "Fade in/out:"; ObjectID = "Gp4-rA-1UF"; */ "Gp4-rA-1UF.title" = "Fade in/out:"; + +/* Class = "NSButtonCell"; title = "Reduce DSD volume level by 6 dB"; ObjectID = "Phw-hj-6tI"; */ +"Phw-hj-6tI.title" = "Reduce DSD volume level by 6 dB";