mirror of https://github.com/ShareX/ShareX.git
Compare commits
3 Commits
51ac692d61
...
686e5b6d8f
Author | SHA1 | Date |
---|---|---|
faint | 686e5b6d8f | |
Jaex | 59e7450b62 | |
faint | 9fd1d4ee4f |
|
@ -0,0 +1,92 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace ShareX.HelpersLib.Audio
|
||||||
|
{
|
||||||
|
// The fields and their sizes were created according to WAV specification
|
||||||
|
// See: http://soundfile.sapp.org/doc/WaveFormat/
|
||||||
|
public class Wav
|
||||||
|
{
|
||||||
|
private const int Riff = 1179011410;
|
||||||
|
public readonly int Size;
|
||||||
|
private const int Format = 1163280727;
|
||||||
|
|
||||||
|
private const int FormatChunkId = 544501094;
|
||||||
|
public readonly int FormatSize;
|
||||||
|
public readonly short AudioFormat;
|
||||||
|
public readonly short Channels;
|
||||||
|
public readonly int SampleRate;
|
||||||
|
public readonly int ByteRate;
|
||||||
|
public readonly short BlockAlign;
|
||||||
|
public readonly short BitsPerSample;
|
||||||
|
|
||||||
|
private const int DataChunkId = 1635017060;
|
||||||
|
public readonly int DataSize;
|
||||||
|
public readonly byte[] SoundData;
|
||||||
|
|
||||||
|
public Wav(Stream stream)
|
||||||
|
{
|
||||||
|
var reader = new BinaryReader(stream);
|
||||||
|
|
||||||
|
if (reader.ReadInt32() != Riff)
|
||||||
|
throw new Exception("Invalid WAV file: wrong RIFF chunk ID");
|
||||||
|
|
||||||
|
Size = reader.ReadInt32();
|
||||||
|
|
||||||
|
if (reader.ReadInt32() != Format)
|
||||||
|
throw new Exception("Invalid WAV file: wrong RIFF chunk format");
|
||||||
|
if (reader.ReadInt32() != FormatChunkId)
|
||||||
|
throw new Exception("Invalid WAV file: wrong fmt subchunk ID");
|
||||||
|
|
||||||
|
FormatSize = reader.ReadInt32();
|
||||||
|
AudioFormat = reader.ReadInt16();
|
||||||
|
Channels = reader.ReadInt16();
|
||||||
|
SampleRate = reader.ReadInt32();
|
||||||
|
ByteRate = reader.ReadInt32();
|
||||||
|
BlockAlign = reader.ReadInt16();
|
||||||
|
BitsPerSample = reader.ReadInt16();
|
||||||
|
|
||||||
|
if (reader.ReadInt32() != DataChunkId)
|
||||||
|
throw new Exception("Invalid WAV file: wrong data subchunk ID");
|
||||||
|
|
||||||
|
DataSize = reader.ReadInt32();
|
||||||
|
SoundData = reader.ReadBytes(DataSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stream ToStream()
|
||||||
|
{
|
||||||
|
var stream = new MemoryStream();
|
||||||
|
var writer = new BinaryWriter(stream);
|
||||||
|
|
||||||
|
writer.Write(Riff);
|
||||||
|
writer.Write(Size);
|
||||||
|
writer.Write(Format);
|
||||||
|
writer.Write(FormatChunkId);
|
||||||
|
writer.Write(FormatSize);
|
||||||
|
writer.Write(AudioFormat);
|
||||||
|
writer.Write(Channels);
|
||||||
|
writer.Write(SampleRate);
|
||||||
|
writer.Write(ByteRate);
|
||||||
|
writer.Write(BlockAlign);
|
||||||
|
writer.Write(BitsPerSample);
|
||||||
|
writer.Write(DataChunkId);
|
||||||
|
writer.Write(DataSize);
|
||||||
|
writer.Write(SoundData);
|
||||||
|
|
||||||
|
stream.Position = 0;
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Wav ChangeVolume(float factor)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < DataSize; i += BitsPerSample/8)
|
||||||
|
{
|
||||||
|
var int16 = BitConverter.ToInt16(SoundData, i);
|
||||||
|
int16 = (short)Math.Round(int16 * factor);
|
||||||
|
BitConverter.GetBytes(int16).CopyTo(SoundData, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,6 +48,7 @@ using System.Threading.Tasks;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using ShareX.HelpersLib.Audio;
|
||||||
|
|
||||||
namespace ShareX.HelpersLib
|
namespace ShareX.HelpersLib
|
||||||
{
|
{
|
||||||
|
@ -410,6 +411,21 @@ namespace ShareX.HelpersLib
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void PlaySoundAsync(Stream stream, float factor)
|
||||||
|
{
|
||||||
|
if (stream != null)
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
using (stream)
|
||||||
|
using (SoundPlayer soundPlayer = new SoundPlayer(new Wav(stream).ChangeVolume(factor).ToStream()))
|
||||||
|
{
|
||||||
|
soundPlayer.PlaySync();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void PlaySoundAsync(string filePath)
|
public static void PlaySoundAsync(string filePath)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
||||||
|
@ -424,6 +440,21 @@ namespace ShareX.HelpersLib
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void PlaySoundAsync(string filePath, float factor)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
using (StreamReader reader = new StreamReader(filePath))
|
||||||
|
using (SoundPlayer soundPlayer = new SoundPlayer(new Wav(reader.BaseStream).ChangeVolume(factor).ToStream()))
|
||||||
|
{
|
||||||
|
soundPlayer.PlaySync();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static bool WaitWhile(Func<bool> check, int interval, int timeout = -1)
|
public static bool WaitWhile(Func<bool> check, int interval, int timeout = -1)
|
||||||
{
|
{
|
||||||
Stopwatch timer = Stopwatch.StartNew();
|
Stopwatch timer = Stopwatch.StartNew();
|
||||||
|
|
|
@ -40,6 +40,7 @@ Name: "CreateDesktopIcon"; Description: "Create a desktop shortcut"; GroupDescri
|
||||||
Name: "CreateContextMenuButton"; Description: "Show ""Upload with ShareX"" button in Windows Explorer context menu"; GroupDescription: "Additional shortcuts:"; Check: not IsUpdating
|
Name: "CreateContextMenuButton"; Description: "Show ""Upload with ShareX"" button in Windows Explorer context menu"; GroupDescription: "Additional shortcuts:"; Check: not IsUpdating
|
||||||
Name: "CreateSendToIcon"; Description: "Create a send to shortcut"; GroupDescription: "Additional shortcuts:"; Check: not IsUpdating
|
Name: "CreateSendToIcon"; Description: "Create a send to shortcut"; GroupDescription: "Additional shortcuts:"; Check: not IsUpdating
|
||||||
Name: "CreateStartupIcon"; Description: "Run ShareX when Windows starts"; GroupDescription: "Other tasks:"; Check: not IsUpdating
|
Name: "CreateStartupIcon"; Description: "Run ShareX when Windows starts"; GroupDescription: "Other tasks:"; Check: not IsUpdating
|
||||||
|
Name: "EnableBrowserExtensionSupport"; Description: "Enable browser extension support"; GroupDescription: "Other tasks:"; Check: not IsUpdating
|
||||||
Name: "DisablePrintScreenKeyForSnippingTool"; Description: "Disable Print Screen key for Snipping Tool"; GroupDescription: "Other tasks:"; Check: not IsUpdating
|
Name: "DisablePrintScreenKeyForSnippingTool"; Description: "Disable Print Screen key for Snipping Tool"; GroupDescription: "Other tasks:"; Check: not IsUpdating
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
|
@ -101,6 +102,8 @@ Root: "HKCU"; Subkey: "Software\Classes\ShareX.sxcu"; Flags: dontcreatekey unins
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\.sxie"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\.sxie"; Flags: dontcreatekey uninsdeletekey
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\ShareX.sxie"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\ShareX.sxie"; Flags: dontcreatekey uninsdeletekey
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\SystemFileAssociations\image\shell\ShareXImageEditor"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\SystemFileAssociations\image\shell\ShareXImageEditor"; Flags: dontcreatekey uninsdeletekey
|
||||||
|
Root: "HKCU"; Subkey: "SOFTWARE\Google\Chrome\NativeMessagingHosts\com.getsharex.sharex"; ValueType: string; ValueData: "{app}\host-manifest-chrome.json"; Flags: uninsdeletekey; Tasks: EnableBrowserExtensionSupport
|
||||||
|
Root: "HKCU"; Subkey: "SOFTWARE\Mozilla\NativeMessagingHosts\ShareX"; ValueType: string; ValueData: "{app}\host-manifest-firefox.json"; Flags: uninsdeletekey; Tasks: EnableBrowserExtensionSupport
|
||||||
Root: "HKCU"; Subkey: "Control Panel\Keyboard"; ValueType: dword; ValueName: "PrintScreenKeyForSnippingEnabled"; ValueData: "0"; Flags: uninsdeletevalue; Tasks: DisablePrintScreenKeyForSnippingTool
|
Root: "HKCU"; Subkey: "Control Panel\Keyboard"; ValueType: dword; ValueName: "PrintScreenKeyForSnippingEnabled"; ValueData: "0"; Flags: uninsdeletevalue; Tasks: DisablePrintScreenKeyForSnippingTool
|
||||||
|
|
||||||
#include "CodeDependencies.iss"
|
#include "CodeDependencies.iss"
|
||||||
|
|
|
@ -97,6 +97,8 @@
|
||||||
this.cbDisableNotifications = new System.Windows.Forms.CheckBox();
|
this.cbDisableNotifications = new System.Windows.Forms.CheckBox();
|
||||||
this.cbPlaySoundAfterCapture = new System.Windows.Forms.CheckBox();
|
this.cbPlaySoundAfterCapture = new System.Windows.Forms.CheckBox();
|
||||||
this.cbPlaySoundAfterUpload = new System.Windows.Forms.CheckBox();
|
this.cbPlaySoundAfterUpload = new System.Windows.Forms.CheckBox();
|
||||||
|
this.nudSoundAfterUploadVolume = new System.Windows.Forms.NumericUpDown();
|
||||||
|
this.lblSoundAfterUploadVolume = new System.Windows.Forms.Label();
|
||||||
this.tpImage = new System.Windows.Forms.TabPage();
|
this.tpImage = new System.Windows.Forms.TabPage();
|
||||||
this.tcImage = new System.Windows.Forms.TabControl();
|
this.tcImage = new System.Windows.Forms.TabControl();
|
||||||
this.tpQuality = new System.Windows.Forms.TabPage();
|
this.tpQuality = new System.Windows.Forms.TabPage();
|
||||||
|
@ -314,6 +316,7 @@
|
||||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowSizeWidth)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowSizeWidth)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowFadeDuration)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowFadeDuration)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowDuration)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowDuration)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.nudSoundAfterUploadVolume)).BeginInit();
|
||||||
this.tpImage.SuspendLayout();
|
this.tpImage.SuspendLayout();
|
||||||
this.tcImage.SuspendLayout();
|
this.tcImage.SuspendLayout();
|
||||||
this.tpQuality.SuspendLayout();
|
this.tpQuality.SuspendLayout();
|
||||||
|
@ -627,6 +630,8 @@
|
||||||
this.tpNotifications.Controls.Add(this.cbDisableNotifications);
|
this.tpNotifications.Controls.Add(this.cbDisableNotifications);
|
||||||
this.tpNotifications.Controls.Add(this.cbPlaySoundAfterCapture);
|
this.tpNotifications.Controls.Add(this.cbPlaySoundAfterCapture);
|
||||||
this.tpNotifications.Controls.Add(this.cbPlaySoundAfterUpload);
|
this.tpNotifications.Controls.Add(this.cbPlaySoundAfterUpload);
|
||||||
|
this.tpNotifications.Controls.Add(this.nudSoundAfterUploadVolume);
|
||||||
|
this.tpNotifications.Controls.Add(this.lblSoundAfterUploadVolume);
|
||||||
resources.ApplyResources(this.tpNotifications, "tpNotifications");
|
resources.ApplyResources(this.tpNotifications, "tpNotifications");
|
||||||
this.tpNotifications.Name = "tpNotifications";
|
this.tpNotifications.Name = "tpNotifications";
|
||||||
this.tpNotifications.UseVisualStyleBackColor = true;
|
this.tpNotifications.UseVisualStyleBackColor = true;
|
||||||
|
@ -905,7 +910,20 @@
|
||||||
this.cbPlaySoundAfterUpload.Name = "cbPlaySoundAfterUpload";
|
this.cbPlaySoundAfterUpload.Name = "cbPlaySoundAfterUpload";
|
||||||
this.cbPlaySoundAfterUpload.UseVisualStyleBackColor = true;
|
this.cbPlaySoundAfterUpload.UseVisualStyleBackColor = true;
|
||||||
this.cbPlaySoundAfterUpload.CheckedChanged += new System.EventHandler(this.cbPlaySoundAfterUpload_CheckedChanged);
|
this.cbPlaySoundAfterUpload.CheckedChanged += new System.EventHandler(this.cbPlaySoundAfterUpload_CheckedChanged);
|
||||||
//
|
//
|
||||||
|
// nudSoundAfterUploadVolume
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.nudSoundAfterUploadVolume, "nudSoundAfterUploadVolume");
|
||||||
|
this.nudSoundAfterUploadVolume.Maximum = new decimal(new int[] { 200, 0, 0, 0 });
|
||||||
|
this.nudSoundAfterUploadVolume.Name = "nudSoundAfterUploadVolume";
|
||||||
|
this.nudSoundAfterUploadVolume.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||||
|
this.nudSoundAfterUploadVolume.ValueChanged += new System.EventHandler(this.nudSoundAfterUploadVolume_ValueChanged);
|
||||||
|
//
|
||||||
|
// lblSoundAfterUploadVolume
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.lblSoundAfterUploadVolume, "lblSoundAfterUploadVolume");
|
||||||
|
this.lblSoundAfterUploadVolume.Name = "lblSoundAfterUploadVolume";
|
||||||
|
//
|
||||||
// tpImage
|
// tpImage
|
||||||
//
|
//
|
||||||
this.tpImage.BackColor = System.Drawing.SystemColors.Window;
|
this.tpImage.BackColor = System.Drawing.SystemColors.Window;
|
||||||
|
@ -2652,6 +2670,7 @@
|
||||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowSizeWidth)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowSizeWidth)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowFadeDuration)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowFadeDuration)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowDuration)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.nudToastWindowDuration)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.nudSoundAfterUploadVolume)).EndInit();
|
||||||
this.tpImage.ResumeLayout(false);
|
this.tpImage.ResumeLayout(false);
|
||||||
this.tcImage.ResumeLayout(false);
|
this.tcImage.ResumeLayout(false);
|
||||||
this.tpQuality.ResumeLayout(false);
|
this.tpQuality.ResumeLayout(false);
|
||||||
|
@ -2811,6 +2830,8 @@
|
||||||
private System.Windows.Forms.TabPage tpGeneral;
|
private System.Windows.Forms.TabPage tpGeneral;
|
||||||
private System.Windows.Forms.CheckBox cbPlaySoundAfterCapture;
|
private System.Windows.Forms.CheckBox cbPlaySoundAfterCapture;
|
||||||
private System.Windows.Forms.CheckBox cbPlaySoundAfterUpload;
|
private System.Windows.Forms.CheckBox cbPlaySoundAfterUpload;
|
||||||
|
private System.Windows.Forms.NumericUpDown nudSoundAfterUploadVolume;
|
||||||
|
private System.Windows.Forms.Label lblSoundAfterUploadVolume;
|
||||||
private System.Windows.Forms.CheckBox cbOverrideGeneralSettings;
|
private System.Windows.Forms.CheckBox cbOverrideGeneralSettings;
|
||||||
private System.Windows.Forms.TabPage tpTools;
|
private System.Windows.Forms.TabPage tpTools;
|
||||||
private System.Windows.Forms.NumericUpDown nudScreenRecorderStartDelay;
|
private System.Windows.Forms.NumericUpDown nudScreenRecorderStartDelay;
|
||||||
|
|
|
@ -190,7 +190,10 @@ namespace ShareX
|
||||||
#region Notifications
|
#region Notifications
|
||||||
|
|
||||||
cbPlaySoundAfterCapture.Checked = TaskSettings.GeneralSettings.PlaySoundAfterCapture;
|
cbPlaySoundAfterCapture.Checked = TaskSettings.GeneralSettings.PlaySoundAfterCapture;
|
||||||
cbPlaySoundAfterUpload.Checked = TaskSettings.GeneralSettings.PlaySoundAfterUpload;
|
nudSoundAfterUploadVolume.Enabled = cbPlaySoundAfterUpload.Checked = TaskSettings.GeneralSettings.PlaySoundAfterUpload;
|
||||||
|
nudSoundAfterUploadVolume.SetValue(TaskSettings.GeneralSettings.SoundAfterUploadVolume);
|
||||||
|
nudSoundAfterUploadVolume.Maximum = 200;
|
||||||
|
nudSoundAfterUploadVolume.Minimum = 0;
|
||||||
cbShowToastNotificationAfterTaskCompleted.Checked = TaskSettings.GeneralSettings.ShowToastNotificationAfterTaskCompleted;
|
cbShowToastNotificationAfterTaskCompleted.Checked = TaskSettings.GeneralSettings.ShowToastNotificationAfterTaskCompleted;
|
||||||
gbToastWindow.Enabled = TaskSettings.GeneralSettings.ShowToastNotificationAfterTaskCompleted;
|
gbToastWindow.Enabled = TaskSettings.GeneralSettings.ShowToastNotificationAfterTaskCompleted;
|
||||||
nudToastWindowDuration.SetValue((decimal)TaskSettings.GeneralSettings.ToastWindowDuration);
|
nudToastWindowDuration.SetValue((decimal)TaskSettings.GeneralSettings.ToastWindowDuration);
|
||||||
|
@ -825,6 +828,12 @@ namespace ShareX
|
||||||
private void cbPlaySoundAfterUpload_CheckedChanged(object sender, EventArgs e)
|
private void cbPlaySoundAfterUpload_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
TaskSettings.GeneralSettings.PlaySoundAfterUpload = cbPlaySoundAfterUpload.Checked;
|
TaskSettings.GeneralSettings.PlaySoundAfterUpload = cbPlaySoundAfterUpload.Checked;
|
||||||
|
nudSoundAfterUploadVolume.Enabled = cbPlaySoundAfterUpload.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void nudSoundAfterUploadVolume_ValueChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
TaskSettings.GeneralSettings.SoundAfterUploadVolume = (int)nudSoundAfterUploadVolume.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cbShowToastNotificationAfterTaskCompleted_CheckedChanged(object sender, EventArgs e)
|
private void cbShowToastNotificationAfterTaskCompleted_CheckedChanged(object sender, EventArgs e)
|
||||||
|
|
|
@ -1671,6 +1671,57 @@
|
||||||
<data name=">>cbPlaySoundAfterUpload.ZOrder" xml:space="preserve">
|
<data name=">>cbPlaySoundAfterUpload.ZOrder" xml:space="preserve">
|
||||||
<value>14</value>
|
<value>14</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="nudSoundAfterUploadVolume.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>248, 29</value>
|
||||||
|
</data>
|
||||||
|
<data name="nudSoundAfterUploadVolume.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>54, 20</value>
|
||||||
|
</data>
|
||||||
|
<data name="nudSoundAfterUploadVolume.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>15</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>nudSoundAfterUploadVolume.Name" xml:space="preserve">
|
||||||
|
<value>nudSoundAfterUploadVolume</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>nudSoundAfterUploadVolume.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>nudSoundAfterUploadVolume.Parent" xml:space="preserve">
|
||||||
|
<value>tpNotifications</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>nudSoundAfterUploadVolume.ZOrder" xml:space="preserve">
|
||||||
|
<value>15</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSoundAfterUploadVolume.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSoundAfterUploadVolume.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSoundAfterUploadVolume.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>308, 33</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSoundAfterUploadVolume.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>15, 13</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSoundAfterUploadVolume.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>19</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSoundAfterUploadVolume.Text" xml:space="preserve">
|
||||||
|
<value>%</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>lblSoundAfterUploadVolume.Name" xml:space="preserve">
|
||||||
|
<value>lblSoundAfterUploadVolume</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>lblSoundAfterUploadVolume.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>lblSoundAfterUploadVolume.Parent" xml:space="preserve">
|
||||||
|
<value>tpNotifications</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>lblSoundAfterUploadVolume.ZOrder" xml:space="preserve">
|
||||||
|
<value>16</value>
|
||||||
|
</data>
|
||||||
<data name="tpNotifications.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="tpNotifications.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>4, 22</value>
|
<value>4, 22</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -1550,13 +1550,35 @@ namespace ShareX
|
||||||
{
|
{
|
||||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||||
|
|
||||||
|
var volume = taskSettings.GeneralSettings.SoundAfterUploadVolume;
|
||||||
|
|
||||||
if (taskSettings.GeneralSettings.UseCustomTaskCompletedSound && !string.IsNullOrEmpty(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath))
|
if (taskSettings.GeneralSettings.UseCustomTaskCompletedSound && !string.IsNullOrEmpty(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath))
|
||||||
{
|
{
|
||||||
Helpers.PlaySoundAsync(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath);
|
switch (volume)
|
||||||
|
{
|
||||||
|
case var i when volume <= 0:
|
||||||
|
return;
|
||||||
|
case 100:
|
||||||
|
Helpers.PlaySoundAsync(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Helpers.PlaySoundAsync(taskSettings.GeneralSettings.CustomTaskCompletedSoundPath, volume / 100f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Helpers.PlaySoundAsync(Resources.TaskCompletedSound);
|
switch (volume)
|
||||||
|
{
|
||||||
|
case var i when volume <= 0:
|
||||||
|
return;
|
||||||
|
case 100:
|
||||||
|
Helpers.PlaySoundAsync(Resources.TaskCompletedSound);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Helpers.PlaySoundAsync(Resources.TaskCompletedSound, volume / 100f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -308,6 +308,7 @@ namespace ShareX
|
||||||
|
|
||||||
public bool PlaySoundAfterCapture = true;
|
public bool PlaySoundAfterCapture = true;
|
||||||
public bool PlaySoundAfterUpload = true;
|
public bool PlaySoundAfterUpload = true;
|
||||||
|
public int SoundAfterUploadVolume = 100;
|
||||||
public bool ShowToastNotificationAfterTaskCompleted = true;
|
public bool ShowToastNotificationAfterTaskCompleted = true;
|
||||||
public float ToastWindowDuration = 3f;
|
public float ToastWindowDuration = 3f;
|
||||||
public float ToastWindowFadeDuration = 1f;
|
public float ToastWindowFadeDuration = 1f;
|
||||||
|
|
Loading…
Reference in New Issue