diff --git a/EarTrumpet/Addons/EarTrumpet.Actions/AddonResources.xaml b/EarTrumpet/Addons/EarTrumpet.Actions/AddonResources.xaml index 482df820d..17a97f562 100644 --- a/EarTrumpet/Addons/EarTrumpet.Actions/AddonResources.xaml +++ b/EarTrumpet/Addons/EarTrumpet.Actions/AddonResources.xaml @@ -317,8 +317,9 @@ vol, + SetVolumeKind.Increment => (prevVol + vol).Bound(0, 1), + SetVolumeKind.Decrement => (prevVol - vol).Bound(0, 1), + _ => throw new ArgumentException("Invalid volume action.") + }); + } + break; + case VolumeUnit.Decibel: + { + var vol = (float)part.Volume; + var prevVol = stream.GetVolumeLogarithmic(); + stream.SetVolumeLogarithmic(action switch { + SetVolumeKind.Set => vol, + SetVolumeKind.Increment => (prevVol + vol).Bound(App.Settings.LogarithmicVolumeMinDb, 0), + SetVolumeKind.Decrement => (prevVol - vol).Bound(App.Settings.LogarithmicVolumeMinDb, 0), + _ => throw new ArgumentException("Invalid volume action.") + }); + } + break; + default: + throw new ArgumentException("Invalid volume unit."); + } + } + catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED)) + { + // Expected in some cases. } } } diff --git a/EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Actions.cs b/EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Actions.cs index 8986e4596..d02ff836d 100644 --- a/EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Actions.cs +++ b/EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Actions.cs @@ -24,6 +24,7 @@ public class SetAppVolumeAction : BaseAction, IPartWithVolume, IPartWithDevice, public AppRef App { get; set; } public SetVolumeKind Option { get; set; } public double Volume { get; set; } + public VolumeUnit Unit { get; set; } } public class SetDefaultDeviceAction : BaseAction, IPartWithDevice @@ -42,6 +43,7 @@ public class SetDeviceVolumeAction : BaseAction, IPartWithDevice, IPartWithVolum public Device Device { get; set; } public SetVolumeKind Option { get; set; } public double Volume { get; set; } + public VolumeUnit Unit { get; set; } } public class SetVariableAction : BaseAction, IPartWithText diff --git a/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetAppVolumeActionViewModel.cs b/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetAppVolumeActionViewModel.cs index b35cc0434..3cb687c4a 100644 --- a/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetAppVolumeActionViewModel.cs +++ b/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetAppVolumeActionViewModel.cs @@ -1,11 +1,14 @@ -using EarTrumpet.Actions.DataModel.Serialization; -using EarTrumpet.Actions.DataModel.Enum; +using EarTrumpet.Actions.DataModel.Enum; +using EarTrumpet.Actions.DataModel.Serialization; +using EarTrumpet.Extensions; +using System; namespace EarTrumpet.Actions.ViewModel.Actions; internal class SetAppVolumeActionViewModel : PartViewModel { public OptionViewModel Option { get; } + public OptionViewModel Unit { get; } public DeviceListViewModel Device { get; } public AppListViewModel App { get; } public VolumeViewModel Volume { get; } @@ -17,14 +20,39 @@ public SetAppVolumeActionViewModel(SetAppVolumeAction action) : base(action) _action = action; Option = new OptionViewModel(action, nameof(action.Option)); + Unit = new OptionViewModel(action, nameof(action.Unit)); App = new AppListViewModel(action, AppListViewModel.AppKind.EveryApp | AppListViewModel.AppKind.ForegroundApp); Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.DefaultPlayback); Volume = new VolumeViewModel(action); Attach(Option); + Attach(Unit); Attach(App); Attach(Device); Attach(Volume); + + Option.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(OptionViewModel.Selected)) + { + Volume.UpdateRange(); + Volume.Volume = 0; + } + }; + + Unit.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(OptionViewModel.Selected)) + { + Volume.UpdateRange(); + Volume.Volume = (VolumeUnit)Unit.Selected.Value switch + { + VolumeUnit.Percentage => Math.Round(Volume.Volume.LogToLinear() * 100), + VolumeUnit.Decibel => Math.Round((Volume.Volume / 100).LinearToLog(), 1), + _ => throw new ArgumentException("Invalid volume unit."), + }; + } + }; } public override string LinkText diff --git a/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDeviceVolumeActionViewModel.cs b/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDeviceVolumeActionViewModel.cs index d8e54c952..2e8a12271 100644 --- a/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDeviceVolumeActionViewModel.cs +++ b/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDeviceVolumeActionViewModel.cs @@ -1,11 +1,14 @@ using EarTrumpet.Actions.DataModel.Enum; using EarTrumpet.Actions.DataModel.Serialization; +using EarTrumpet.Extensions; +using System; namespace EarTrumpet.Actions.ViewModel.Actions; internal class SetDeviceVolumeActionViewModel : PartViewModel { public OptionViewModel Option { get; } + public OptionViewModel Unit { get; } public DeviceListViewModel Device { get; } public VolumeViewModel Volume { get; } @@ -15,12 +18,37 @@ public SetDeviceVolumeActionViewModel(SetDeviceVolumeAction action) : base(actio { _action = action; Option = new OptionViewModel(action, nameof(action.Option)); + Unit = new OptionViewModel(action, nameof(action.Unit)); Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.Recording | DeviceListViewModel.DeviceListKind.DefaultPlayback); Volume = new VolumeViewModel(action); Attach(Option); + Attach(Unit); Attach(Device); Attach(Volume); + + Option.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(OptionViewModel.Selected)) + { + Volume.UpdateRange(); + Volume.Volume = 0; + } + }; + + Unit.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(OptionViewModel.Selected)) + { + Volume.UpdateRange(); + Volume.Volume = (VolumeUnit)Unit.Selected.Value switch + { + VolumeUnit.Percentage => 100, + VolumeUnit.Decibel => 0, + _ => throw new ArgumentException("Invalid volume unit."), + }; + } + }; } public override string LinkText diff --git a/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/VolumeViewModel.cs b/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/VolumeViewModel.cs index ecc8ce8b2..25992c8e8 100644 --- a/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/VolumeViewModel.cs +++ b/EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/VolumeViewModel.cs @@ -1,19 +1,51 @@ using EarTrumpet.Actions.DataModel; +using EarTrumpet.Actions.DataModel.Enum; +using System; namespace EarTrumpet.Actions.ViewModel; public class VolumeViewModel : BindableBase { - public int Volume + public double Volume { - get => (int)_part.Volume; + get => _part.Volume; set { - _part.Volume = value; + _part.Volume = Math.Round(value, _part.Unit switch + { + VolumeUnit.Percentage => 0, + VolumeUnit.Decibel => 1, + _ => throw new InvalidOperationException("Invalid volume unit."), + }); RaisePropertyChanged(nameof(Volume)); } } + public double Maximum => _part.Unit switch + { + VolumeUnit.Percentage => 100, + VolumeUnit.Decibel => _part.Option switch + { + SetVolumeKind.Set => 0, + SetVolumeKind.Increment => -App.Settings.LogarithmicVolumeMinDb, + SetVolumeKind.Decrement => -App.Settings.LogarithmicVolumeMinDb, + _ => throw new InvalidOperationException("Invalid action."), + }, + _ => throw new InvalidOperationException("Invalid volume unit."), + }; + public double Minimum => _part.Unit switch + { + VolumeUnit.Percentage => 0, + VolumeUnit.Decibel => _part.Option switch + { + SetVolumeKind.Set => App.Settings.LogarithmicVolumeMinDb, + SetVolumeKind.Increment => 0, + SetVolumeKind.Decrement => 0, + _ => throw new InvalidOperationException("Invalid action."), + }, + _ => throw new InvalidOperationException("Invalid volume unit."), + }; + private IPartWithVolume _part; public VolumeViewModel(IPartWithVolume part) { @@ -22,6 +54,12 @@ public VolumeViewModel(IPartWithVolume part) public override string ToString() { - return $"{Volume}%"; + return $"{Volume}"; + } + + public void UpdateRange() + { + RaisePropertyChanged(nameof(Maximum)); + RaisePropertyChanged(nameof(Minimum)); } } diff --git a/EarTrumpet/DataModel/Audio/IStreamWithVolumeControl.cs b/EarTrumpet/DataModel/Audio/IStreamWithVolumeControl.cs index 699e859b2..3ff852187 100644 --- a/EarTrumpet/DataModel/Audio/IStreamWithVolumeControl.cs +++ b/EarTrumpet/DataModel/Audio/IStreamWithVolumeControl.cs @@ -9,4 +9,10 @@ public interface IStreamWithVolumeControl : INotifyPropertyChanged float Volume { get; set; } float PeakValue1 { get; } float PeakValue2 { get; } + + // Unlike Volume property, these methods are independent of app unit settings. + float GetVolumeScalar(); + float GetVolumeLogarithmic(); + void SetVolumeScalar(float value); + void SetVolumeLogarithmic(float value); } diff --git a/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDevice.cs b/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDevice.cs index 7aa9dbccc..ec57059f7 100644 --- a/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDevice.cs +++ b/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDevice.cs @@ -125,6 +125,9 @@ public unsafe void OnNotify(AUDIO_VOLUME_NOTIFICATION_DATA* pNotify) })); } + /// + /// NOTICE: This value can be either scalar or logarithmic based on App.Settings.UseLogarithmicVolume + /// public float Volume { get => _volume; @@ -134,18 +137,11 @@ public float Volume { if (App.Settings.UseLogarithmicVolume) { - value = value.Bound(App.Settings.LogarithmicVolumeMinDb, 0); - value = value.Bound(_deviceVolumeMinDb, _deviceVolumeMaxDb); - _volume = value; - _deviceVolume.SetMasterVolumeLevel(value, Guid.Empty); - IsMuted = value <= App.Settings.LogarithmicVolumeMinDb; + SetVolumeLogarithmic(value); } else { - value = value.Bound(0, 1f); - _volume = value; - _deviceVolume.SetMasterVolumeLevelScalar(value, Guid.Empty); - IsMuted = _volume.ToVolumeInt() == 0; + SetVolumeScalar(value); } } catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED)) @@ -202,6 +198,35 @@ public IAudioDeviceManager Parent public IEnumerable Channels => _channels.Channels; + public float GetVolumeScalar() + { + _deviceVolume.GetMasterVolumeLevelScalar(out var volume); + return volume; + } + + public float GetVolumeLogarithmic() + { + _deviceVolume.GetMasterVolumeLevel(out var volume); + return volume; + } + + public void SetVolumeScalar(float value) + { + value = value.Bound(0, 1f); + _volume = value; + _deviceVolume.SetMasterVolumeLevelScalar(value, Guid.Empty); + IsMuted = _volume.ToVolumeInt() == 0; + } + + public void SetVolumeLogarithmic(float value) + { + value = value.Bound(App.Settings.LogarithmicVolumeMinDb, 0); + value = value.Bound(_deviceVolumeMinDb, _deviceVolumeMaxDb); + _volume = value; + _deviceVolume.SetMasterVolumeLevel(value, Guid.Empty); + IsMuted = value <= App.Settings.LogarithmicVolumeMinDb; + } + public void UpdatePeakValue() { var newValues = Helpers.ReadPeakValues(_meter); diff --git a/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSession.cs b/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSession.cs index 317f06ace..7cb30623a 100644 --- a/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSession.cs +++ b/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSession.cs @@ -32,29 +32,25 @@ public IAudioDevice Parent } } + /// + /// NOTICE: This value can be either scalar or logarithmic based on App.Settings.UseLogarithmicVolume + /// public float Volume { get => App.Settings.UseLogarithmicVolume - ? _volume.LinearToLog() - : _volume; + ? GetVolumeLogarithmic() + : GetVolumeScalar(); set { try { if (App.Settings.UseLogarithmicVolume) { - value = value.Bound(App.Settings.LogarithmicVolumeMinDb, 0); - // We must convert manually here because sessions use linear volume. - _simpleVolume.SetMasterVolume(value.LogToLinear(), Guid.Empty); - _volume = value; - IsMuted = value <= App.Settings.LogarithmicVolumeMinDb; + SetVolumeLogarithmic(value); } else { - value = value.Bound(0, 1f); - _simpleVolume.SetMasterVolume(value, Guid.Empty); - _volume = value; - IsMuted = _volume.ToVolumeInt() == 0; + SetVolumeScalar(value); } } catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED)) @@ -220,6 +216,26 @@ private void UseLogarithmicVolumeChangedHandler(object sender, EventArgs e) } } + public float GetVolumeScalar() => _volume; + public float GetVolumeLogarithmic() => _volume.LinearToLog(); + + public void SetVolumeScalar(float value) + { + value = value.Bound(0, 1f); + _simpleVolume.SetMasterVolume(value, Guid.Empty); + _volume = value; + IsMuted = _volume.ToVolumeInt() == 0; + } + + public void SetVolumeLogarithmic(float value) + { + value = value.Bound(App.Settings.LogarithmicVolumeMinDb, 0); + // We must convert manually here because sessions use linear volume. + _simpleVolume.SetMasterVolume(value.LogToLinear(), Guid.Empty); + _volume = value; + IsMuted = value <= App.Settings.LogarithmicVolumeMinDb; + } + public void Hide() { Trace.WriteLine($"AudioDeviceSession MoveFromDevice {ExeName} {Id}"); diff --git a/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionGroup.cs b/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionGroup.cs index abcb00fb9..bb9fdee3d 100644 --- a/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionGroup.cs +++ b/EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionGroup.cs @@ -111,6 +111,25 @@ public float Volume public string PackageInstallPath => _sessions.FirstOrDefault()?.PackageInstallPath; + public float GetVolumeScalar() => _sessions.Count > 0 ? _sessions[0].GetVolumeScalar() : 1; + public float GetVolumeLogarithmic() => _sessions.Count > 0 ? _sessions[0].GetVolumeLogarithmic() : 1; + + public void SetVolumeScalar(float value) + { + foreach (var session in _sessions) + { + session.SetVolumeScalar(value); + } + } + + public void SetVolumeLogarithmic(float value) + { + foreach (var session in _sessions) + { + session.SetVolumeLogarithmic(value); + } + } + public void Hide() { foreach (var session in _sessions.ToArray()) diff --git a/EarTrumpet/Extensions/FloatExtensions.cs b/EarTrumpet/Extensions/FloatExtensions.cs index cb421615e..f2d340e3b 100644 --- a/EarTrumpet/Extensions/FloatExtensions.cs +++ b/EarTrumpet/Extensions/FloatExtensions.cs @@ -4,23 +4,22 @@ namespace EarTrumpet.Extensions; public static class FloatExtensions { - public static int ToVolumeInt(this float val) - { - return Convert.ToInt32(Math.Round(val * 100, MidpointRounding.AwayFromZero)); - } + public static int ToVolumeInt(this float val) => ToVolumeInt((double)val); + public static int ToVolumeInt(this double val) => Convert.ToInt32(Math.Round(val * 100, MidpointRounding.AwayFromZero)); - public static float Bound(this float val, float min, float max) - { - return Math.Max(min, Math.Min(max, val)); - } + public static float Bound(this float val, float min, float max) => (float)Bound((double)val, min, max); + public static double Bound(this double val, double min, double max) => Math.Max(min, Math.Min(max, val)); - public static float LinearToLog(this float val) => (float)(20 * Math.Log10(val)); + public static float LinearToLog(this float val) => (float)LinearToLog((double)val); + public static double LinearToLog(this double val) => (double)(20 * Math.Log10(val)); - public static float LinearToLogNormalized(this float val) => + public static float LinearToLogNormalized(this float val) => (float)LinearToLogNormalized((double)val); + public static double LinearToLogNormalized(this double val) => val == 0 ? 0 - : ((float)(20 * Math.Log10(val) / -App.Settings.LogarithmicVolumeMinDb + 1)) + : ((double)(20 * Math.Log10(val) / -App.Settings.LogarithmicVolumeMinDb + 1)) .Bound(0, 1f); - public static float LogToLinear(this float val) => (float)Math.Pow(10, val / 20); + public static float LogToLinear(this float val) => (float)LogToLinear((double)val); + public static double LogToLinear(this double val) => (double)Math.Pow(10, val / 20); } diff --git a/EarTrumpet/Properties/Resources.Designer.cs b/EarTrumpet/Properties/Resources.Designer.cs index 35293d644..e3aef0abd 100644 --- a/EarTrumpet/Properties/Resources.Designer.cs +++ b/EarTrumpet/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace EarTrumpet.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -1280,7 +1280,7 @@ public static string SetAppVolumeAction_AddText { } /// - /// Looks up a localized string similar to {Option} {App} volume to {Volume} on {Device}. + /// Looks up a localized string similar to {Option} {App} volume to {Volume}​{Unit} on {Device}. /// public static string SetAppVolumeAction_LinkText { get { @@ -1289,7 +1289,7 @@ public static string SetAppVolumeAction_LinkText { } /// - /// Looks up a localized string similar to {Option} {App} volume by {Volume} on {Device}. + /// Looks up a localized string similar to {Option} {App} volume by {Volume}​{Unit} on {Device}. /// public static string SetAppVolumeAction_LinkTextIncrement { get { @@ -1352,7 +1352,7 @@ public static string SetDeviceVolumeAction_AddText { } /// - /// Looks up a localized string similar to {Option} {Device} volume to {Volume}. + /// Looks up a localized string similar to {Option} {Device} volume to {Volume}​{Unit}. /// public static string SetDeviceVolumeAction_LinkText { get { @@ -1361,7 +1361,7 @@ public static string SetDeviceVolumeAction_LinkText { } /// - /// Looks up a localized string similar to {Option} {Device} volume by {Volume}. + /// Looks up a localized string similar to {Option} {Device} volume by {Volume}​{Unit}. /// public static string SetDeviceVolumeAction_LinkTextIncrement { get { @@ -1711,6 +1711,24 @@ public static string VersionText { } } + /// + /// Looks up a localized string similar to dB. + /// + public static string VolumeUnit_Decibel { + get { + return ResourceManager.GetString("VolumeUnit_Decibel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to %. + /// + public static string VolumeUnit_Percentage { + get { + return ResourceManager.GetString("VolumeUnit_Percentage", resourceCulture); + } + } + /// /// Looks up a localized string similar to Learn more. /// diff --git a/EarTrumpet/Properties/Resources.ar-SA.resx b/EarTrumpet/Properties/Resources.ar-SA.resx index b62f085e3..49e123ee5 100644 --- a/EarTrumpet/Properties/Resources.ar-SA.resx +++ b/EarTrumpet/Properties/Resources.ar-SA.resx @@ -516,10 +516,10 @@ تعيين مستوى صوت التطبيق - {Option} {App} حجم {Volume} على {Device} + {Option} {App} حجم {Volume}​{Unit} على {Device} - {Option} {App} حجم {Volume} على {Device} + {Option} {App} حجم {Volume}​{Unit} على {Device} تعيين جهاز التشغيل الافتراضي @@ -540,10 +540,10 @@ ضبط مستوى صوت الجهاز - {Option} {Device} مستوى الصوت إلى {Volume} + {Option} {Device} مستوى الصوت إلى {Volume}​{Unit} - {Option} {Device} مستوى الصوت بواسطة {Volume} + {Option} {Device} مستوى الصوت بواسطة {Volume}​{Unit} تعيين متغير محلي diff --git a/EarTrumpet/Properties/Resources.bs-latn-ba.resx b/EarTrumpet/Properties/Resources.bs-latn-ba.resx index 021b2bb1a..9b72d7266 100644 --- a/EarTrumpet/Properties/Resources.bs-latn-ba.resx +++ b/EarTrumpet/Properties/Resources.bs-latn-ba.resx @@ -516,10 +516,10 @@ Otvoriti [https://eartrumpet.app/jmp/fixfonts] sad? Postavi glasnoću aplikacije - {Option} {App} glasnoća na {Volume} na {Device} + {Option} {App} glasnoća na {Volume}​{Unit} na {Device} - {Option} {App} glasnoća za {Volume} na {Device} + {Option} {App} glasnoća za {Volume}​{Unit} na {Device} Postavi zadani uređaj za reprodukciju @@ -540,10 +540,10 @@ Otvoriti [https://eartrumpet.app/jmp/fixfonts] sad? Postavi glasnoću uređaja - {Option} {Device} glasnoća na {Volume} + {Option} {Device} glasnoća na {Volume}​{Unit} - {Option} {Device} glasnoća za {Volume} + {Option} {Device} glasnoća za {Volume}​{Unit} Postavi lokalnu varijablu diff --git a/EarTrumpet/Properties/Resources.ca-ES.resx b/EarTrumpet/Properties/Resources.ca-ES.resx index 27da0fefe..f0aa3f6f2 100644 --- a/EarTrumpet/Properties/Resources.ca-ES.resx +++ b/EarTrumpet/Properties/Resources.ca-ES.resx @@ -523,10 +523,10 @@ Voleu obrir [https://eartrumpet.app/jmp/fixstartup] per resoldre-ho? Estableix el volum d'una aplicació - {Option} {App} volum a {Volume} a {Device} + {Option} {App} volum a {Volume}​{Unit} a {Device} - {Option} {App} volum per {Volume} a {Device} + {Option} {App} volum per {Volume}​{Unit} a {Device} Estableix el dispositiu de reproducció per defecte @@ -547,10 +547,10 @@ Voleu obrir [https://eartrumpet.app/jmp/fixstartup] per resoldre-ho? Estableix el volum del dispositiu - {Option} {Device} volum a {Volume} + {Option} {Device} volum a {Volume}​{Unit} - {Option} {Device} volum per {Volume} + {Option} {Device} volum per {Volume}​{Unit} Estableix una variable local diff --git a/EarTrumpet/Properties/Resources.cs-CZ.resx b/EarTrumpet/Properties/Resources.cs-CZ.resx index a6a116960..c9937ddcf 100644 --- a/EarTrumpet/Properties/Resources.cs-CZ.resx +++ b/EarTrumpet/Properties/Resources.cs-CZ.resx @@ -516,10 +516,10 @@ Přejete si nyní otevřít [https://eartrumpet.app/jmp/fixfonts]? Nastavit hlasitost aplikace - {Option} {App} hlasitost k {Volume} na {Device} + {Option} {App} hlasitost k {Volume}​{Unit} na {Device} - {Option} {App} hlasitost od {Volume} na {Device} + {Option} {App} hlasitost od {Volume}​{Unit} na {Device} Nastavit výchozí přehrávací zařízení @@ -540,10 +540,10 @@ Přejete si nyní otevřít [https://eartrumpet.app/jmp/fixfonts]? Nastavit hlasitost zařízení - {Option} {Device} hlasitost pro {Volume} + {Option} {Device} hlasitost pro {Volume}​{Unit} - {Option} {Device} hlasitost od {Volume} + {Option} {Device} hlasitost od {Volume}​{Unit} Nastavit místní proměnnou diff --git a/EarTrumpet/Properties/Resources.da-DK.resx b/EarTrumpet/Properties/Resources.da-DK.resx index 421091ddd..c4a65ac41 100644 --- a/EarTrumpet/Properties/Resources.da-DK.resx +++ b/EarTrumpet/Properties/Resources.da-DK.resx @@ -516,10 +516,10 @@ Indstil lydstyrken for en app - {Option} {App} lydstyrke til {Volume} på {Device} + {Option} {App} lydstyrke til {Volume}​{Unit} på {Device} - {Option} {App} lydstyrke med {Volume} på {Device} + {Option} {App} lydstyrke med {Volume}​{Unit} på {Device} Indstil standard afspilningsenhed @@ -540,10 +540,10 @@ Indstil en enheds lydstyrke - {Option} {Device} lydstyrke til {Volume} + {Option} {Device} lydstyrke til {Volume}​{Unit} - {Option} {Device} lydstyrke med {Volume} + {Option} {Device} lydstyrke med {Volume}​{Unit} Angiv lokal variabel diff --git a/EarTrumpet/Properties/Resources.de-DE.resx b/EarTrumpet/Properties/Resources.de-DE.resx index 8bf89ed66..06bc28ca4 100644 --- a/EarTrumpet/Properties/Resources.de-DE.resx +++ b/EarTrumpet/Properties/Resources.de-DE.resx @@ -524,10 +524,10 @@ Möchten Sie [https://eartrumpet.app/jmp/fixfonts] öffnen? Lege das Volumen einer App fest - {Option} {App} Lautstärke zu {Volume} auf {Device} + {Option} {App} Lautstärke zu {Volume}​{Unit} auf {Device} - {Option} {App} Lautstärke von {Volume} auf {Device} + {Option} {App} Lautstärke von {Volume}​{Unit} auf {Device} Lege das Standard-Wiedergabegerät fest @@ -548,10 +548,10 @@ Möchten Sie [https://eartrumpet.app/jmp/fixfonts] öffnen? Gerätelautstärke festlegen - {Option} {Device} Lautstärke zu {Volume} + {Option} {Device} Lautstärke zu {Volume}​{Unit} - {Option} {Device} Lautstärke bis {Volume} + {Option} {Device} Lautstärke bis {Volume}​{Unit} Lokale Variable festlegen diff --git a/EarTrumpet/Properties/Resources.el-GR.resx b/EarTrumpet/Properties/Resources.el-GR.resx index f5eb6c1f2..c3edc0721 100644 --- a/EarTrumpet/Properties/Resources.el-GR.resx +++ b/EarTrumpet/Properties/Resources.el-GR.resx @@ -524,10 +524,10 @@ Ορισμός έντασης ήχου μιας εφαρμογής - {Option} {App} ένταση στο {Volume} στο {Device} + {Option} {App} ένταση στο {Volume}​{Unit} στο {Device} - {Option} {App} ένταση στο {Volume} στο {Device} + {Option} {App} ένταση στο {Volume}​{Unit} στο {Device} Ορισμός της προεπιλεγμένης συσκευής αναπαραγωγής @@ -548,10 +548,10 @@ Ορισμός έντασης συσκευής - {Option} {Device} ένταση στο {Volume} + {Option} {Device} ένταση στο {Volume}​{Unit} - {Option} {Device} ένταση στο {Volume} + {Option} {Device} ένταση στο {Volume}​{Unit} Ορισμός μιας τοπικής μεταβλητής diff --git a/EarTrumpet/Properties/Resources.es-ES.resx b/EarTrumpet/Properties/Resources.es-ES.resx index 08a69d9c5..23381128c 100644 --- a/EarTrumpet/Properties/Resources.es-ES.resx +++ b/EarTrumpet/Properties/Resources.es-ES.resx @@ -524,10 +524,10 @@ Deseas abrir [https://eartrumpet.app/jmp/fixfonts] ahora? Establece el volumen de una aplicación - {Option} {App} volumen a {Volume} en {Device} + {Option} {App} volumen a {Volume}​{Unit} en {Device} - {Option} {App} volumen por {Volume} en {Device} + {Option} {App} volumen por {Volume}​{Unit} en {Device} Poner por predeterminado la reproducción @@ -548,10 +548,10 @@ Deseas abrir [https://eartrumpet.app/jmp/fixfonts] ahora? Establecer el volumen de un dispositivo - {Option} {Device} volumen a {Volume} + {Option} {Device} volumen a {Volume}​{Unit} - {Option} {Device} volumen a {Volume} + {Option} {Device} volumen a {Volume}​{Unit} Establecer una variable local diff --git a/EarTrumpet/Properties/Resources.fi-FI.resx b/EarTrumpet/Properties/Resources.fi-FI.resx index ee9d758b1..43e445675 100644 --- a/EarTrumpet/Properties/Resources.fi-FI.resx +++ b/EarTrumpet/Properties/Resources.fi-FI.resx @@ -518,10 +518,10 @@ Avaa [https://eartrumpet.app/jmp/fixfonts] nyt? Aseta sovelluksen äänenvoimakkuus - {Option} {App} aseta äänenvoimakkuus {Volume} laitteella {Device} + {Option} {App} aseta äänenvoimakkuus {Volume}​{Unit} laitteella {Device} - {Option} {App} äänenvoimakkuus {Volume} laitteelta {Device} + {Option} {App} äänenvoimakkuus {Volume}​{Unit} laitteelta {Device} Aseta oletussoittolaite @@ -542,10 +542,10 @@ Avaa [https://eartrumpet.app/jmp/fixfonts] nyt? Aseta laitteen äänenvoimakkuudeksi - {Option} {Device} äänenvoimakkuus {Volume} saakka + {Option} {Device} äänenvoimakkuus {Volume}​{Unit} saakka - {Option} {Device} äänenvoimakkuutta {Volume} + {Option} {Device} äänenvoimakkuutta {Volume}​{Unit} Aseta paikallinen muuttuja diff --git a/EarTrumpet/Properties/Resources.fr-FR.resx b/EarTrumpet/Properties/Resources.fr-FR.resx index 10d9041dc..025dd2d38 100644 --- a/EarTrumpet/Properties/Resources.fr-FR.resx +++ b/EarTrumpet/Properties/Resources.fr-FR.resx @@ -516,10 +516,10 @@ Voulez-vous ouvrir [https://eartrumpet.app/jmp/fixfonts] maintenant? Définir le volume d'une application - Volume de {Volume} sur {Device} pour {Option} {App} + Volume de {Volume}​{Unit} sur {Device} pour {Option} {App} - {Option} {App} volume pour {Volume} sur {Device} + {Option} {App} volume pour {Volume}​{Unit} sur {Device} Définir le périphérique de lecteur par défaut @@ -540,10 +540,10 @@ Voulez-vous ouvrir [https://eartrumpet.app/jmp/fixfonts] maintenant? Définir le volume d'un périphérique - {Option} {Device} volume à {Volume} + {Option} {Device} volume à {Volume}​{Unit} - {Option} volume de {Device} par {Volume} + {Option} volume de {Device} par {Volume}​{Unit} Définir une variable locale diff --git a/EarTrumpet/Properties/Resources.he-IL.resx b/EarTrumpet/Properties/Resources.he-IL.resx index 4b9cb09cf..95a791336 100644 --- a/EarTrumpet/Properties/Resources.he-IL.resx +++ b/EarTrumpet/Properties/Resources.he-IL.resx @@ -524,10 +524,10 @@ הגדר את עוצמת השמע של אפליקציה - {Option} {App} עוצמה ל{Volume} על {Device} + {Option} {App} עוצמה ל{Unit}{Volume} על {Device} - {Option} {App} עוצמה על ידי{Volume} על {Device} + {Option} {App} עוצמה על ידי{Unit}{Volume} על {Device} הגדר את מכשיר ההשמעה ברירת המחדל @@ -548,10 +548,10 @@ הגדר עוצמת קול למכשיר - {Option} {Device} עוצמת קול ל{Volume} + {Option} {Device} עוצמת קול ל{Unit}{Volume} - {Option} {Device} עוצמת קול על ידי {Volume} + {Option} {Device} עוצמת קול על ידי {Unit}{Volume} הגדר משתנה מקומי (לוקאלי) diff --git a/EarTrumpet/Properties/Resources.hr-HR.resx b/EarTrumpet/Properties/Resources.hr-HR.resx index 256c3ab9f..959afd62b 100644 --- a/EarTrumpet/Properties/Resources.hr-HR.resx +++ b/EarTrumpet/Properties/Resources.hr-HR.resx @@ -524,10 +524,10 @@ Otvorite [https://eartrumpet.app/jmp/fixstartup] za rješavanje problema?Postavi glasnoću aplikacije - {Option} {App} glasnoća na {Volume} na {Device} + {Option} {App} glasnoća na {Volume}​{Unit} na {Device} - {Option} {App} glasnoća za {Volume} na {Device} + {Option} {App} glasnoća za {Volume}​{Unit} na {Device} Postavi zadani uređaj za reprodukciju @@ -548,10 +548,10 @@ Otvorite [https://eartrumpet.app/jmp/fixstartup] za rješavanje problema?Postavi glasnoću uređaja - {Option} {Device} glasnoća na {Volume} + {Option} {Device} glasnoća na {Volume}​{Unit} - {Option} {Device} glasnoća za {Volume} + {Option} {Device} glasnoća za {Volume}​{Unit} Postavi lokalnu varijablu diff --git a/EarTrumpet/Properties/Resources.it-IT.resx b/EarTrumpet/Properties/Resources.it-IT.resx index a0d5c4d6e..e5ebe7cda 100644 --- a/EarTrumpet/Properties/Resources.it-IT.resx +++ b/EarTrumpet/Properties/Resources.it-IT.resx @@ -516,10 +516,10 @@ Aprire [https://eartrumpet.app/jmp/fixfonts] ora? Imposta il volume di un'applicazione - {Option} il volume di {App} a {Volume} su {Device} + {Option} il volume di {App} a {Volume}​{Unit} su {Device} - {Option} il volume di {App} di {Volume} su {Device} + {Option} il volume di {App} di {Volume}​{Unit} su {Device} Imposta il dispositivo di riproduzione predefinito @@ -540,10 +540,10 @@ Aprire [https://eartrumpet.app/jmp/fixfonts] ora? Imposta il volume di un dispositivo - {Option} {Device} al {Volume} + {Option} {Device} al {Volume}​{Unit} - {Option} {Device} del {Volume} + {Option} {Device} del {Volume}​{Unit} Imposta una variabile locale diff --git a/EarTrumpet/Properties/Resources.ja-JP.resx b/EarTrumpet/Properties/Resources.ja-JP.resx index 2e977d436..9f136d352 100644 --- a/EarTrumpet/Properties/Resources.ja-JP.resx +++ b/EarTrumpet/Properties/Resources.ja-JP.resx @@ -524,10 +524,10 @@ アプリの音量を設定 - {Device} 上 {Option} {App} の音量を {Volume} へ + {Device} 上 {Option} {App} の音量を {Volume}​{Unit} へ - {Device} {Option} {App} の音量を {Volume} で調整 + {Device} {Option} {App} の音量を {Volume}​{Unit} で調整 既定の再生デバイスを設定 @@ -548,10 +548,10 @@ デバイスの音量を設定 - {Option} {Device} の音量を {Volume} へ + {Option} {Device} の音量を {Volume}​{Unit} へ - {Option} {Device} ボリュームを {Volume} へ + {Option} {Device} ボリュームを {Volume}​{Unit} へ ローカル変数を設定 diff --git a/EarTrumpet/Properties/Resources.ko-KR.resx b/EarTrumpet/Properties/Resources.ko-KR.resx index 6c1f63c60..13a4af7ac 100644 --- a/EarTrumpet/Properties/Resources.ko-KR.resx +++ b/EarTrumpet/Properties/Resources.ko-KR.resx @@ -524,10 +524,10 @@ 앱 음량 설정 - {Device} 장치의 {App} 앱 음량을 {Volume} (으)로 {Option} + {Device} 장치의 {App} 앱 음량을 {Volume}​{Unit} (으)로 {Option} - {Device} 장치의 {App} 앱 음량을 {Volume} 만큼 {Option} + {Device} 장치의 {App} 앱 음량을 {Volume}​{Unit} 만큼 {Option} 기본 재생 장치 설정 @@ -548,10 +548,10 @@ 장치 음량 설정 - {Device} 장치의 음량을 {Volume} (으)로 {Option} + {Device} 장치의 음량을 {Volume}​{Unit} (으)로 {Option} - {Device} 장치의 음량을 {Volume} 만큼 {Option} + {Device} 장치의 음량을 {Volume}​{Unit} 만큼 {Option} 지역 변수 설정 diff --git a/EarTrumpet/Properties/Resources.nl-NL.resx b/EarTrumpet/Properties/Resources.nl-NL.resx index aa8d27ab9..0f86973ef 100644 --- a/EarTrumpet/Properties/Resources.nl-NL.resx +++ b/EarTrumpet/Properties/Resources.nl-NL.resx @@ -516,10 +516,10 @@ Wil je [https://eartrumpet.app/jmp/fixfonts] openen om het probleem op te lossen Stel het volume van een app in - {Option} {App} volume naar {Volume} op {Device} + {Option} {App} volume naar {Volume}​{Unit} op {Device} - {Option} {App} volume met {Volume} op {Device} + {Option} {App} volume met {Volume}​{Unit} op {Device} Stel het standaard afspeelapparaat in @@ -540,10 +540,10 @@ Wil je [https://eartrumpet.app/jmp/fixfonts] openen om het probleem op te lossen Apparaatvolume instellen - {Option} {Device} volume naar {Volume} + {Option} {Device} volume naar {Volume}​{Unit} - {Option} {Device} volume met {Volume} + {Option} {Device} volume met {Volume}​{Unit} Stel een lokale variabele in diff --git a/EarTrumpet/Properties/Resources.no-NO.resx b/EarTrumpet/Properties/Resources.no-NO.resx index 46b6e14ef..0c310d7e0 100644 --- a/EarTrumpet/Properties/Resources.no-NO.resx +++ b/EarTrumpet/Properties/Resources.no-NO.resx @@ -524,10 +524,10 @@ Gå til [https://eartrumpet.app/jmp/fixstartup] for å reparere dette? Sett volumet til en app - {Option} {App} volum til {Volume} på {Device} + {Option} {App} volum til {Volume}​{Unit} på {Device} - {Option} {App} volum med {Volume} på {Device} + {Option} {App} volum med {Volume}​{Unit} på {Device} Angi standard avspillingsenhet @@ -548,10 +548,10 @@ Gå til [https://eartrumpet.app/jmp/fixstartup] for å reparere dette? Angi en enhetsvolum - {Option} {Device} volum til {Volume} + {Option} {Device} volum til {Volume}​{Unit} - {Option} {Device} volum med {Volume} + {Option} {Device} volum med {Volume}​{Unit} Angi en lokal variabel diff --git a/EarTrumpet/Properties/Resources.pl-PL.resx b/EarTrumpet/Properties/Resources.pl-PL.resx index 5eff65c76..631d14baf 100644 --- a/EarTrumpet/Properties/Resources.pl-PL.resx +++ b/EarTrumpet/Properties/Resources.pl-PL.resx @@ -516,10 +516,10 @@ Otworzyć [https://eartrumpet.app/jmp/fixfonts] teraz? Ustaw poziom głośności aplikacji - {Option} {App} poziom głośności na {Volume} na {Device} + {Option} {App} poziom głośności na {Volume}​{Unit} na {Device} - {Option} {App} poziom głośności o {Volume} na {Device} + {Option} {App} poziom głośności o {Volume}​{Unit} na {Device} Ustaw domyślne urządzenie odtwarzające @@ -540,10 +540,10 @@ Otworzyć [https://eartrumpet.app/jmp/fixfonts] teraz? Ustaw poziom głośności urządzenia - {Option} {Device} poziom głośności na {Volume} + {Option} {Device} poziom głośności na {Volume}​{Unit} - {Option} {Device} poziom głośności o {Volume} + {Option} {Device} poziom głośności o {Volume}​{Unit} Ustaw zmienną lokalną diff --git a/EarTrumpet/Properties/Resources.pt-BR.resx b/EarTrumpet/Properties/Resources.pt-BR.resx index 6d63b21c8..aacd1c097 100644 --- a/EarTrumpet/Properties/Resources.pt-BR.resx +++ b/EarTrumpet/Properties/Resources.pt-BR.resx @@ -524,10 +524,10 @@ Abrir [https://eartrumpet.app/jmp/fixstartup] para resolver isso? Definir o volume de um aplicativo - {Option} {App} alterar volume para {Volume} no {Device} + {Option} {App} alterar volume para {Volume}​{Unit} no {Device} - {Option} {App} volume em {Volume} no {Device} + {Option} {App} volume em {Volume}​{Unit} no {Device} Definir o dispositivo de reprodução padrão @@ -548,10 +548,10 @@ Abrir [https://eartrumpet.app/jmp/fixstartup] para resolver isso? Definir volume do dispositivo - {Option} {Device} alterar volume para {Volume} + {Option} {Device} alterar volume para {Volume}​{Unit} - {Option} {Device} volume em {Volume} + {Option} {Device} volume em {Volume}​{Unit} Selecionar uma variável local diff --git a/EarTrumpet/Properties/Resources.pt-PT.resx b/EarTrumpet/Properties/Resources.pt-PT.resx index 73a912b6b..7b93346bf 100644 --- a/EarTrumpet/Properties/Resources.pt-PT.resx +++ b/EarTrumpet/Properties/Resources.pt-PT.resx @@ -516,10 +516,10 @@ Abrir [https://eartrumpet.app/jmp/fixfonts] agora? Definir o volume de uma aplicação - {Option} {App} alterar volume para {Volume} em {Device} + {Option} {App} alterar volume para {Volume}​{Unit} em {Device} - {Option} {App} volume a {Volume} em {Device} + {Option} {App} volume a {Volume}​{Unit} em {Device} Predefinir dispositivo de reprodução @@ -540,10 +540,10 @@ Abrir [https://eartrumpet.app/jmp/fixfonts] agora? Definir volume do dispositivo - {Option} {Device} alterar volume para {Volume} + {Option} {Device} alterar volume para {Volume}​{Unit} - {Option} {Device} volume a {Volume} + {Option} {Device} volume a {Volume}​{Unit} Definir uma variável local diff --git a/EarTrumpet/Properties/Resources.resx b/EarTrumpet/Properties/Resources.resx index 79c5cd331..97f1fb8d9 100644 --- a/EarTrumpet/Properties/Resources.resx +++ b/EarTrumpet/Properties/Resources.resx @@ -524,10 +524,10 @@ Open [https://eartrumpet.app/jmp/fixstartup] to resolve this? Set the volume of an app - {Option} {App} volume to {Volume} on {Device} + {Option} {App} volume to {Volume}​{Unit} on {Device} - {Option} {App} volume by {Volume} on {Device} + {Option} {App} volume by {Volume}​{Unit} on {Device} Set the default playback device @@ -548,10 +548,10 @@ Open [https://eartrumpet.app/jmp/fixstartup] to resolve this? Set a device volume - {Option} {Device} volume to {Volume} + {Option} {Device} volume to {Volume}​{Unit} - {Option} {Device} volume by {Volume} + {Option} {Device} volume by {Volume}​{Unit} Set a local variable @@ -679,4 +679,10 @@ Open [https://eartrumpet.app/jmp/fixstartup] to resolve this? Logarithmic scale minimum + + % + + + dB + \ No newline at end of file diff --git a/EarTrumpet/Properties/Resources.ro-RO.resx b/EarTrumpet/Properties/Resources.ro-RO.resx index 093ca9f2c..30b24c056 100644 --- a/EarTrumpet/Properties/Resources.ro-RO.resx +++ b/EarTrumpet/Properties/Resources.ro-RO.resx @@ -516,10 +516,10 @@ Deschide [https://eartrumpet.app/jmp/fixfonts] acum? Setați volumul unei aplicații - {Option} {App} volum la {Volume} pe {Device} + {Option} {App} volum la {Volume}​{Unit} pe {Device} - {Option} {App} volum de {Volume} pe {Device} + {Option} {App} volum de {Volume}​{Unit} pe {Device} Setați dispozitivul implicit de redare @@ -540,10 +540,10 @@ Deschide [https://eartrumpet.app/jmp/fixfonts] acum? Setaţi volumul dispozitivului - {Option} {Device} volum la {Volume} + {Option} {Device} volum la {Volume}​{Unit} - {Option} {Device} volum de {Volume} + {Option} {Device} volum de {Volume}​{Unit} Setaţi o variabilă locală diff --git a/EarTrumpet/Properties/Resources.ru-RU.resx b/EarTrumpet/Properties/Resources.ru-RU.resx index 0760442be..8081839b3 100644 --- a/EarTrumpet/Properties/Resources.ru-RU.resx +++ b/EarTrumpet/Properties/Resources.ru-RU.resx @@ -524,10 +524,10 @@ Установить громкость программы - {Option} громкость {App} на {Volume} на {Device} + {Option} громкость {App} на {Volume}​{Unit} на {Device} - {Option} громкость {App} на {Volume} на {Device} + {Option} громкость {App} на {Volume}​{Unit} на {Device} Установить устройство воспроизведения по умолчанию @@ -548,10 +548,10 @@ Установить громкость устройства - {Option} громкость на {Volume} на {Device} + {Option} громкость на {Volume}​{Unit} на {Device} - {Option} громкость на {Volume} на {Device} + {Option} громкость на {Volume}​{Unit} на {Device} Установить локальную переменную diff --git a/EarTrumpet/Properties/Resources.sl-SI.resx b/EarTrumpet/Properties/Resources.sl-SI.resx index 768b737fa..591eddcef 100644 --- a/EarTrumpet/Properties/Resources.sl-SI.resx +++ b/EarTrumpet/Properties/Resources.sl-SI.resx @@ -518,10 +518,10 @@ Ali želite zdaj odpreti [https://eartrumpet.app/jmp/fixfonts]? Nastavi glasnost aplikacije - {Option} {App} glasnost na {Volume} na {Device} + {Option} {App} glasnost na {Volume}​{Unit} na {Device} - {Option} {App} glasnost za {Volume} na {Device} + {Option} {App} glasnost za {Volume}​{Unit} na {Device} Nastavi privzeto predvajalno napravo @@ -542,10 +542,10 @@ Ali želite zdaj odpreti [https://eartrumpet.app/jmp/fixfonts]? Nastavi lastnost naprave - {Option} {Device} glasnost na {Volume} + {Option} {Device} glasnost na {Volume}​{Unit} - {Option} {Device} glasnost za {Volume} + {Option} {Device} glasnost za {Volume}​{Unit} Nastavite lokalno spremenljivko diff --git a/EarTrumpet/Properties/Resources.sv-SE.resx b/EarTrumpet/Properties/Resources.sv-SE.resx index c54785c03..a98ad0019 100644 --- a/EarTrumpet/Properties/Resources.sv-SE.resx +++ b/EarTrumpet/Properties/Resources.sv-SE.resx @@ -524,10 +524,10 @@ Ange volymen för en app - {Option} {App} volym till {Volume} på {Device} + {Option} {App} volym till {Volume}​{Unit} på {Device} - {Option} {App} volym av {Volume} på {Device} + {Option} {App} volym av {Volume}​{Unit} på {Device} Ställ in standardenhet för uppspelning @@ -548,10 +548,10 @@ Ställ in enhetsvolym - {Option} {Device} volym till {Volume} + {Option} {Device} volym till {Volume}​{Unit} - {Option} {Device} volym av {Volume} + {Option} {Device} volym av {Volume}​{Unit} Ställ in en lokal variabel diff --git a/EarTrumpet/Properties/Resources.th-TH.resx b/EarTrumpet/Properties/Resources.th-TH.resx index 9c0195a89..337c63d7b 100644 --- a/EarTrumpet/Properties/Resources.th-TH.resx +++ b/EarTrumpet/Properties/Resources.th-TH.resx @@ -516,10 +516,10 @@ ปรับความดังของแอป - {Option} {App} ปรับเสียงไป {Volume} บน {Device} + {Option} {App} ปรับเสียงไป {Volume}​{Unit} บน {Device} - {Option} {App} ปรับเสียงให้ {Volume} บน {Device} + {Option} {App} ปรับเสียงให้ {Volume}​{Unit} บน {Device} ตั้งให้เป็นอุปกรณ์ค่าเริ่มต้น @@ -540,10 +540,10 @@ ปรับเสียงของอุปกรณ์ - {Option} {Device} ปรับเสียงไป {Volume} + {Option} {Device} ปรับเสียงไป {Volume}​{Unit} - {Option} {Device} ปรับเสียงให้ {Volume} + {Option} {Device} ปรับเสียงให้ {Volume}​{Unit} ตั้งตัวแปรภายใน diff --git a/EarTrumpet/Properties/Resources.tr-TR.resx b/EarTrumpet/Properties/Resources.tr-TR.resx index e2d83921b..267e7a0c3 100644 --- a/EarTrumpet/Properties/Resources.tr-TR.resx +++ b/EarTrumpet/Properties/Resources.tr-TR.resx @@ -524,10 +524,10 @@ Bir uygulamanın sesini ayarla - {App} ses yüksekliğini {Device} aygıtında {Volume} olarak {Option} + {App} ses yüksekliğini {Device} aygıtında {Volume}​{Unit} olarak {Option} - {App} ses yüksekliğini {Device} aygıtında {Volume} kadar {Option} + {App} ses yüksekliğini {Device} aygıtında {Volume}​{Unit} kadar {Option} Varsayılan kayıttan yürütme aygıtını ayarla @@ -548,10 +548,10 @@ Bir aygıt ses yüksekliği ayarlayın - {Device} ses seviyesini {Volume} değerine {Option} + {Device} ses seviyesini {Volume}​{Unit} değerine {Option} - {Device} ses seviyesini {Volume} kadar {Option} + {Device} ses seviyesini {Volume}​{Unit} kadar {Option} Bir yerel değişken ayarlayın diff --git a/EarTrumpet/Properties/Resources.uk-UA.resx b/EarTrumpet/Properties/Resources.uk-UA.resx index d5897504e..7dfd568d1 100644 --- a/EarTrumpet/Properties/Resources.uk-UA.resx +++ b/EarTrumpet/Properties/Resources.uk-UA.resx @@ -516,10 +516,10 @@ Встановити гучність програми - {Option} {App} гучність до {Volume} у {Device} + {Option} {App} гучність до {Volume}​{Unit} у {Device} - {Option} {App} гучність {Volume} на {Device} + {Option} {App} гучність {Volume}​{Unit} на {Device} Встановити стандартний пристрій відтворення @@ -540,10 +540,10 @@ Установити гучність пристрою - {Option} {Device} гучність до {Volume} + {Option} {Device} гучність до {Volume}​{Unit} - {Option} {Device} гучність на {Volume} + {Option} {Device} гучність на {Volume}​{Unit} Установити локальну змінну diff --git a/EarTrumpet/Properties/Resources.vi-VN.resx b/EarTrumpet/Properties/Resources.vi-VN.resx index 05b11370f..bb5922239 100644 --- a/EarTrumpet/Properties/Resources.vi-VN.resx +++ b/EarTrumpet/Properties/Resources.vi-VN.resx @@ -516,10 +516,10 @@ Mở [https://eartrumpet.app/jmp/fixfonts] ngay? Đặt âm lượng của ứng dụng - {Option} âm lượng của {App} thành {Volume} ở thiết bị {Device} + {Option} âm lượng của {App} thành {Volume}​{Unit} ở thiết bị {Device} - {Option} âm lượng của {App} thành {Volume} ở thiết bị {Device} + {Option} âm lượng của {App} thành {Volume}​{Unit} ở thiết bị {Device} Đặt thiết bị phát lại mặc định @@ -540,10 +540,10 @@ Mở [https://eartrumpet.app/jmp/fixfonts] ngay? Đật âm lượng cho thiết bị - {Option} âm lượng của {Device} thành {Volume} + {Option} âm lượng của {Device} thành {Volume}​{Unit} - {Option} âm lượng của {Device} thành {Volume} + {Option} âm lượng của {Device} thành {Volume}​{Unit} Đặt biến cục bộ diff --git a/EarTrumpet/Properties/Resources.zh-CN.resx b/EarTrumpet/Properties/Resources.zh-CN.resx index 26a532fea..b961f09f2 100644 --- a/EarTrumpet/Properties/Resources.zh-CN.resx +++ b/EarTrumpet/Properties/Resources.zh-CN.resx @@ -524,10 +524,10 @@ 调整某应用的音量 - 在 {Device} 上将 {App} 的音量 {Option} 为 {Volume} + 在 {Device} 上将 {App} 的音量 {Option} 为 {Volume}​{Unit} - 在 {Device} 上将 {App} 的音量 {Option} {Volume} + 在 {Device} 上将 {App} 的音量 {Option} {Volume}​{Unit} 设置默认播放设备 @@ -548,10 +548,10 @@ 调整某设备音量 - 将 {Device} 的音量 {Option} 为 {Volume} + 将 {Device} 的音量 {Option} 为 {Volume}​{Unit} - 将 {Device} 的音量 {Option} {Volume} + 将 {Device} 的音量 {Option} {Volume}​{Unit} 设置某局部变量 diff --git a/EarTrumpet/Properties/Resources.zh-TW.resx b/EarTrumpet/Properties/Resources.zh-TW.resx index 534511553..72bf188cd 100644 --- a/EarTrumpet/Properties/Resources.zh-TW.resx +++ b/EarTrumpet/Properties/Resources.zh-TW.resx @@ -516,10 +516,10 @@ 設置應用程式的音量 - {Option} {App} 音量至 {Volume} 於 {Device} + {Option} {App} 音量至 {Volume}​{Unit} 於 {Device} - {Option} {App} 音量至 {Volume} 於 {Device} + {Option} {App} 音量至 {Volume}​{Unit} 於 {Device} 設定預設播放裝置 @@ -540,10 +540,10 @@ 設定設備音量 - {Option} {Device} 音量到 {Volume} + {Option} {Device} 音量到 {Volume}​{Unit} - {Option} {Device} 音量到 {Volume} + {Option} {Device} 音量到 {Volume}​{Unit} 設定區域變數 diff --git a/EarTrumpet/UI/Controls/VolumeSlider.cs b/EarTrumpet/UI/Controls/VolumeSlider.cs index 7c9a37ec6..2f5cf5efc 100644 --- a/EarTrumpet/UI/Controls/VolumeSlider.cs +++ b/EarTrumpet/UI/Controls/VolumeSlider.cs @@ -24,6 +24,16 @@ public float PeakValue2 public static readonly DependencyProperty PeakValue2Property = DependencyProperty.Register( "PeakValue2", typeof(float), typeof(VolumeSlider), new PropertyMetadata(0f, new PropertyChangedCallback(PeakValueChanged))); + public bool UseCustomRange + { + get { return (bool)this.GetValue(UseCustomRangeProperty); } + set { this.SetValue(UseCustomRangeProperty, value); } + } + public static readonly DependencyProperty UseCustomRangeProperty = DependencyProperty.Register( + "UseCustomRange", typeof(bool), typeof(VolumeSlider), new PropertyMetadata(false)); + + + private Border _peakMeter1; private Border _peakMeter2; private Thumb _thumb; @@ -41,7 +51,6 @@ public VolumeSlider() : base() Loaded += OnLoaded; Unloaded += OnUnloaded; - UseLogarithmicVolumeChangedHandler(null, new EventArgs()); App.Settings.UseLogarithmicVolumeChanged += UseLogarithmicVolumeChangedHandler; } @@ -56,6 +65,7 @@ private void OnLoaded(object sender, RoutedEventArgs e) _thumb = (Thumb)GetTemplateChild("SliderThumb"); _peakMeter1 = (Border)GetTemplateChild("PeakMeter1"); _peakMeter2 = (Border)GetTemplateChild("PeakMeter2"); + UseLogarithmicVolumeChangedHandler(null, new EventArgs()); } private void OnUnloaded(object sender, RoutedEventArgs e) @@ -77,6 +87,8 @@ private static void PeakValueChanged(DependencyObject d, DependencyPropertyChang private void UpdateVolumeRange() { + if (UseCustomRange) return; + if (App.Settings.UseLogarithmicVolume) { Minimum = App.Settings.LogarithmicVolumeMinDb; @@ -199,7 +211,7 @@ public void SetPositionByControlPoint(Point point) { var percent = point.X / ActualWidth; Value = App.Settings.UseLogarithmicVolume - ? Math.Round(Minimum + percent * (Maximum - Minimum), 1) + ? Bound(Math.Round(Minimum + percent * (Maximum - Minimum), 1)) : Bound(Minimum + (Maximum - Minimum) * percent); }