David pushed to branch master at VideoLAN / VLC
Commits:
6f47656d by Samuel Bassaly at 2021-08-29T13:28:07+00:00
macosx: Add stereo_pan filter
Add stereo pan filter to Advanced Audio Effects panel.
Add enable button for each filter, as pan audio effect has effect over
the whole spectrum (always noticeable), thus, if always enabled, it
makes pitch adjustment unusable.
Additionally, for pitch adjustment:
- Update the step of the scale to 0.25
- Fix the default value to 0.0 (was previously 0.25)
Closes issue #25872
- - - - -
3 changed files:
- modules/gui/macosx/UI/AudioEffects.xib
- modules/gui/macosx/panels/VLCAudioEffectsWindowController.h
- modules/gui/macosx/panels/VLCAudioEffectsWindowController.m
Changes:
=====================================
modules/gui/macosx/UI/AudioEffects.xib
=====================================
@@ -8,11 +8,13 @@
<objects>
<customObject id="-2" userLabel="File's Owner"
customClass="VLCAudioEffectsWindowController">
<connections>
- <outlet property="advancedEnableCheckbox"
destination="rjL-0q-isR" id="Tjh-on-9sb"/>
- <outlet property="advancedPitchLabel" destination="f9i-Ql-mCB"
id="9nt-SB-ROX"/>
+ <outlet property="advancedEnablePitchCheckBox"
destination="rjL-0q-isR" id="uT4-QE-Mdc"/>
+ <outlet property="advancedEnableStereoPanCheckBox"
destination="T4W-oT-4At" id="aJK-Hf-oWv"/>
<outlet property="advancedPitchSlider"
destination="nTJ-ss-QlS" id="mPt-X9-kEF"/>
<outlet property="advancedPitchTextField"
destination="8cX-Go-0bh" id="5pd-hu-267"/>
<outlet property="advancedResetButton"
destination="fI0-dm-MVt" id="Yg0-gT-4je"/>
+ <outlet property="advancedStereoPanSlider"
destination="sxu-tL-Ztr" id="wix-Eu-RX7"/>
+ <outlet property="advancedStereoPanTextField"
destination="Fbj-Sr-i4z" id="vFF-M0-QUy"/>
<outlet property="advancedView" destination="L1S-G0-kAE"
id="lDO-b5-pKe"/>
<outlet property="applyProfileCheckbox"
destination="Dqv-cc-ZvK" id="DXd-0m-de4"/>
<outlet property="compressorBand1Label" destination="248"
id="qCX-jv-cwZ"/>
@@ -101,7 +103,7 @@
<windowStyleMask key="styleMask" titled="YES" closable="YES"
utility="YES" HUD="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES"
rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="254" width="473" height="281"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
+ <rect key="screenRect" x="0.0" y="0.0" width="3440" height="1440"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="475" height="281"/>
<autoresizingMask key="autoresizingMask"/>
@@ -1136,18 +1138,8 @@
<rect key="frame" x="0.0" y="0.0"
width="475" height="211"/>
<autoresizingMask key="autoresizingMask"
widthSizable="YES" heightSizable="YES"/>
<subviews>
- <button
mirrorLayoutDirectionWhenInternationalizing="always"
translatesAutoresizingMaskIntoConstraints="NO" id="rjL-0q-isR">
- <rect key="frame" x="7" y="190"
width="58" height="18"/>
- <buttonCell key="cell"
type="check" title="Enable" bezelStyle="regularSquare" imagePosition="left"
alignment="left" controlSize="small" inset="2" id="XkH-KA-7ZB">
- <behavior key="behavior"
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
- <font key="font"
metaFont="message" size="11"/>
- </buttonCell>
- <connections>
- <action
selector="advancedEnable:" target="-2" id="0wk-x7-VxI"/>
- </connections>
- </button>
<button verticalHuggingPriority="750"
translatesAutoresizingMaskIntoConstraints="NO" id="fI0-dm-MVt">
- <rect key="frame" x="426" y="191"
width="39" height="15"/>
+ <rect key="frame" x="426" y="190"
width="39" height="15"/>
<buttonCell key="cell"
type="roundRect" title="Reset" bezelStyle="roundedRect"
image="buttonCell:rEJ-M5-S37:image" imagePosition="overlaps" alignment="center"
controlSize="mini" borderStyle="border" inset="2" id="rEJ-M5-S37">
<behavior key="behavior"
pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font"
metaFont="miniSystem"/>
@@ -1157,57 +1149,85 @@
</connections>
</button>
<customView
translatesAutoresizingMaskIntoConstraints="NO" id="L1S-G0-kAE">
- <rect key="frame" x="195" y="0.0"
width="86" height="178"/>
+ <rect key="frame" x="151" y="0.0"
width="174" height="177"/>
<subviews>
- <slider
translatesAutoresizingMaskIntoConstraints="NO" id="nTJ-ss-QlS">
- <rect key="frame" x="34"
y="47" width="18" height="131"/>
- <sliderCell key="cell"
controlSize="small" continuous="YES" alignment="left" minValue="-12"
maxValue="12" tickMarkPosition="right" numberOfTickMarks="9"
sliderType="linear" id="kju-14-quf"/>
+ <button
mirrorLayoutDirectionWhenInternationalizing="always"
translatesAutoresizingMaskIntoConstraints="NO" id="rjL-0q-isR"
userLabel="Enable Pitch">
+ <rect key="frame" x="2"
y="10" width="80" height="18"/>
+ <buttonCell key="cell"
type="check" title="Adjust Pitch" bezelStyle="regularSquare"
imagePosition="left" alignment="left" controlSize="small" inset="2"
id="XkH-KA-7ZB">
+ <behavior
key="behavior" changeContents="YES" doesNotDimImage="YES"
lightByContents="YES"/>
+ <font key="font"
metaFont="system" size="10"/>
+ </buttonCell>
<connections>
- <action
selector="advancedSliderUpdated:" target="-2" id="yzS-3w-HKN"/>
+ <action
selector="advancedEnablePitchAction:" target="-2" id="HjV-I0-cAu"/>
+ </connections>
+ </button>
+ <button
mirrorLayoutDirectionWhenInternationalizing="always"
translatesAutoresizingMaskIntoConstraints="NO" id="T4W-oT-4At"
userLabel="Enable Pan">
+ <rect key="frame" x="95"
y="10" width="74" height="18"/>
+ <buttonCell key="cell"
type="check" title="Adjust Pan" bezelStyle="regularSquare" imagePosition="left"
alignment="left" controlSize="small" inset="2" id="spd-gN-jF7">
+ <behavior
key="behavior" changeContents="YES" doesNotDimImage="YES"
lightByContents="YES"/>
+ <font key="font"
metaFont="system" size="10"/>
+ </buttonCell>
+ <connections>
+ <action
selector="advancedEnableStereoPanAction:" target="-2" id="pl8-yv-9vM"/>
+ </connections>
+ </button>
+ <slider
translatesAutoresizingMaskIntoConstraints="NO" id="nTJ-ss-QlS" userLabel="Pitch
Slider">
+ <rect key="frame" x="34"
y="48" width="18" height="129"/>
+ <sliderCell key="cell"
controlSize="small" continuous="YES" alignment="left" minValue="-48"
maxValue="48" tickMarkPosition="right" numberOfTickMarks="9"
sliderType="linear" id="kju-14-quf"/>
+ <connections>
+ <action
selector="advancedPitchSliderUpdated:" target="-2" id="Zz3-Jj-zs3"/>
</connections>
</slider>
<textField
verticalHuggingPriority="750" horizontalCompressionResistancePriority="755"
translatesAutoresizingMaskIntoConstraints="NO" id="8cX-Go-0bh">
- <rect key="frame" x="8"
y="33" width="70" height="11"/>
+ <rect key="frame" x="8"
y="34" width="70" height="11"/>
<textFieldCell key="cell"
controlSize="mini" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES"
alignment="center" title="0.0 semitones" usesSingleLineMode="YES"
id="Ycq-EF-cb9">
<font key="font"
metaFont="miniSystem"/>
<color key="textColor"
name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color
key="backgroundColor" name="controlColor" catalog="System"
colorSpace="catalog"/>
</textFieldCell>
</textField>
- <textField
verticalHuggingPriority="750" horizontalCompressionResistancePriority="250"
preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO"
id="f9i-Ql-mCB" customClass="VLCWrappableTextField">
- <rect key="frame" x="8"
y="13" width="70" height="11"/>
- <textFieldCell key="cell"
controlSize="mini" sendsActionOnEndEditing="YES" alignment="center"
title="Adjust pitch" id="tFs-LA-Bdx">
+ <textField
verticalHuggingPriority="750" horizontalCompressionResistancePriority="755"
translatesAutoresizingMaskIntoConstraints="NO" id="Fbj-Sr-i4z"
userLabel="StreoPannerScale">
+ <rect key="frame" x="122"
y="34" width="22" height="11"/>
+ <textFieldCell key="cell"
controlSize="mini" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES"
alignment="center" title="0.0" usesSingleLineMode="YES" id="Inp-23-uMg">
<font key="font"
metaFont="miniSystem"/>
<color key="textColor"
name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color
key="backgroundColor" name="controlColor" catalog="System"
colorSpace="catalog"/>
</textFieldCell>
</textField>
+ <slider
translatesAutoresizingMaskIntoConstraints="NO" id="sxu-tL-Ztr"
userLabel="StereoPanner Slider">
+ <rect key="frame" x="124"
y="48" width="18" height="129"/>
+ <sliderCell key="cell"
controlSize="small" continuous="YES" alignment="left" maxValue="10"
doubleValue="5" tickMarkPosition="right" numberOfTickMarks="9"
sliderType="linear" id="XZV-sP-C5o"/>
+ <connections>
+ <action
selector="advancedStereoPanSliderUpdated:" target="-2" id="Xeo-cH-SH6"/>
+ </connections>
+ </slider>
</subviews>
<constraints>
+ <constraint
firstItem="Fbj-Sr-i4z" firstAttribute="centerY" secondItem="8cX-Go-0bh"
secondAttribute="centerY" id="0pJ-WY-iAF"/>
<constraint
firstItem="nTJ-ss-QlS" firstAttribute="top" secondItem="L1S-G0-kAE"
secondAttribute="top" id="6RB-JZ-xWV"/>
- <constraint
firstAttribute="trailing" secondItem="8cX-Go-0bh" secondAttribute="trailing"
constant="10" id="Jg8-TQ-Djp"/>
- <constraint
firstAttribute="bottom" secondItem="f9i-Ql-mCB" secondAttribute="bottom"
constant="13" id="brb-yM-ZgX"/>
- <constraint
firstItem="nTJ-ss-QlS" firstAttribute="bottom" secondItem="f9i-Ql-mCB"
secondAttribute="top" constant="-24" id="eZX-RP-sUs"/>
- <constraint
firstItem="8cX-Go-0bh" firstAttribute="leading" secondItem="L1S-G0-kAE"
secondAttribute="leading" constant="10" id="hRo-i2-MvS"/>
+ <constraint
firstItem="rjL-0q-isR" firstAttribute="top" secondItem="8cX-Go-0bh"
secondAttribute="bottom" constant="9" id="6Zv-RC-wWK"/>
+ <constraint
firstItem="T4W-oT-4At" firstAttribute="centerX" secondItem="sxu-tL-Ztr"
secondAttribute="centerX" id="728-kt-ufE"/>
+ <constraint
firstItem="sxu-tL-Ztr" firstAttribute="leading" secondItem="nTJ-ss-QlS"
secondAttribute="trailing" constant="72" id="7Ki-5Z-S8b"/>
+ <constraint
firstItem="Fbj-Sr-i4z" firstAttribute="centerX" secondItem="sxu-tL-Ztr"
secondAttribute="centerX" id="B2m-C8-ta1"/>
+ <constraint
firstItem="8cX-Go-0bh" firstAttribute="centerX" secondItem="nTJ-ss-QlS"
secondAttribute="centerX" id="LfM-jX-y1I"/>
+ <constraint
firstAttribute="bottom" secondItem="rjL-0q-isR" secondAttribute="bottom"
constant="13" id="Lrv-ou-kcN"/>
+ <constraint
firstItem="sxu-tL-Ztr" firstAttribute="centerY" secondItem="nTJ-ss-QlS"
secondAttribute="centerY" id="PLl-ZS-7aw"/>
+ <constraint
firstItem="T4W-oT-4At" firstAttribute="centerY" secondItem="rjL-0q-isR"
secondAttribute="centerY" id="RjE-QS-KsO"/>
<constraint
firstItem="nTJ-ss-QlS" firstAttribute="leading" secondItem="L1S-G0-kAE"
secondAttribute="leading" constant="34" id="hw4-tY-RXC"/>
<constraint
firstItem="8cX-Go-0bh" firstAttribute="top" secondItem="nTJ-ss-QlS"
secondAttribute="bottom" constant="4" id="oit-FY-gc0"/>
- <constraint
firstAttribute="trailing" secondItem="f9i-Ql-mCB" secondAttribute="trailing"
constant="10" id="rGx-6J-gH4"/>
- <constraint
firstItem="f9i-Ql-mCB" firstAttribute="top" secondItem="8cX-Go-0bh"
secondAttribute="bottom" constant="9" id="rOG-sZ-pgI"/>
- <constraint
firstAttribute="trailing" secondItem="nTJ-ss-QlS" secondAttribute="trailing"
constant="34" id="ruG-mu-TTd"/>
- <constraint
firstItem="f9i-Ql-mCB" firstAttribute="leading" secondItem="L1S-G0-kAE"
secondAttribute="leading" constant="10" id="thK-bH-a3q"/>
+ <constraint
firstItem="rjL-0q-isR" firstAttribute="centerX" secondItem="nTJ-ss-QlS"
secondAttribute="centerX" id="uBH-KL-Id5"/>
+ <constraint
firstAttribute="trailing" secondItem="sxu-tL-Ztr" secondAttribute="trailing"
constant="32" id="uPa-lj-qaE"/>
+ <constraint
firstItem="sxu-tL-Ztr" firstAttribute="top" secondItem="nTJ-ss-QlS"
secondAttribute="top" id="unt-eX-rJ4"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstItem="L1S-G0-kAE"
firstAttribute="leading" relation="greaterThanOrEqual" secondItem="209-XL-dUD"
secondAttribute="leading" constant="10" id="3r6-Nx-9LO"/>
- <constraint firstItem="L1S-G0-kAE"
firstAttribute="top" secondItem="rjL-0q-isR" secondAttribute="bottom"
constant="15" id="LbX-hj-NJy"/>
- <constraint firstItem="rjL-0q-isR"
firstAttribute="leading" secondItem="209-XL-dUD" secondAttribute="leading"
constant="10" id="MNF-lI-670"/>
+ <constraint firstItem="L1S-G0-kAE"
firstAttribute="top" secondItem="fI0-dm-MVt" secondAttribute="bottom"
constant="14" id="LbX-hj-NJy"/>
<constraint firstAttribute="trailing"
secondItem="fI0-dm-MVt" secondAttribute="trailing" constant="10"
id="OJI-Rf-3G1"/>
+ <constraint firstItem="fI0-dm-MVt"
firstAttribute="top" secondItem="209-XL-dUD" secondAttribute="top" constant="6"
id="T4t-VG-iF4"/>
<constraint firstAttribute="bottom"
secondItem="L1S-G0-kAE" secondAttribute="bottom" id="cKC-Jc-Ljo"/>
<constraint firstItem="L1S-G0-kAE"
firstAttribute="centerX" secondItem="209-XL-dUD" secondAttribute="centerX"
id="coc-Mz-9PD"/>
- <constraint firstItem="rjL-0q-isR"
firstAttribute="top" secondItem="209-XL-dUD" secondAttribute="top" constant="6"
id="ecd-Pr-3ZQ"/>
- <constraint firstItem="fI0-dm-MVt"
firstAttribute="leading" relation="greaterThanOrEqual" secondItem="rjL-0q-isR"
secondAttribute="trailing" constant="10" id="ita-Ge-bQL"/>
- <constraint firstItem="rjL-0q-isR"
firstAttribute="centerY" secondItem="fI0-dm-MVt" secondAttribute="centerY"
id="lPZ-lq-8OT"/>
<constraint firstAttribute="trailing"
relation="greaterThanOrEqual" secondItem="L1S-G0-kAE"
secondAttribute="trailing" constant="10" id="qFf-QN-rga"/>
</constraints>
</view>
=====================================
modules/gui/macosx/panels/VLCAudioEffectsWindowController.h
=====================================
@@ -118,11 +118,13 @@
/* Advanced */
@property (readwrite, weak) IBOutlet NSView *advancedView;
-@property (readwrite, weak) IBOutlet NSButton *advancedEnableCheckbox;
+@property (readwrite, weak) IBOutlet NSButton *advancedEnablePitchCheckBox;
+@property (readwrite, weak) IBOutlet NSButton *advancedEnableStereoPanCheckBox;
@property (readwrite, weak) IBOutlet NSButton *advancedResetButton;
@property (readwrite, weak) IBOutlet NSSlider *advancedPitchSlider;
@property (readwrite, weak) IBOutlet NSTextField *advancedPitchTextField;
-@property (readwrite, weak) IBOutlet NSTextField *advancedPitchLabel;
+@property (readwrite, weak) IBOutlet NSSlider *advancedStereoPanSlider;
+@property (readwrite, weak) IBOutlet NSTextField *advancedStereoPanTextField;
/* generic */
- (IBAction)profileSelectorAction:(id)sender;
@@ -157,7 +159,9 @@
/* Advanced */
- (IBAction)resetAdvancedValues:(id)sender;
-- (IBAction)advancedEnable:(id)sender;
-- (IBAction)advancedSliderUpdated:(id)sender;
+- (IBAction)advancedPitchSliderUpdated:(id)sender;
+- (IBAction)advancedStereoPanSliderUpdated:(id)sender;
+- (IBAction)advancedEnablePitchAction:(id)sender;
+- (IBAction)advancedEnableStereoPanAction:(id)sender;
@end
=====================================
modules/gui/macosx/panels/VLCAudioEffectsWindowController.m
=====================================
@@ -50,6 +50,12 @@ NSString *VLCAudioEffectsEqualizerProfileNamesKey =
@"EQNames";
NSString *VLCAudioEffectsProfilesKey = @"AudioEffectProfiles";
NSString *VLCAudioEffectsProfileNamesKey = @"AudioEffectProfileNames";
+static inline void enableTextField(NSTextField *const __unsafe_unretained
textField,
+ const BOOL enable)
+{
+ [textField setTextColor:enable ? [NSColor controlTextColor] : [NSColor
disabledControlTextColor]];
+}
+
@interface VLCAudioEffectsWindowController ()
{
VLCPlayerController *_playerController;
@@ -104,8 +110,8 @@ NSString *VLCAudioEffectsProfileNamesKey =
@"AudioEffectProfileNames";
+ (NSString *)defaultProfileString
{
- return [NSString
stringWithFormat:@"ZmxhdA==;;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%i;%f",
- .0,25.,100.,-11.,8.,2.5,7.,.85,1.,.4,.5,.5,2.,0,0.25f];
+ return [NSString
stringWithFormat:@"ZmxhdA==;;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%i;%f;%f",
+ .0,25.,100.,-11.,8.,2.5,7.,.85,1.,.4,.5,.5,2.,0,0.0,0.5];
}
- (id)init
@@ -161,6 +167,7 @@ NSString *VLCAudioEffectsProfileNamesKey =
@"AudioEffectProfileNames";
aout_EnableFilter(p_aout, "normvol", false);
aout_EnableFilter(p_aout, "karaoke", false);
aout_EnableFilter(p_aout, "scaletempo_pitch", false);
+ aout_EnableFilter(p_aout, "stereo_pan", false);
/* fetch preset */
NSString *profileString;
@@ -197,16 +204,13 @@ NSString *VLCAudioEffectsProfileNamesKey =
@"AudioEffectProfileNames";
var_SetFloat(p_aout, "norm-max-level", [[items objectAtIndex:14]
floatValue]);
var_SetBool(p_aout, "equalizer-2pass", (BOOL)[[items objectAtIndex:15]
intValue]);
- // The old version of the defaults data contains 16 members (without
pitch).
+ // The old version of the defaults data contains 16 members (without pitch
and pan).
// These values are used above.
// In case the user updates VLC, this check handles the 1 time case that
the data
// is still in the old format, and sets the pitch value to the default,
otherwise
// it loads normally the saved pitch value.
- if (likely(items.count >= 17)) {
- var_SetFloat(p_aout, "pitch-shift", [[items objectAtIndex:16]
floatValue]);
- } else {
- var_SetFloat(p_aout, "pitch-shift", 0.25f);
- }
+ var_SetFloat(p_aout, "pitch-shift", items.count >= 17 ? [[items
objectAtIndex:16] floatValue] : 0.0f);
+ var_SetFloat(p_aout, "pan-control", items.count >= 18 ? [[items
objectAtIndex:17] floatValue] : 0.5f);
var_SetString(p_aout, "equalizer-bands", [[[defaults
objectForKey:VLCAudioEffectsEqualizerValuesKey] objectAtIndex:presetIndex]
UTF8String]);
var_SetFloat(p_aout, "equalizer-preamp", [[[defaults
objectForKey:VLCAudioEffectsEqualizerPreampValuesKey]
objectAtIndex:presetIndex] floatValue]);
@@ -288,9 +292,9 @@ NSString *VLCAudioEffectsProfileNamesKey =
@"AudioEffectProfileNames";
"thereby widening the stereo
effect.")];
/* Advanced */
- [_advancedEnableCheckbox setTitle:_NS("Enable")];
[_advancedResetButton setTitle:_NS("Reset")];
- [_advancedPitchLabel setStringValue:_NS("Adjust pitch")];
+ [_advancedEnablePitchCheckBox setStringValue:_NS("Adjust pitch")];
+ [_advancedEnableStereoPanCheckBox setStringValue:_NS("Adjust pan")];
/* generic */
@@ -393,7 +397,7 @@ NSString *VLCAudioEffectsProfileNamesKey =
@"AudioEffectProfileNames";
if (!p_aout)
return nil;
- return [NSString
stringWithFormat:@"%@;%@;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%i;%f",
+ return [NSString
stringWithFormat:@"%@;%@;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%i;%f;%f",
B64EncAndFree(var_GetNonEmptyString(p_aout,
"equalizer-preset")),
B64EncAndFree(var_InheritString(p_aout, "audio-filter")),
var_InheritFloat(p_aout, "compressor-rms-peak"),
@@ -410,7 +414,8 @@ NSString *VLCAudioEffectsProfileNamesKey =
@"AudioEffectProfileNames";
var_InheritFloat(p_aout, "spatializer-damp"),
var_InheritFloat(p_aout, "norm-max-level"),
var_InheritBool(p_aout, "equalizer-2pass"),
- var_InheritFloat(p_aout, "pitch-shift")];
+ var_InheritFloat(p_aout, "pitch-shift"),
+ var_InheritFloat(p_aout, "pan-control")];
}
- (void)saveCurrentProfile
@@ -1220,8 +1225,9 @@ static bool GetEqualizerStatus(intf_thread_t
*p_custom_intf,
#pragma mark Advanced
- (void)resetAdvanced
{
- BOOL bEnable_advanced = NO;
- char *psz_afilters = NULL;
+ BOOL bEnable_pitch = NO;
+ BOOL bEnable_pan = NO;
+ char *psz_afilters = NULL;
audio_output_t *p_aout = [_playerController mainAudioOutput];
if (!p_aout)
@@ -1229,15 +1235,28 @@ static bool GetEqualizerStatus(intf_thread_t
*p_custom_intf,
psz_afilters = var_InheritString(p_aout, "audio-filter");
if (psz_afilters) {
- bEnable_advanced = strstr(psz_afilters, "scaletempo_pitch") != NULL;
+ bEnable_pitch = strstr(psz_afilters, "scaletempo_pitch") != NULL;
+ bEnable_pan = strstr(psz_afilters, "stereo_pan") != NULL;
+
free(psz_afilters);
}
+
+ [_advancedEnablePitchCheckBox setState:(bEnable_pitch ?
NSControlStateValueOn : NSControlStateValueOff)];
+ [_advancedPitchSlider setEnabled:bEnable_pitch];
+ enableTextField(_advancedPitchTextField, bEnable_pitch);
+
+ const float pitchValue = var_CreateGetFloat(p_aout, "pitch-shift");
+ [_advancedPitchSlider setFloatValue:pitchValue * 4.0f];
+ [_advancedPitchTextField setStringValue:[NSString
localizedStringWithFormat:@"%1.1f semitones", pitchValue]];
+
- [_advancedView enableSubviews:bEnable_advanced];
- [_advancedEnableCheckbox setState:(bEnable_advanced ? NSOnState :
NSOffState)];
+ [_advancedEnableStereoPanCheckBox setState:(bEnable_pan ?
NSControlStateValueOn : NSControlStateValueOff)];
+ [_advancedStereoPanSlider setEnabled:bEnable_pan];
+ enableTextField(_advancedStereoPanTextField, bEnable_pan);
- [_advancedPitchSlider setFloatValue: var_CreateGetFloat(p_aout,
"pitch-shift")];
- [_advancedPitchTextField setStringValue:[NSString
localizedStringWithFormat:@"%1.1f semitones", [_advancedPitchSlider
floatValue]]];
+ const float panValue = var_CreateGetFloat(p_aout, "pan-control");
+ [_advancedStereoPanSlider setFloatValue: panValue * 10.0f];
+ [_advancedStereoPanTextField setStringValue:[NSString
localizedStringWithFormat:@"%1.1f", panValue]];
aout_Release(p_aout);
}
@@ -1246,38 +1265,58 @@ static bool GetEqualizerStatus(intf_thread_t
*p_custom_intf,
{
audio_output_t *p_aout = [_playerController mainAudioOutput];
if (p_aout) {
- var_SetFloat(p_aout, "pitch-shift", 0.25f);
+ var_SetFloat(p_aout, "pitch-shift", 0.0f);
+ var_SetFloat(p_aout, "pan-control", 0.5f);
aout_Release(p_aout);
}
[self resetAdvanced];
}
-- (IBAction)advancedSliderUpdated:(id)sender
+- (IBAction)advancedPitchSliderUpdated:(id)sender
{
- char *psz_property = nil;
- float f_value = [sender floatValue];
+ char *const psz_property = "pitch-shift";
+ const float f_value = [sender floatValue] * 0.25; // Scale
- if (sender == _advancedPitchSlider)
- psz_property = "pitch-shift";
+ audio_output_t *p_aout = [_playerController mainAudioOutput];
+ if (p_aout) {
+ var_SetFloat(p_aout, psz_property, f_value);
+ aout_Release(p_aout);
+ }
- assert(psz_property);
+ [_advancedPitchTextField setStringValue:[NSString
localizedStringWithFormat:@"%1.1f semitones", f_value]];
+}
+- (IBAction)advancedStereoPanSliderUpdated:(id)sender
+{
+ char *const psz_property = "pan-control";
+ const float f_value = [sender floatValue] * 0.1; // Scale
+
audio_output_t *p_aout = [_playerController mainAudioOutput];
if (p_aout) {
var_SetFloat(p_aout, psz_property, f_value);
aout_Release(p_aout);
}
-
- if (sender == _advancedPitchSlider)
- [_advancedPitchTextField setStringValue:[NSString
localizedStringWithFormat:@"%1.1f semitones", f_value]];
+
+ [_advancedStereoPanTextField setStringValue:[NSString
localizedStringWithFormat:@"%1.1f", f_value]];
}
-- (IBAction)advancedEnable:(id)sender
+- (IBAction)advancedEnablePitchAction:(id)sender
{
- [_advancedView enableSubviews:[sender state]];
- [_playerController enableAudioFilterWithName:@"scaletempo_pitch"
state:[sender state]];
+ const BOOL newState = _advancedEnablePitchCheckBox.state ==
NSControlStateValueOn;
+
+ enableTextField(_advancedPitchTextField, newState);
+ [_advancedPitchSlider setEnabled:newState];
+ [_playerController enableAudioFilterWithName:@"scaletempo_pitch"
state:newState];
}
+- (IBAction)advancedEnableStereoPanAction:(id)sender
+{
+ const BOOL newState = _advancedEnableStereoPanCheckBox.state ==
NSControlStateValueOn;
+
+ enableTextField(_advancedStereoPanTextField, newState);
+ [_advancedStereoPanSlider setEnabled:newState];
+ [_playerController enableAudioFilterWithName:@"stereo_pan" state:newState];
+}
@end
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/commit/6f47656dfe7a1ef77c01abba09d401420a443bde
--
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/commit/6f47656dfe7a1ef77c01abba09d401420a443bde
You're receiving this email because of your account on code.videolan.org.
_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits