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 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes 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 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes 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 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes 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 c39172634..c9670f9f4 100644 --- a/Preferences/Preferences/Base.lproj/Preferences.xib +++ b/Preferences/Preferences/Base.lproj/Preferences.xib @@ -1,8 +1,8 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -146,18 +146,7 @@ - - + @@ -166,50 +155,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + @@ -222,6 +198,30 @@ + + + + + + + + + + + + + + @@ -251,9 +251,62 @@ - + + + + + + + + + + + + + + @@ -275,8 +328,8 @@ - - + + @@ -305,48 +358,6 @@ - - - - - - - - - - - - @@ -415,7 +426,7 @@ - + @@ -429,7 +440,7 @@ - + @@ -451,10 +462,10 @@ - + - + @@ -486,10 +497,10 @@ - + - + @@ -550,17 +561,6 @@ - + @@ -601,6 +612,17 @@ + - @@ -636,7 +647,7 @@ - + @@ -657,7 +668,7 @@ - + @@ -684,7 +695,7 @@ - + @@ -693,7 +704,7 @@ - + @@ -710,16 +721,7 @@ - - - - - - - - - - + @@ -749,7 +751,37 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -779,28 +811,7 @@ - - - - - - - - - - - - - - - - - - - - - - + @@ -809,7 +820,7 @@ - + @@ -825,7 +836,25 @@ - + + + + + + + + + + + + + + + + + + + @@ -841,25 +870,7 @@ - - - - - - - - - - - - - - - - - - - + @@ -868,7 +879,7 @@ - + @@ -877,7 +888,7 @@ - + @@ -890,7 +901,7 @@ - + @@ -899,7 +910,7 @@ - + @@ -908,7 +919,7 @@ - + @@ -921,7 +932,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";