diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5f420c8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# IDE0059: 不需要赋值 +csharp_style_unused_value_assignment_preference = unused_local_variable diff --git a/.vs/AudioVisualizer/DesignTimeBuild/.dtbcache.v2 b/.vs/AudioVisualizer/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000..a7ac8fa Binary files /dev/null and b/.vs/AudioVisualizer/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/AudioVisualizer/v17/.futdcache.v2 b/.vs/AudioVisualizer/v17/.futdcache.v2 new file mode 100644 index 0000000..ecfc365 Binary files /dev/null and b/.vs/AudioVisualizer/v17/.futdcache.v2 differ diff --git a/.vs/AudioVisualizer/v17/.suo b/.vs/AudioVisualizer/v17/.suo new file mode 100644 index 0000000..5ff850d Binary files /dev/null and b/.vs/AudioVisualizer/v17/.suo differ diff --git a/.vs/AudioVisualizer/v17/.wsuo b/.vs/AudioVisualizer/v17/.wsuo new file mode 100644 index 0000000..d426a2c Binary files /dev/null and b/.vs/AudioVisualizer/v17/.wsuo differ diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..782c581 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,12 @@ +{ + "ExpandedNodes": [ + "", + "\\AudioVisualizer", + "\\AudioVisualizer\\Resources", + "\\LibAudioVisualizer", + "\\LibDynamics", + "\\WpfAudioVisualizer" + ], + "SelectedNode": "\\AudioVisualizer\\ConfigurationObject.cs", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..fce80a6 Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/AudioVisualizer.sln b/AudioVisualizer.sln new file mode 100644 index 0000000..929943a --- /dev/null +++ b/AudioVisualizer.sln @@ -0,0 +1,107 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32929.385 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfAudioVisualizer", "WpfAudioVisualizer\WpfAudioVisualizer.csproj", "{459FE289-A8E1-4BEC-9113-FC42B9CE9436}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibAudioVisualizer", "LibAudioVisualizer\LibAudioVisualizer.csproj", "{15A2D4B9-BD52-411F-96E9-2BFACFEC4579}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AudioVisualizerDx", "AudioVisualizerDx\AudioVisualizerDx.csproj", "{20B17F7E-11C3-4E46-9E79-DE9A3B25B640}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F54E0AE6-96AB-42EA-AFD1-37F1BCBAD304}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + readme.md = readme.md + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AudioVisualizerGL", "AudioVisualizerGL\AudioVisualizerGL.csproj", "{EC24D98A-2776-400D-8494-7B8C954EAF84}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AudioVisualizerDxDesktop", "AudioVisualizerDxDesktop\AudioVisualizerDxDesktop.csproj", "{4398D445-4BE7-4671-83C1-BA7320BEF1EE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibDynamics", "LibDynamics\LibDynamics.csproj", "{F31F51C2-25D8-4AF1-891C-01087BB7E5EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AudioWallpaperManager", "AudioWallpaperManager\AudioWallpaperManager.csproj", "{E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AudioWallpaper", "AudioVisualizer\AudioWallpaper.csproj", "{4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Debug|Any CPU.Build.0 = Debug|Any CPU + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Debug|x64.ActiveCfg = Debug|x64 + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Debug|x64.Build.0 = Debug|x64 + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Release|Any CPU.ActiveCfg = Release|Any CPU + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Release|Any CPU.Build.0 = Release|Any CPU + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Release|x64.ActiveCfg = Release|x64 + {459FE289-A8E1-4BEC-9113-FC42B9CE9436}.Release|x64.Build.0 = Release|x64 + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Debug|x64.ActiveCfg = Debug|x64 + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Debug|x64.Build.0 = Debug|x64 + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Release|Any CPU.Build.0 = Release|Any CPU + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Release|x64.ActiveCfg = Release|x64 + {15A2D4B9-BD52-411F-96E9-2BFACFEC4579}.Release|x64.Build.0 = Release|x64 + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Debug|x64.ActiveCfg = Debug|x64 + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Debug|x64.Build.0 = Debug|x64 + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Release|Any CPU.Build.0 = Release|Any CPU + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Release|x64.ActiveCfg = Release|x64 + {20B17F7E-11C3-4E46-9E79-DE9A3B25B640}.Release|x64.Build.0 = Release|x64 + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Debug|x64.ActiveCfg = Debug|x64 + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Debug|x64.Build.0 = Debug|x64 + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Release|Any CPU.Build.0 = Release|Any CPU + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Release|x64.ActiveCfg = Release|x64 + {EC24D98A-2776-400D-8494-7B8C954EAF84}.Release|x64.Build.0 = Release|x64 + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Debug|x64.ActiveCfg = Debug|x64 + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Debug|x64.Build.0 = Debug|x64 + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Release|Any CPU.Build.0 = Release|Any CPU + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Release|x64.ActiveCfg = Release|x64 + {4398D445-4BE7-4671-83C1-BA7320BEF1EE}.Release|x64.Build.0 = Release|x64 + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Debug|x64.ActiveCfg = Debug|x64 + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Debug|x64.Build.0 = Debug|x64 + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Release|Any CPU.Build.0 = Release|Any CPU + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Release|x64.ActiveCfg = Release|x64 + {F31F51C2-25D8-4AF1-891C-01087BB7E5EC}.Release|x64.Build.0 = Release|x64 + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Debug|x64.ActiveCfg = Debug|x64 + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Debug|x64.Build.0 = Debug|x64 + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Release|Any CPU.Build.0 = Release|Any CPU + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Release|x64.ActiveCfg = Release|x64 + {E77BF32B-9AEF-4BE3-A1BD-4A13533E02B5}.Release|x64.Build.0 = Release|x64 + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Debug|x64.ActiveCfg = Debug|x64 + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Debug|x64.Build.0 = Debug|x64 + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Release|Any CPU.Build.0 = Release|Any CPU + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Release|x64.ActiveCfg = Release|x64 + {4DFEE2A6-2CE7-4A35-A2A9-0EF33D32F6FE}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5339D678-7325-4FD8-A49D-47B54E59D8E6} + EndGlobalSection +EndGlobal diff --git a/AudioVisualizer/AppBarManager.cs b/AudioVisualizer/AppBarManager.cs new file mode 100644 index 0000000..fd8884a --- /dev/null +++ b/AudioVisualizer/AppBarManager.cs @@ -0,0 +1,57 @@ +using System.Runtime.InteropServices; +using static AudioWallpaper.Win32; + +namespace AudioWallpaper { + public class AppBarManager { + private const int ABM_NEW = 0x00000000; + private const int ABM_REMOVE = 0x00000001; + private const int ABM_QUERYPOS = 0x00000002; + private const int ABM_SETPOS = 0x00000003; + private const int ABM_GETSTATE = 0x00000004; + private const int ABM_GETTASKBARPOS = 0x00000005; + private const int ABM_ACTIVATE = 0x00000006; + private const int ABM_GETAUTOHIDEBAR = 0x00000007; + private const int ABM_SETAUTOHIDEBAR = 0x00000008; + private const int ABM_WINDOWPOSCHANGED = 0x00000009; + private const int ABM_SETSTATE = 0x0000000A; + + private const int ABS_AUTOHIDE = 0x0000001; + private const int ABS_ALWAYSONTOP = 0x0000002; + + private const int ABN_STATECHANGE = 0x0000000; + private const int ABN_POSCHANGED = 0x0000001; + public const int ABN_FULLSCREENAPP = 0x0000002; + private const int ABN_WINDOWARRANGE = 0x0000003; + + + + private IntPtr hWnd; + public uint uCallbackMessage; + + public AppBarManager(IntPtr hWnd) { + this.hWnd = hWnd; + uCallbackMessage = RegisterCallbackMessage(); + + APPBARDATA abd = new APPBARDATA(); + abd.cbSize = Marshal.SizeOf(typeof(APPBARDATA)); + abd.hWnd = hWnd; + abd.uCallbackMessage = uCallbackMessage; + + SHAppBarMessage(ABM_NEW, ref abd); + } + public void Dispose() { + APPBARDATA abd = new APPBARDATA(); + abd.cbSize = Marshal.SizeOf(typeof(APPBARDATA)); + abd.hWnd = hWnd; + + SHAppBarMessage(ABM_REMOVE, ref abd); + } + + public uint RegisterCallbackMessage() { + // 注册一个自定义的消息编号,用于AppBar消息 + string uniqueMessageString = "AppBarMessage" + Guid.NewGuid().ToString(); + return RegisterWindowMessage(uniqueMessageString); + } + + } +} diff --git a/AudioVisualizer/AudioVisualizer.csproj b/AudioVisualizer/AudioVisualizer.csproj new file mode 100644 index 0000000..496f9cd --- /dev/null +++ b/AudioVisualizer/AudioVisualizer.csproj @@ -0,0 +1,43 @@ + + + + WinExe + net6.0-windows + enable + true + enable + FM-channel.ico + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + \ No newline at end of file diff --git a/AudioVisualizer/AudioWallpaper.csproj b/AudioVisualizer/AudioWallpaper.csproj new file mode 100644 index 0000000..34aeb9e --- /dev/null +++ b/AudioVisualizer/AudioWallpaper.csproj @@ -0,0 +1,52 @@ + + + + WinExe + net8.0-windows10.0.17763.0 + enable + true + enable + FM-channel.ico + app.manifest + 1.2.2 + 1.2.2 + 1.2.2 + AnyCPU;x64 + win-x64 + $(Nowarn);SYSLIB0011 + true + + 10.0.17763.0 + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/AudioVisualizer/AudioWallpaper.csproj.user b/AudioVisualizer/AudioWallpaper.csproj.user new file mode 100644 index 0000000..f5ef4a0 --- /dev/null +++ b/AudioVisualizer/AudioWallpaper.csproj.user @@ -0,0 +1,23 @@ + + + + <_LastSelectedProfileId>H:\S1\C#\AudioVisualizer\AudioVisualizer\Properties\PublishProfiles\默认win10 64 依赖框架.pubxml + + + + Form + + + Component + + + Form + + + Form + + + Form + + + \ No newline at end of file diff --git a/AudioVisualizer/ConfigurationObject.cs b/AudioVisualizer/ConfigurationObject.cs new file mode 100644 index 0000000..877db37 --- /dev/null +++ b/AudioVisualizer/ConfigurationObject.cs @@ -0,0 +1,159 @@ +using AudioWallpaper; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AudioVisualizer { + public class ConfigurationObject { + /// + /// 律动默认激进倍率 + /// + public float DefaultRadical = 2f; + /// + /// 默认频谱偏移量 + /// + public float DefaultOffset = 0.4f; + /// + /// 默认傅里叶变化量 + /// + public int DefaultFourierVariation = 512; + /// + /// 默认颜色 + /// + public Color DefaultColor = Color.Blue; + /// + /// 默认停止颜色 + /// + public Color DefaultStopColor = Color.Red; + /// + /// 是否使用系统默认颜色 + /// + public bool UseDefaultColorOrNOt = true; + /// + /// 默认颜色数量 + /// + public int NumberOfColors = 256; + /// + /// 是否单色显示 + /// + public bool MonochromeOrNot = false; + /// + /// 默认背景颜色 + /// + public Color BackgroundColor = Color.Black; + /// + /// 是否使用背景图 + /// + public bool BackImgOrNot = false; + /// + /// 背景图片地址 + /// + public String? BackgroundImagePath = null; + + /// + /// 是否画出波浪线 + /// + public bool WavyLine = true; + /// + /// 是否画出边框 + /// + public bool Frame = true; + /// + /// 是否画出中间圆形 + /// + public bool Rotundity = true; + /// + /// 是否画出底边条形 + /// + public bool Stripe = true; + + + public String DefaultConfiguration = "DefaultConfiguration"; + + public bool SaveConfiguration(String configFilePath) { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + + #region 将配置文件添加到配置工具对象中 + //默认律动激进倍率 + configurationTools.AddSetting(DefaultConfiguration, "DefaultRadical", DefaultRadical.ToString()); + //默认频谱偏移量 + configurationTools.AddSetting(DefaultConfiguration, "DefaultOffset", DefaultOffset.ToString()); + //默认傅里叶变化量 + configurationTools.AddSetting(DefaultConfiguration, "DefaultFourierVariation", DefaultFourierVariation.ToString()); + //默认开始颜色 + configurationTools.AddSetting(DefaultConfiguration, "DefaultColor", ColorTranslator.ToHtml(DefaultColor)); + //默认停止颜色 + configurationTools.AddSetting(DefaultConfiguration, "DefaultStopColor", ColorTranslator.ToHtml(DefaultStopColor)); + //是否使用默认颜色 + configurationTools.AddSetting(DefaultConfiguration, "UseDefaultColorOrNOt", UseDefaultColorOrNOt.ToString()); + //颜色数量 + configurationTools.AddSetting(DefaultConfiguration, "NumberOfColors", NumberOfColors.ToString()); + //是否单色显示 + configurationTools.AddSetting(DefaultConfiguration, "MonochromeOrNot", MonochromeOrNot.ToString()); + //默认背景颜色 + configurationTools.AddSetting(DefaultConfiguration, "BackgroundColor", ColorTranslator.ToHtml(BackgroundColor)); + //是否使用背景图 + configurationTools.AddSetting(DefaultConfiguration, "BackImgOrNot", BackImgOrNot.ToString()); + //背景图地址 + configurationTools.AddSetting(DefaultConfiguration, "BackgroundImagePath", BackgroundImagePath); + //是否画出波浪线 + configurationTools.AddSetting(DefaultConfiguration, "WavyLine", WavyLine.ToString()); + //是否画出边框 + configurationTools.AddSetting(DefaultConfiguration, "Frame", Frame.ToString()); + //是否画出中间圆形 + configurationTools.AddSetting(DefaultConfiguration, "Rotundity", Rotundity.ToString()); + //是否画出底边条形 + configurationTools.AddSetting(DefaultConfiguration, "Stripe", Stripe.ToString()); + #endregion + //保存配置 + configurationTools.SaveSettings(); + + return true; + } + public ConfigurationObject LoadConfiguration(String configFilePath) { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + #region 为配置对象添加配置 + try { + //默认律动激进倍率 + DefaultRadical = float.Parse(configurationTools.GetSetting(DefaultConfiguration, "DefaultRadical")); + //默认频谱偏移量 + DefaultOffset = float.Parse(configurationTools.GetSetting(DefaultConfiguration, "DefaultOffset")); + //默认傅里叶变化量 + DefaultFourierVariation = int.Parse(configurationTools.GetSetting(DefaultConfiguration, "DefaultFourierVariation")); + //默认颜色 + DefaultColor = ColorTranslator.FromHtml(configurationTools.GetSetting(DefaultConfiguration, "DefaultColor")); + //默认停止颜色 + DefaultStopColor = ColorTranslator.FromHtml(configurationTools.GetSetting(DefaultConfiguration, "DefaultStopColor")); + //是否使用默认颜色 + UseDefaultColorOrNOt = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "UseDefaultColorOrNOt")); + //颜色数量 + NumberOfColors = int.Parse(configurationTools.GetSetting(DefaultConfiguration, "NumberOfColors")); + //是否单色显示 + MonochromeOrNot = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "MonochromeOrNot")); + //默认背景颜色 + BackgroundColor = ColorTranslator.FromHtml(configurationTools.GetSetting(DefaultConfiguration, "BackgroundColor")); + //是否使用背景图 + BackImgOrNot = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "BackImgOrNot")); + //背景图地址 + BackgroundImagePath = configurationTools.GetSetting(DefaultConfiguration, "BackgroundImagePath"); + //是否画出波浪线 + WavyLine = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "WavyLine")); + //是否画出边框 + Frame = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "Frame")); + //是否画出中间圆形 + Rotundity = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "Rotundity")); + //是否画出底边条形 + Stripe = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "Stripe")); + #endregion + } catch (Exception) { + + } + return this; + } + } +} diff --git a/AudioVisualizer/ConfigurationObject.cs.orig b/AudioVisualizer/ConfigurationObject.cs.orig new file mode 100644 index 0000000..2bce362 --- /dev/null +++ b/AudioVisualizer/ConfigurationObject.cs.orig @@ -0,0 +1,163 @@ +<<<<<<< HEAD +using AudioWallpaper; +using System; +======= +using System; +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AudioVisualizer { + public class ConfigurationObject { + /// + /// 律动默认激进倍率 + /// + public float DefaultRadical = 2f; + /// + /// 默认频谱偏移量 + /// + public float DefaultOffset = 0.4f; + /// + /// 默认傅里叶变化量 + /// + public int DefaultFourierVariation = 512; + /// + /// 默认颜色 + /// + public Color DefaultColor = Color.Blue; + /// + /// 默认停止颜色 + /// + public Color DefaultStopColor = Color.Red; + /// + /// 是否使用系统默认颜色 + /// + public bool UseDefaultColorOrNOt = true; + /// + /// 默认颜色数量 + /// + public int NumberOfColors = 256; + /// + /// 是否单色显示 + /// + public bool MonochromeOrNot = false; + /// + /// 默认背景颜色 + /// + public Color BackgroundColor = Color.Black; + /// + /// 是否使用背景图 + /// + public bool BackImgOrNot = false; + /// + /// 背景图片地址 + /// + public String? BackgroundImagePath = null; + + /// + /// 是否画出波浪线 + /// + public bool WavyLine = true; + /// + /// 是否画出边框 + /// + public bool Frame = true; + /// + /// 是否画出中间圆形 + /// + public bool Rotundity = true; + /// + /// 是否画出底边条形 + /// + public bool Stripe = true; + + + public String DefaultConfiguration = "DefaultConfiguration"; + + public bool SaveConfiguration(String configFilePath) { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + + #region 将配置文件添加到配置工具对象中 + //默认律动激进倍率 + configurationTools.AddSetting(DefaultConfiguration, "DefaultRadical", DefaultRadical.ToString()); + //默认频谱偏移量 + configurationTools.AddSetting(DefaultConfiguration, "DefaultOffset", DefaultOffset.ToString()); + //默认傅里叶变化量 + configurationTools.AddSetting(DefaultConfiguration, "DefaultFourierVariation", DefaultFourierVariation.ToString()); + //默认开始颜色 + configurationTools.AddSetting(DefaultConfiguration, "DefaultColor", ColorTranslator.ToHtml(DefaultColor)); + //默认停止颜色 + configurationTools.AddSetting(DefaultConfiguration, "DefaultStopColor", ColorTranslator.ToHtml(DefaultStopColor)); + //是否使用默认颜色 + configurationTools.AddSetting(DefaultConfiguration, "UseDefaultColorOrNOt", UseDefaultColorOrNOt.ToString()); + //颜色数量 + configurationTools.AddSetting(DefaultConfiguration, "NumberOfColors", NumberOfColors.ToString()); + //是否单色显示 + configurationTools.AddSetting(DefaultConfiguration, "MonochromeOrNot", MonochromeOrNot.ToString()); + //默认背景颜色 + configurationTools.AddSetting(DefaultConfiguration, "BackgroundColor", ColorTranslator.ToHtml(BackgroundColor)); + //是否使用背景图 + configurationTools.AddSetting(DefaultConfiguration, "BackImgOrNot", BackImgOrNot.ToString()); + //背景图地址 + configurationTools.AddSetting(DefaultConfiguration, "BackgroundImagePath", BackgroundImagePath); + //是否画出波浪线 + configurationTools.AddSetting(DefaultConfiguration, "WavyLine", WavyLine.ToString()); + //是否画出边框 + configurationTools.AddSetting(DefaultConfiguration, "Frame", Frame.ToString()); + //是否画出中间圆形 + configurationTools.AddSetting(DefaultConfiguration, "Rotundity", Rotundity.ToString()); + //是否画出底边条形 + configurationTools.AddSetting(DefaultConfiguration, "Stripe", Stripe.ToString()); + #endregion + //保存配置 + configurationTools.SaveSettings(); + + return true; + } + public ConfigurationObject LoadConfiguration(String configFilePath) { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + #region 为配置对象添加配置 + try { + //默认律动激进倍率 + DefaultRadical = float.Parse(configurationTools.GetSetting(DefaultConfiguration, "DefaultRadical")); + //默认频谱偏移量 + DefaultOffset = float.Parse(configurationTools.GetSetting(DefaultConfiguration, "DefaultOffset")); + //默认傅里叶变化量 + DefaultFourierVariation = int.Parse(configurationTools.GetSetting(DefaultConfiguration, "DefaultFourierVariation")); + //默认颜色 + DefaultColor = ColorTranslator.FromHtml(configurationTools.GetSetting(DefaultConfiguration, "DefaultColor")); + //默认停止颜色 + DefaultStopColor = ColorTranslator.FromHtml(configurationTools.GetSetting(DefaultConfiguration, "DefaultStopColor")); + //是否使用默认颜色 + UseDefaultColorOrNOt = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "UseDefaultColorOrNOt")); + //颜色数量 + NumberOfColors = int.Parse(configurationTools.GetSetting(DefaultConfiguration, "NumberOfColors")); + //是否单色显示 + MonochromeOrNot = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "MonochromeOrNot")); + //默认背景颜色 + BackgroundColor = ColorTranslator.FromHtml(configurationTools.GetSetting(DefaultConfiguration, "BackgroundColor")); + //是否使用背景图 + BackImgOrNot = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "BackImgOrNot")); + //背景图地址 + BackgroundImagePath = configurationTools.GetSetting(DefaultConfiguration, "BackgroundImagePath"); + //是否画出波浪线 + WavyLine = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "WavyLine")); + //是否画出边框 + Frame = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "Frame")); + //是否画出中间圆形 + Rotundity = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "Rotundity")); + //是否画出底边条形 + Stripe = Convert.ToBoolean(configurationTools.GetSetting(DefaultConfiguration, "Stripe")); + #endregion + } catch (Exception) { + + } + return this; + } + } +} diff --git a/AudioVisualizer/ConfigurationTools.cs b/AudioVisualizer/ConfigurationTools.cs new file mode 100644 index 0000000..f42183a --- /dev/null +++ b/AudioVisualizer/ConfigurationTools.cs @@ -0,0 +1,162 @@ +using System.Collections; + +namespace AudioWallpaper { + public class ConfigurationTools { + private Hashtable keyPairs = new Hashtable(); + private String iniFilePath; + private struct SectionPair { + public String Section; + public String Key; + } + /// + /// 在给定的路径上打开INI文件并枚举IniParser中的值。 + /// + /// Full path to INI file. + public ConfigurationTools(String iniPath) { + TextReader iniFile = null; + String strLine = null; + String currentRoot = null; + String[] keyPair = null; + iniFilePath = iniPath; + if (File.Exists(iniPath)) { + try { + iniFile = new StreamReader(iniPath); + strLine = iniFile.ReadLine(); + while (strLine != null) { + strLine = strLine.Trim().ToUpper(); + if (strLine != "") { + if (strLine.StartsWith("[") && strLine.EndsWith("]")) { + currentRoot = strLine.Substring(1, strLine.Length - 2); + } else { + keyPair = strLine.Split(new char[] { '=' }, 2); + SectionPair sectionPair; + String value = null; + if (currentRoot == null) + currentRoot = "ROOT"; + sectionPair.Section = currentRoot; + sectionPair.Key = keyPair[0]; + if (keyPair.Length > 1) + value = keyPair[1]; + keyPairs.Add(sectionPair, value); + } + } + strLine = iniFile.ReadLine(); + } + } catch (Exception ex) { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } finally { + if (iniFile != null) + iniFile.Close(); + } + } + } + /// + /// 返回给定section的值,key对。 + /// + /// Section name + /// Key name + public String GetSetting(String sectionName, String settingName) { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + return (String)keyPairs[sectionPair]; + } + /// + /// 列出给定的Section的所有行 + /// + /// Section to enum. + public String[] EnumSection(String sectionName) { + ArrayList tmpArray = new ArrayList(); + foreach (SectionPair pair in keyPairs.Keys) { + if (pair.Section == sectionName.ToUpper()) + tmpArray.Add(pair.Key); + } + return (String[])tmpArray.ToArray(typeof(String)); + } + /// + /// 向要保存的表添加或替换设置。 + /// + /// Section to add under. + /// Key name to add. + /// Value of key. + public void AddSetting(String sectionName, String settingName, String settingValue) { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + if (keyPairs.ContainsKey(sectionPair)) + keyPairs.Remove(sectionPair); + keyPairs.Add(sectionPair, settingValue); + } + /// + /// 向要保存的表添加或替换设置,提供复写内容是否为大写 + /// + /// Section to add under. + /// Key name to add. + /// Value of key. + /// Value is upper . true:upper;false do not change + public void AddSetting(String sectionName, String settingName, String settingValue, bool isUpper) { + SectionPair pair; + pair.Section = sectionName.ToUpper(); + } + + + /// + /// 用空值添加或替换要保存的表的设置。 + /// + /// Section + /// Key + public void AddSetting(String sectionName, String settingName) { + AddSetting(sectionName, settingName, null); + } + /// + /// 删除设置 + /// + /// 指定Section + /// 添加的Key + public void DeleteSetting(String sectionName, String settingName) { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + if (keyPairs.ContainsKey(sectionPair)) + keyPairs.Remove(sectionPair); + } + /// + /// 保存设置到新文件。 + /// + /// 新的文件路径。 + public void SaveSettings(String newFilePath) { + ArrayList sections = new ArrayList(); + String tmpValue = ""; + String strToSave = ""; + foreach (SectionPair sectionPair in keyPairs.Keys) { + if (!sections.Contains(sectionPair.Section)) + sections.Add(sectionPair.Section); + } + foreach (String section in sections) { + strToSave += ("[" + section + "]\r\n"); + foreach (SectionPair sectionPair in keyPairs.Keys) { + if (sectionPair.Section == section) { + tmpValue = (String)keyPairs[sectionPair]; + if (tmpValue != null) + tmpValue = "=" + tmpValue; + strToSave += (sectionPair.Key + tmpValue + "\r\n"); + } + } + strToSave += "\r\n"; + } + try { + TextWriter tw = new StreamWriter(newFilePath); + tw.Write(strToSave); + tw.Close(); + } catch (Exception ex) { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + /// + /// 将设置保存回ini文件。 + /// + public void SaveSettings() { + SaveSettings(iniFilePath); + } + } +} diff --git a/AudioVisualizer/ConfigurationTools.cs.orig b/AudioVisualizer/ConfigurationTools.cs.orig new file mode 100644 index 0000000..1bd320d --- /dev/null +++ b/AudioVisualizer/ConfigurationTools.cs.orig @@ -0,0 +1,174 @@ +<<<<<<< HEAD +using System.Collections; + +namespace AudioWallpaper { +======= +using System; +using System.Collections; +using System.IO; +using System.Windows.Forms; + +namespace AudioVisualizer { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + public class ConfigurationTools { + private Hashtable keyPairs = new Hashtable(); + private String iniFilePath; + private struct SectionPair { + public String Section; + public String Key; + } + /// + /// 在给定的路径上打开INI文件并枚举IniParser中的值。 + /// + /// Full path to INI file. + public ConfigurationTools(String iniPath) { + TextReader iniFile = null; + String strLine = null; + String currentRoot = null; + String[] keyPair = null; + iniFilePath = iniPath; + if (File.Exists(iniPath)) { + try { + iniFile = new StreamReader(iniPath); + strLine = iniFile.ReadLine(); + while (strLine != null) { + strLine = strLine.Trim().ToUpper(); + if (strLine != "") { + if (strLine.StartsWith("[") && strLine.EndsWith("]")) { + currentRoot = strLine.Substring(1, strLine.Length - 2); + } else { + keyPair = strLine.Split(new char[] { '=' }, 2); + SectionPair sectionPair; + String value = null; + if (currentRoot == null) + currentRoot = "ROOT"; + sectionPair.Section = currentRoot; + sectionPair.Key = keyPair[0]; + if (keyPair.Length > 1) + value = keyPair[1]; + keyPairs.Add(sectionPair, value); + } + } + strLine = iniFile.ReadLine(); + } + } catch (Exception ex) { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } finally { + if (iniFile != null) + iniFile.Close(); + } + } + } + /// + /// 返回给定section的值,key对。 + /// + /// Section name + /// Key name + public String GetSetting(String sectionName, String settingName) { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + return (String)keyPairs[sectionPair]; + } + /// + /// 列出给定的Section的所有行 + /// + /// Section to enum. + public String[] EnumSection(String sectionName) { + ArrayList tmpArray = new ArrayList(); + foreach (SectionPair pair in keyPairs.Keys) { + if (pair.Section == sectionName.ToUpper()) + tmpArray.Add(pair.Key); + } + return (String[])tmpArray.ToArray(typeof(String)); + } + /// + /// 向要保存的表添加或替换设置。 + /// + /// Section to add under. + /// Key name to add. + /// Value of key. + public void AddSetting(String sectionName, String settingName, String settingValue) { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + if (keyPairs.ContainsKey(sectionPair)) + keyPairs.Remove(sectionPair); + keyPairs.Add(sectionPair, settingValue); + } + /// +<<<<<<< HEAD + /// 向要保存的表添加或替换设置,提供复写内容是否为大写 + /// + /// Section to add under. + /// Key name to add. + /// Value of key. + /// Value is upper . true:upper;false do not change + public void AddSetting(String sectionName, String settingName, String settingValue, bool isUpper) { + SectionPair pair; + pair.Section = sectionName.ToUpper(); + } + + + /// +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + /// 用空值添加或替换要保存的表的设置。 + /// + /// Section + /// Key + public void AddSetting(String sectionName, String settingName) { + AddSetting(sectionName, settingName, null); + } + /// + /// 删除设置 + /// + /// 指定Section + /// 添加的Key + public void DeleteSetting(String sectionName, String settingName) { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + if (keyPairs.ContainsKey(sectionPair)) + keyPairs.Remove(sectionPair); + } + /// + /// 保存设置到新文件。 + /// + /// 新的文件路径。 + public void SaveSettings(String newFilePath) { + ArrayList sections = new ArrayList(); + String tmpValue = ""; + String strToSave = ""; + foreach (SectionPair sectionPair in keyPairs.Keys) { + if (!sections.Contains(sectionPair.Section)) + sections.Add(sectionPair.Section); + } + foreach (String section in sections) { + strToSave += ("[" + section + "]\r\n"); + foreach (SectionPair sectionPair in keyPairs.Keys) { + if (sectionPair.Section == section) { + tmpValue = (String)keyPairs[sectionPair]; + if (tmpValue != null) + tmpValue = "=" + tmpValue; + strToSave += (sectionPair.Key + tmpValue + "\r\n"); + } + } + strToSave += "\r\n"; + } + try { + TextWriter tw = new StreamWriter(newFilePath); + tw.Write(strToSave); + tw.Close(); + } catch (Exception ex) { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + /// + /// 将设置保存回ini文件。 + /// + public void SaveSettings() { + SaveSettings(iniFilePath); + } + } +} diff --git a/AudioVisualizer/Entity/ConfigurationObject.cs b/AudioVisualizer/Entity/ConfigurationObject.cs new file mode 100644 index 0000000..fec42d3 --- /dev/null +++ b/AudioVisualizer/Entity/ConfigurationObject.cs @@ -0,0 +1,43 @@ +namespace AudioWallpaper.Entity { + [Serializable] + public class ConfigurationObject { + private GeneralConfigurationObjects? generalConfigurationObjects; + private VideoWallpaperConfigObject? videoWallpaperConfigObject; + public bool DeviceStateChange = false; + public bool SignRenderingStatus = false; + public bool RenderingStatus = true; + + public GeneralConfigurationObjects GeneralConfigurationObjects { + get { + if (generalConfigurationObjects != null) { + return generalConfigurationObjects; + } + return new GeneralConfigurationObjects(); + } + set { + if (value != null) { + generalConfigurationObjects = value; + } else { + generalConfigurationObjects = new GeneralConfigurationObjects(); + } + + } + } + public VideoWallpaperConfigObject VideoWallpaperConfigObject { + get { + if (videoWallpaperConfigObject != null) { + return videoWallpaperConfigObject; + } + return new VideoWallpaperConfigObject(); + } + set { + if (value != null) { + videoWallpaperConfigObject = value; + } else { + videoWallpaperConfigObject = new VideoWallpaperConfigObject(); + } + } + } + + } +} diff --git a/AudioVisualizer/Entity/CurrencyConfigObject.cs b/AudioVisualizer/Entity/CurrencyConfigObject.cs new file mode 100644 index 0000000..91108b0 --- /dev/null +++ b/AudioVisualizer/Entity/CurrencyConfigObject.cs @@ -0,0 +1,29 @@ +namespace AudioWallpaper.Entity { + public class CurrencyConfigObject { + public bool AutoStopWallpaper = true; + + private String ConfigName = "CurrencyConfig"; + + public bool SaveConfig(String configFilePath) { + try { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + configurationTools.AddSetting(ConfigName, "AutoStopWallpaper", AutoStopWallpaper.ToString()); + configurationTools.SaveSettings(); + return true; + } catch (Exception) { + return false; + } + } + public CurrencyConfigObject LoadConfig(string configFilePath) { + try { + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + AutoStopWallpaper = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "AutoStopWallpaper")); + return this; + + } catch (Exception) { + return this; + } + } + } +} diff --git a/AudioVisualizer/Entity/GeneralConfigurationObjects.cs b/AudioVisualizer/Entity/GeneralConfigurationObjects.cs new file mode 100644 index 0000000..7d9e330 --- /dev/null +++ b/AudioVisualizer/Entity/GeneralConfigurationObjects.cs @@ -0,0 +1,227 @@ +namespace AudioWallpaper.Entity { + [Serializable] + public class GeneralConfigurationObjects { + /// + /// 律动默认激进倍率 + /// + public float DefaultRadical = 2f; + /// + /// 默认频谱偏移量 + /// + public float DefaultOffset = 0.4f; + /// + /// 默认傅里叶变化量 + /// + public int DefaultFourierVariation = 512; + /// + /// 窗体函数 + /// + public string ApplyWindowFunc = "BARTLETT"; + /// + /// 默认颜色 + /// + public Color DefaultColor = Color.Blue; + /// + /// 默认停止颜色 + /// + public Color DefaultStopColor = Color.Red; + /// + /// 是否使用系统默认颜色 + /// + public bool UseDefaultColorOrNOt = true; + /// + /// 默认颜色数量 + /// + public int NumberOfColors = 256; + /// + /// 是否单色显示 + /// + public bool MonochromeOrNot = false; + /// + /// 默认背景颜色 + /// + public Color BackgroundColor = Color.Black; + /// + /// 是否使用背景图 + /// + public bool BackImgOrNot = false; + /// + /// 背景图片地址 + /// + public string? BackgroundImagePath = null; + /// + /// 是否画出波浪线 + /// + public bool WavyLine = true; + /// + /// 是否画出边框 + /// + public bool Frame = true; + /// + /// 是否画出中间圆形 + /// + public bool Rotundity = true; + /// + /// 是否平滑过渡中间圆形边条 + /// + public bool SmoothRotundity = true; + /// + /// 中间圆形边条间距 + /// + public uint RotunditySpacing = 3; + /// + /// 是否画出底边条形 + /// + public bool Stripe = true; + /// + /// 是否平滑过渡底边条形 + /// + public bool SmoothStripe = true; + /// + /// 底边条形间距 + /// + public uint StripeSpacing = 3; + /// + /// 显示器设备名 + /// + public string SettingForScreenName = ""; + /// + /// 当前显示器是否显示壁纸 + /// + public bool IsShow = true; + /// + /// 是否使用统一配置 + /// + public bool IsUsingUnifiedConfiguration = false; + /// + /// 当有其它程序全屏时是否停止壁纸 + /// + public bool AutoStopWallPaper = false; + /// + /// 配置名 + /// + public string DefaultConfiguration = "DefaultConfiguration"; + + public bool SaveConfig(string configFilePath) { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + + string ConfigName = SettingForScreenName + "_" + DefaultConfiguration; + + #region 将配置文件添加到配置工具对象中 + //默认律动激进倍率 + configurationTools.AddSetting(ConfigName, "DefaultRadical", DefaultRadical.ToString()); + //默认频谱偏移量 + configurationTools.AddSetting(ConfigName, "DefaultOffset", DefaultOffset.ToString()); + //默认傅里叶变化量 + configurationTools.AddSetting(ConfigName, "DefaultFourierVariation", DefaultFourierVariation.ToString()); + //窗体函数 + configurationTools.AddSetting(ConfigName, "ApplyWindowFunc", ApplyWindowFunc); + //默认开始颜色 + configurationTools.AddSetting(ConfigName, "DefaultColor", ColorTranslator.ToHtml(DefaultColor)); + //默认停止颜色 + configurationTools.AddSetting(ConfigName, "DefaultStopColor", ColorTranslator.ToHtml(DefaultStopColor)); + //是否使用默认颜色 + configurationTools.AddSetting(ConfigName, "UseDefaultColorOrNOt", UseDefaultColorOrNOt.ToString()); + //颜色数量 + configurationTools.AddSetting(ConfigName, "NumberOfColors", NumberOfColors.ToString()); + //是否单色显示 + configurationTools.AddSetting(ConfigName, "MonochromeOrNot", MonochromeOrNot.ToString()); + //默认背景颜色 + configurationTools.AddSetting(ConfigName, "BackgroundColor", ColorTranslator.ToHtml(BackgroundColor)); + //是否使用背景图 + configurationTools.AddSetting(ConfigName, "BackImgOrNot", BackImgOrNot.ToString()); + //背景图地址 + configurationTools.AddSetting(ConfigName, "BackgroundImagePath", BackgroundImagePath); + //是否画出波浪线 + configurationTools.AddSetting(ConfigName, "WavyLine", WavyLine.ToString()); + //是否画出边框 + configurationTools.AddSetting(ConfigName, "Frame", Frame.ToString()); + //是否画出中间圆形 + configurationTools.AddSetting(ConfigName, "Rotundity", Rotundity.ToString()); + //是否平滑过渡中间圆形 + configurationTools.AddSetting(ConfigName, "SmoothRotundity", SmoothRotundity.ToString()); + //中间圆形条边距 + configurationTools.AddSetting(ConfigName, "RotunditySpacing", RotunditySpacing.ToString()); + //是否画出底边条形 + configurationTools.AddSetting(ConfigName, "Stripe", Stripe.ToString()); + //是否平滑过渡底边条形 + configurationTools.AddSetting(ConfigName, "SmoothStripe", SmoothStripe.ToString()); + //底边条形间距 + configurationTools.AddSetting(ConfigName, "StripeSpacing", StripeSpacing.ToString()); + //当前显示器名 + configurationTools.AddSetting(ConfigName, "SettingForScreenName", SettingForScreenName); + //是否启用 + configurationTools.AddSetting(ConfigName, "IsShow", IsShow.ToString()); + //是否使用统一配置 + configurationTools.AddSetting(ConfigName, "IsUsingUnifiedConfiguration", IsUsingUnifiedConfiguration.ToString()); + //当有其它程序全屏时是否停止壁纸 + configurationTools.AddSetting(ConfigName, "AutoStopWallPaper", AutoStopWallPaper.ToString()); + #endregion + //保存配置 + configurationTools.SaveSettings(); + + return true; + } + public GeneralConfigurationObjects LoadConfiguration(string configFilePath, string name) { + //创建配置工具对象 + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + string ConfigName = name + "_" + DefaultConfiguration; + #region 为配置对象添加配置 + try { + //默认律动激进倍率 + DefaultRadical = float.Parse(configurationTools.GetSetting(ConfigName, "DefaultRadical")); + //默认频谱偏移量 + DefaultOffset = float.Parse(configurationTools.GetSetting(ConfigName, "DefaultOffset")); + //默认傅里叶变化量 + DefaultFourierVariation = int.Parse(configurationTools.GetSetting(ConfigName, "DefaultFourierVariation")); + //窗体函数 + ApplyWindowFunc = configurationTools.GetSetting(ConfigName, "ApplyWindowFunc"); + //默认颜色 + DefaultColor = ColorTranslator.FromHtml(configurationTools.GetSetting(ConfigName, "DefaultColor")); + //默认停止颜色 + DefaultStopColor = ColorTranslator.FromHtml(configurationTools.GetSetting(ConfigName, "DefaultStopColor")); + //是否使用默认颜色 + UseDefaultColorOrNOt = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "UseDefaultColorOrNOt")); + //颜色数量 + NumberOfColors = int.Parse(configurationTools.GetSetting(ConfigName, "NumberOfColors")); + //是否单色显示 + MonochromeOrNot = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "MonochromeOrNot")); + //默认背景颜色 + BackgroundColor = ColorTranslator.FromHtml(configurationTools.GetSetting(ConfigName, "BackgroundColor")); + //是否使用背景图 + BackImgOrNot = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "BackImgOrNot")); + //背景图地址 + BackgroundImagePath = configurationTools.GetSetting(ConfigName, "BackgroundImagePath"); + //是否画出波浪线 + WavyLine = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "WavyLine")); + //是否画出边框 + Frame = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "Frame")); + //是否画出中间圆形 + Rotundity = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "Rotundity")); + //是否平滑过渡中间圆形边条 + SmoothRotundity = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "SmoothRotundity")); + //中间圆形边条间距 + RotunditySpacing = uint.Parse(configurationTools.GetSetting(ConfigName,"RotunditySpacing")); + //是否画出底边条形 + Stripe = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "Stripe")); + //是否平滑过渡底边条形 + SmoothStripe = Convert.ToBoolean(configurationTools.GetSetting(ConfigName,"SmoothStripe")); + //底边条形间距 + StripeSpacing = uint.Parse(configurationTools.GetSetting(ConfigName, "StripeSpacing")); + //显示器名 + SettingForScreenName = configurationTools.GetSetting(ConfigName, "SettingForScreenName"); + //是否显示 + IsShow = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "IsShow")); + //是否使用统一配置 + IsUsingUnifiedConfiguration = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "IsUsingUnifiedConfiguration")); + //当有其它程序全屏时是否停止壁纸 + AutoStopWallPaper = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "AutoStopWallPaper")); + #endregion + } catch (Exception) { + return this; + } + return this; + } + } +} diff --git a/AudioVisualizer/Entity/VideoWallpaperConfigObject.cs b/AudioVisualizer/Entity/VideoWallpaperConfigObject.cs new file mode 100644 index 0000000..79df01b --- /dev/null +++ b/AudioVisualizer/Entity/VideoWallpaperConfigObject.cs @@ -0,0 +1,78 @@ +namespace AudioWallpaper.Entity { + [Serializable] + public class VideoWallpaperConfigObject { + /// + /// 视频资源播放地址 + /// + public string? Url = null; + /// + /// 视频播放音量 + /// + public int Volume = 100; + /// + /// 视频播放速度 + /// + public int Rate = 10; + /// + /// 是否显示第三方壁纸 + /// + public bool IsShow = false; + /// + /// 当有其它程序全屏时是否停止壁纸 + /// + public bool AutoStopWallPaper = false; + + /// + /// 多显示器配置保存 + /// + public string SettingForScreenName = ""; + + /// + /// 该配置名 + /// + public string SettingName = "VideoWallpaperConfig"; + + + + public void SaveConfig(string configFilePath) { + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + string ConfigName = SettingForScreenName + "_" + SettingName; + //视频播放地址 + configurationTools.AddSetting(ConfigName, "VideoUrl", Url); + //视频播放音量 + configurationTools.AddSetting(ConfigName, "VideoVolume", Volume.ToString()); + //视频播放速度 + configurationTools.AddSetting(ConfigName, "VideoRate", Rate.ToString()); + + //是否显示第三方壁纸 + configurationTools.AddSetting(ConfigName, "IsShow", IsShow.ToString()); + //当有其它程序全屏时是否停止壁纸 + configurationTools.AddSetting(ConfigName, "AutoStopWallPaper", AutoStopWallPaper.ToString()); + + configurationTools.SaveSettings(); + + } + public VideoWallpaperConfigObject LoadConfig(string configFilePath, string name) { + ConfigurationTools configurationTools = new ConfigurationTools(configFilePath); + string ConfigName = name + "_" + SettingName; + try { + //视频播放地址 + Url = configurationTools.GetSetting(ConfigName, "VideoUrl"); + //视频播放音量 + Volume = int.Parse(configurationTools.GetSetting(ConfigName, "VideoVolume")); + //视频播放速度 + Rate = int.Parse(configurationTools.GetSetting(ConfigName, "VideoRate")); + + //是否显示第三方壁纸 + IsShow = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "IsShow")); + //当有其它程序全屏时是否停止壁纸 + AutoStopWallPaper = Convert.ToBoolean(configurationTools.GetSetting(ConfigName, "AutoStopWallPaper")); + + return this; + } catch (Exception) { + return this; + } + } + + } +} diff --git a/AudioVisualizer/FM-channel.ico b/AudioVisualizer/FM-channel.ico new file mode 100644 index 0000000..ef0258d Binary files /dev/null and b/AudioVisualizer/FM-channel.ico differ diff --git a/AudioVisualizer/FormManager.cs b/AudioVisualizer/FormManager.cs new file mode 100644 index 0000000..6abf566 --- /dev/null +++ b/AudioVisualizer/FormManager.cs @@ -0,0 +1,255 @@ +using AudioWallpaper.Entity; +using Microsoft.Win32; +using NAudio.Wave; +using System.Diagnostics; +using System.IO.Pipes; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text.RegularExpressions; + +namespace AudioWallpaper { + public class FormManager { + public GetScreenInfo getScreenInfo = new GetScreenInfo(); + public Dictionary mainWindowForms = new(); + public Dictionary videoWallpaperForms = new(); + //public int ScreenCount = 0; + public Screen[] OldScreens; + public static int restart = 1; + public static bool isCreateWindow = false; + NamedPipeServerStream WallpaperReloadConfigPipe = new NamedPipeServerStream("WallpaperReloadConfigPipe", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous); + public FormManager() { + //Console.WriteLine("窗体管理器被加载"); + SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; + isCreateWindow = true; + LoadWindowSet(); + LoadNamePipes(); + //Console.WriteLine($"线程ID{Thread.CurrentThread.ManagedThreadId}"); + + } + public void LoadNamePipes() { + BinaryFormatter formatter = new BinaryFormatter(); + WallpaperReloadConfigPipe.WaitForConnectionAsync().ContinueWith(s => { + new Task(() => { + while (true) { + byte[] bytes = new byte[2048]; + int bytesRead = WallpaperReloadConfigPipe.Read(bytes, 0, bytes.Length); + using (MemoryStream memoryStream = new MemoryStream()) { + memoryStream.Write(bytes, 0, bytesRead); + memoryStream.Position = 0; + ConfigurationObject configurationObject = (ConfigurationObject)formatter.Deserialize(memoryStream); + if (configurationObject != null) { + SetFrom_ReloadConfig(configurationObject); + } + + } + } + }).Start(); + + }); + + } + + private void SetFrom_ReloadConfig(ConfigurationObject configurationObject) { + if (configurationObject.DeviceStateChange) { + foreach (var item in mainWindowForms) { + item.Value.capture.StopRecording(); + item.Value.capture.DataAvailable += null; + item.Value.capture.Dispose(); + item.Value.capture = new WasapiLoopbackCapture(); + item.Value.capture.WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(8192, 1); + item.Value.capture.DataAvailable += item.Value.Capture_DataAvailable; + item.Value.capture.StartRecording(); + + } + return; + } + + GeneralConfigurationObjects generalConfigurationObjects = configurationObject.GeneralConfigurationObjects; + MainWindowReLoadConfig(generalConfigurationObjects); + + + VideoWallpaperConfigObject videoWallpaperConfigObject = configurationObject.VideoWallpaperConfigObject; + VideoWindowReLoadConfig(videoWallpaperConfigObject); + + WinStatusChangeEvent(SetFrom.FullScreenWindowCount <= 0); + } + private void WinStatusChangeEvent(bool status) { + //循环所有窗体 + foreach (var item in mainWindowForms) { + item.Value.ChangeStatus(status); + } + foreach (var item in videoWallpaperForms) { + item.Value.ChangeVideoPlayerStatus(status); + } + } + + private void MainWindowReLoadConfig(GeneralConfigurationObjects generalConfigurationObjects) { + String wsn = generalConfigurationObjects.SettingForScreenName; + //获取对应的form + MainWindow? w = mainWindowForms.GetValueOrDefault(wsn); + if (w == null && generalConfigurationObjects.IsShow) { + //return; + Process.GetCurrentProcess()?.Kill(); + return; + } + if (w == null) { + return; + } + if (!generalConfigurationObjects.IsShow) { + w.Invoke(() => { + w.DisposeAppBarManager(); + w.Dispose(); + w.Close(); + mainWindowForms.Remove(wsn); + }); + return; + } + //使用统一配置 + if (generalConfigurationObjects.IsUsingUnifiedConfiguration) { + foreach (var item in mainWindowForms) { + item.Value.generalConfigurationObjects.IsUsingUnifiedConfiguration = true; + item.Value.ReShow(generalConfigurationObjects); + } + return; + } + + w.ReShow(generalConfigurationObjects); + } + private void VideoWindowReLoadConfig(VideoWallpaperConfigObject videoWallpaperConfigObject) { + String vsn = videoWallpaperConfigObject.SettingForScreenName; + VideoWallpaperWindow? v = videoWallpaperForms.GetValueOrDefault(vsn); + + if (v == null && videoWallpaperConfigObject.IsShow) { + Process.GetCurrentProcess()?.Kill(); + return; + } + if (v == null) { + return; + } + if (!videoWallpaperConfigObject.IsShow) { + v.Invoke(() => { + v.DisposeAppBarManager(); + v.VideoDispose(); + v.Dispose(); + v.Close(); + + videoWallpaperForms.Remove(vsn); + }); + return; + } + v.ReShow(videoWallpaperConfigObject); + + } + public void LoadWindowSet() { + //加载窗体设置 + //Console.WriteLine("窗体管理器正在初始化"); + ReCreateWindow(); + + } + private void SystemEvents_DisplaySettingsChanged(object? sender, EventArgs e) { + if (isCreateWindow) { + + isCreateWindow = false; + //Console.WriteLine("????"); + return; + } + SystemEvents.DisplaySettingsChanging -= SystemEvents_DisplaySettingsChanged; + Process.GetCurrentProcess()?.Kill(); + } + private bool IsDisplayChange() { + Screen[] screens = getScreenInfo.GetAllScreen(); + if (screens.Length != OldScreens.Length) { + return true; + } + for (int i = 0; i < screens.Length; i++) { + for (int j = 0; j < OldScreens.Length; j++) { + if (screens[i].DeviceName.Equals(OldScreens[j].DeviceName)) { + //这是同一个显示器 + if (screens[i].Bounds != OldScreens[j].Bounds) { + return true; + } + if (screens[i].WorkingArea != OldScreens[j].WorkingArea) { + return true; + } + } + } + } + return false; + } + public void CreateWindow() { + //获取显示器数量决定是否继续创建窗体 + Screen[] screens = getScreenInfo.GetAllScreen(); + OldScreens = screens; + for (int i = 0; i < screens.Length; i++) { + Screen screen = screens[i]; + GeneralConfigurationObjects configurationObject = new GeneralConfigurationObjects().LoadConfiguration(SetFrom.ConfigFilePath, screen.DeviceName); + if (configurationObject.IsShow) { + MainWindow mainWindow = new MainWindow(configurationObject); + mainWindow.FullScreenDetectedEvent += WinStatusChangeEvent; + mainWindowForms.Add(screen.DeviceName, mainWindow); + mainWindow.Show(); + continue; + } + VideoWallpaperConfigObject videoWallpaperConfigObject = new VideoWallpaperConfigObject().LoadConfig(SetFrom.ConfigFilePath, screen.DeviceName); + if (videoWallpaperConfigObject.IsShow) { + //Console.WriteLine("视频窗体被创建"); + VideoWallpaperWindow videoWallpaperWindow = new VideoWallpaperWindow(videoWallpaperConfigObject); + videoWallpaperWindow.FullScreenDetectedEvent += WinStatusChangeEvent; + videoWallpaperForms.Add(screen.DeviceName, videoWallpaperWindow); + videoWallpaperWindow.Show(); + + } + } + } + public void CorrectFormSizeAndPosition() { + foreach (var item in mainWindowForms) { + String key = item.Key; + Point point = new Point(0, 0); + Screen? screen = getScreenInfo.GetScreenForName(key); + if (screen != null) { + Size size = getScreenInfo.GetScreenScale(screen); + point = getScreenInfo.GetOffsetCorrection(screen); + //Console.WriteLine($"窗体{item.Key}该显示的位置{point}"); + //Console.WriteLine($"窗体{item.Key}的大小{size}"); + //Console.WriteLine($"窗体{item.Key}的实际位置和大小{item.Value.Location}"); + item.Value.ReShow(point.X, point.Y, size.Width, size.Height); + } + } + foreach (var item in videoWallpaperForms) { + String key = item.Key; + Point point = new Point(0, 0); + Screen? screen = getScreenInfo.GetScreenForName(key); + if (screen != null) { + Size size = getScreenInfo.GetScreenScale(screen); + point = getScreenInfo.GetOffsetCorrection(screen); + //Console.WriteLine($"窗体{item.Key}该显示的位置{point}"); + //Console.WriteLine($"窗体{item.Key}的大小{size}"); + //Console.WriteLine($"窗体{item.Key}的实际位置和大小{item.Value.Location}"); + item.Value.ReShow(point.X, point.Y, size.Width, size.Height); + } + } + } + public void ReCreateWindow() { + //关闭所有窗体 + foreach (var item in mainWindowForms) { + item.Value.Invoke(() => { + item.Value.DisposeAppBarManager(); + item.Value.Dispose(); + item.Value.Close(); + }); + } + foreach (var item in videoWallpaperForms) { + item.Value.Invoke(() => { + item.Value.DisposeAppBarManager(); + item.Value.VideoDispose(); + item.Value.Dispose(); + item.Value.Close(); + }); + } + mainWindowForms.Clear(); + videoWallpaperForms.Clear(); + //加载窗体 + CreateWindow(); + CorrectFormSizeAndPosition(); + } + } +} diff --git a/AudioVisualizer/GetScreenInfo.cs b/AudioVisualizer/GetScreenInfo.cs new file mode 100644 index 0000000..cccd89a --- /dev/null +++ b/AudioVisualizer/GetScreenInfo.cs @@ -0,0 +1,121 @@ +using System.Runtime.InteropServices; + +namespace AudioWallpaper { + public class GetScreenInfo { + + public GetScreenInfo() { + + } + + public string GetScreenName(Control obj) { + string name = null; + if (obj != null) { + name = Screen.FromControl(obj).DeviceName; + } + return name; + } + public Screen GetScreen(Control obj) { + Screen screen = null; + if (obj != null) { + screen = Screen.FromControl(obj); + } + return screen; + } + public Screen? GetScreenForName(String name) { + foreach (Screen s in GetAllScreen()) { + if (s.DeviceName.Equals(name)) { + return s; + } + } + return null; + } + public int GetScreenCount() { + + return Screen.AllScreens.Count(); + + } + public Screen[] GetAllScreen() { + return Screen.AllScreens; + } + /// + /// 获取显示器X,Y值基于窗体显示的修正值 + /// + /// 显示器 + /// 修正后窗体显示基准点 + public Point GetOffsetCorrection(Screen screen) { + //返回的基准点 + Point point = new Point(); + //所有显示器对象 + Screen[] screens = GetAllScreen(); + //主显示器 + Screen MainScreen = Screen.PrimaryScreen; + int offsetX = 0; + int offsetY = 0; + //位于主显示器左边最远的显示器距离 + int minX = 0; + int minY = 0; + + foreach (Screen sc in screens) { + if (sc.Bounds.Location.X < minX) { + minX = sc.Bounds.Location.X; + } + if (sc.Bounds.Location.Y < 0) { + minY = sc.Bounds.Location.Y; + } + } + //计算传入的显示器距离主显示器位置 + if (screen.Bounds.Location.X < 0) { + //该显示器在主显示器的左边 + offsetX = Math.Abs(screen.Bounds.Location.X); + point.X = Math.Abs(minX) - offsetX; + } + if (screen.Bounds.Location.Y < 0) { + //该显示器在主显示器的上边 + offsetY = Math.Abs(screen.Bounds.Location.Y); + point.Y = Math.Abs(minY) - offsetY; + } + if (screen.Bounds.Location.X >= 0) { + //在主显示器的右边或者,它就是主显示器 + //偏移主显示器缩放带来的误差 + point.X = Math.Abs(minX) + screen.Bounds.Location.X; + } + if (screen.Bounds.Location.Y >= 0) { + //在主显示器的下边 + point.Y = Math.Abs(minY) + screen.Bounds.Location.Y; + } + + //Console.WriteLine($"屏幕的位置{screen.Bounds.Location}"); + //Console.WriteLine($"Abs miX :{Math.Abs(minX)}"); + //Console.WriteLine($"offsetx {offsetX}"); + //Console.WriteLine($"新算法结果:{point}"); + + + return point; + + } + [DllImport("user32.dll")] + private static extern uint GetDpiForWindow([In] IntPtr hmonitor); + + #region Win32 API + + [DllImport("gdi32.dll", EntryPoint = "GetDeviceCaps")] + static extern int GetDeviceCaps(IntPtr hdc, int nIndex); + [DllImport("gdi32.dll", EntryPoint = "CreateDC")] + static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData); + [DllImport("user32.dll", EntryPoint = "ReleaseDC")] + static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc); + + #endregion + public Size GetScreenScale(Screen screen) { + IntPtr hdc = CreateDC(screen.DeviceName, null, null, IntPtr.Zero); + float yPixel = GetDeviceCaps(hdc, 117); + float xPixel = GetDeviceCaps(hdc, 118); + ReleaseDC(IntPtr.Zero, hdc); + + return new Size((int)xPixel, (int)yPixel); + } + + + } + +} diff --git a/AudioVisualizer/MainWindow.Designer.cs b/AudioVisualizer/MainWindow.Designer.cs new file mode 100644 index 0000000..4dc989a --- /dev/null +++ b/AudioVisualizer/MainWindow.Designer.cs @@ -0,0 +1,94 @@ +using System.Net.NetworkInformation; + +namespace AudioWallpaper { + partial class MainWindow { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + components = new System.ComponentModel.Container(); + drawingPanel = new Panel(); + dataTimer = new System.Windows.Forms.Timer(components); + drawingTimer = new System.Windows.Forms.Timer(components); + SuspendLayout(); + // + // drawingPanel + // + drawingPanel.AutoSize = true; + drawingPanel.Dock = DockStyle.Fill; + drawingPanel.Location = new Point(0, 0); + drawingPanel.Margin = new Padding(2); + drawingPanel.Name = "drawingPanel"; + drawingPanel.Size = new Size(560, 306); + drawingPanel.TabIndex = 0; + // + // dataTimer + // + dataTimer.Interval = 30; + dataTimer.Tick += DataTimer_Tick; + // + // drawingTimer + // + drawingTimer.Interval = 30; + drawingTimer.Tick += DrawingTimer_Tick; + // + // MainWindow + // + AutoScaleMode = AutoScaleMode.None; + BackColor = SystemColors.ActiveCaptionText; + ClientSize = new Size(560, 306); + Controls.Add(drawingPanel); + FormBorderStyle = FormBorderStyle.None; + Margin = new Padding(2); + MaximizeBox = false; + Name = "MainWindow"; + StartPosition = FormStartPosition.Manual; + Text = "Music Visualizer"; + FormClosed += MainWindow_FormClosed; + Load += MainWindow_Load; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + #region 自定义图标大小初始化方法 + /// + /// 自定义图标大小初始化方法 + /// + /// 需要设置的菜单项元素 + /// 图片 + /// 宽度 + /// 高度 + private void SetToolStripMenuItemImage(ToolStripItem toolStripItem, Image image, int width, int height) { + //取消菜单项自动大小 + toolStripItem.AutoSize = false; + //取消菜单项缩放 + toolStripItem.ImageScaling = ToolStripItemImageScaling.None; + //设置菜单项图标大小 + toolStripItem.Image = new Bitmap(image, new Size(width, height)); + } + #endregion + private System.Windows.Forms.Timer dataTimer; + private Panel drawingPanel; + private System.Windows.Forms.Timer drawingTimer; + } +} \ No newline at end of file diff --git a/AudioVisualizer/MainWindow.Designer.cs.orig b/AudioVisualizer/MainWindow.Designer.cs.orig new file mode 100644 index 0000000..95eb0bb --- /dev/null +++ b/AudioVisualizer/MainWindow.Designer.cs.orig @@ -0,0 +1,195 @@ +using System.Net.NetworkInformation; + +<<<<<<< HEAD +namespace AudioWallpaper { +======= +namespace AudioVisualizer { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + partial class MainWindow { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + components = new System.ComponentModel.Container(); +<<<<<<< HEAD + drawingPanel = new Panel(); + dataTimer = new System.Windows.Forms.Timer(components); + drawingTimer = new System.Windows.Forms.Timer(components); +======= + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow)); + drawingPanel = new Panel(); + dataTimer = new System.Windows.Forms.Timer(components); + drawingTimer = new System.Windows.Forms.Timer(components); + contextMenuStripSystemTray = new ContextMenuStrip(components); + SettingSToolStripMenuItem = new ToolStripMenuItem(); + ReStartAPPRToolStripMenuItem = new ToolStripMenuItem(); + ExitWallpaperToolStripMenuItem = new ToolStripMenuItem(); + AboutUsToolStripMenuItem = new ToolStripMenuItem(); + notifyIconSystemTray = new NotifyIcon(components); + contextMenuStripSystemTray.SuspendLayout(); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + SuspendLayout(); + // + // drawingPanel + // +<<<<<<< HEAD + drawingPanel.AutoSize = true; +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + drawingPanel.Dock = DockStyle.Fill; + drawingPanel.Location = new Point(0, 0); + drawingPanel.Margin = new Padding(2); + drawingPanel.Name = "drawingPanel"; + drawingPanel.Size = new Size(560, 306); + drawingPanel.TabIndex = 0; +<<<<<<< HEAD +======= + drawingPanel.MouseDoubleClick += DrawingPanel_MouseDoubleClick; +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // + // dataTimer + // + dataTimer.Interval = 30; + dataTimer.Tick += DataTimer_Tick; + // + // drawingTimer + // + drawingTimer.Interval = 30; + drawingTimer.Tick += DrawingTimer_Tick; + // +<<<<<<< HEAD + // MainWindow + // + AutoScaleMode = AutoScaleMode.None; +======= + // contextMenuStripSystemTray + // + contextMenuStripSystemTray.ImageScalingSize = new Size(36, 36); + contextMenuStripSystemTray.Items.AddRange(new ToolStripItem[] { SettingSToolStripMenuItem, ReStartAPPRToolStripMenuItem, ExitWallpaperToolStripMenuItem, AboutUsToolStripMenuItem }); + contextMenuStripSystemTray.Name = "contextMenuStripSystemTray"; + contextMenuStripSystemTray.Size = new Size(201, 194); + // + // SettingSToolStripMenuItem + // + //Image largeIcon = global::AudioVisualizer.Properties.Resources.setting; + //SettingSToolStripMenuItem.ImageScaling = ToolStripItemImageScaling.None; + //SettingSToolStripMenuItem.Image = new Bitmap(largeIcon, new Size(16, 16)); + //SettingSToolStripMenuItem.AutoSize = false; + SettingSToolStripMenuItem.Name = "SettingSToolStripMenuItem"; + SetToolStripMenuItemImage(SettingSToolStripMenuItem,global::AudioVisualizer.Properties.Resources.setting,16,16); + SettingSToolStripMenuItem.Size = new Size(200, 22); + SettingSToolStripMenuItem.Text = "设置&(S)"; + SettingSToolStripMenuItem.Click += SettingSToolStripMenuItem_Click; + // + // ReStartAPPRToolStripMenuItem + // + ReStartAPPRToolStripMenuItem.Name = "ReStartAPPRToolStripMenuItem"; + SetToolStripMenuItemImage(ReStartAPPRToolStripMenuItem, global::AudioVisualizer.Properties.Resources.reboot, 16, 16); + ReStartAPPRToolStripMenuItem.Size = new Size(200, 22); + ReStartAPPRToolStripMenuItem.Text = "重启APP&(R)"; + ReStartAPPRToolStripMenuItem.Click += ReStartAPPRToolStripMenuItem_Click; + // + // ExitWallpaperToolStripMenuItem + // + ExitWallpaperToolStripMenuItem.Name = "ExitWallpaperToolStripMenuItem"; + SetToolStripMenuItemImage(ExitWallpaperToolStripMenuItem, global::AudioVisualizer.Properties.Resources.exit, 16, 16); + ExitWallpaperToolStripMenuItem.Size = new Size(200, 22); + ExitWallpaperToolStripMenuItem.Text = "退出壁纸&(E)"; + ExitWallpaperToolStripMenuItem.Click += ExitWallpaperToolStripMenuItem_Click; + // + // AboutUsToolStripMenuItem + // + AboutUsToolStripMenuItem.Name = "AboutUsToolStripMenuItem"; + SetToolStripMenuItemImage(AboutUsToolStripMenuItem, global::AudioVisualizer.Properties.Resources.VersionInformation, 16, 16); + AboutUsToolStripMenuItem.Size = new Size(200, 22); + AboutUsToolStripMenuItem.Text = "关于我们&(A)"; + AboutUsToolStripMenuItem.Click += AboutUsToolStripMenuItem_Click; + // + // notifyIconSystemTray + // + notifyIconSystemTray.ContextMenuStrip = contextMenuStripSystemTray; + notifyIconSystemTray.Icon = (Icon)resources.GetObject("notifyIconSystemTray.Icon"); + notifyIconSystemTray.Text = "律动壁纸"; + notifyIconSystemTray.Visible = true; + // + // MainWindow + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + BackColor = SystemColors.ActiveCaptionText; + ClientSize = new Size(560, 306); + Controls.Add(drawingPanel); + FormBorderStyle = FormBorderStyle.None; + Margin = new Padding(2); +<<<<<<< HEAD + MaximizeBox = false; + Name = "MainWindow"; + StartPosition = FormStartPosition.Manual; + Text = "Music Visualizer"; + FormClosed += MainWindow_FormClosed; + Load += MainWindow_Load; + ResumeLayout(false); + PerformLayout(); +======= + Name = "MainWindow"; + Text = "Music Visualizer"; + FormClosed += MainWindow_FormClosed; + Load += MainWindow_Load; + SizeChanged += MainWindow_SizeChanged; + contextMenuStripSystemTray.ResumeLayout(false); + ResumeLayout(false); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + + #endregion + #region 自定义图标大小初始化方法 + /// + /// 自定义图标大小初始化方法 + /// + /// 需要设置的菜单项元素 + /// 图片 + /// 宽度 + /// 高度 + private void SetToolStripMenuItemImage(ToolStripItem toolStripItem, Image image, int width, int height) { + //取消菜单项自动大小 + toolStripItem.AutoSize = false; + //取消菜单项缩放 + toolStripItem.ImageScaling = ToolStripItemImageScaling.None; + //设置菜单项图标大小 + toolStripItem.Image = new Bitmap(image, new Size(width, height)); + } + #endregion + private System.Windows.Forms.Timer dataTimer; + private Panel drawingPanel; + private System.Windows.Forms.Timer drawingTimer; +<<<<<<< HEAD +======= + private ContextMenuStrip contextMenuStripSystemTray; + private ToolStripMenuItem ExitWallpaperToolStripMenuItem; + private NotifyIcon notifyIconSystemTray; + private ToolStripMenuItem SettingSToolStripMenuItem; + private ToolStripMenuItem ReStartAPPRToolStripMenuItem; + private ToolStripMenuItem AboutUsToolStripMenuItem; +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } +} \ No newline at end of file diff --git a/AudioVisualizer/MainWindow.cs b/AudioVisualizer/MainWindow.cs new file mode 100644 index 0000000..98286ca --- /dev/null +++ b/AudioVisualizer/MainWindow.cs @@ -0,0 +1,623 @@ +using AudioWallpaper.Entity; +using LibAudioVisualizer; +using NAudio.CoreAudioApi; +using NAudio.Wave; +using System.Drawing.Drawing2D; +using System.Numerics; + +namespace AudioWallpaper { + public partial class MainWindow : Form { + private IntPtr programIntPtr = IntPtr.Zero; + + public WasapiCapture capture; // Ƶ + public Visualizer visualizer; // ӻ + double[]? spectrumData; // Ƶ + + public Color[] allColors; // ɫ + + public GeneralConfigurationObjects generalConfigurationObjects; + public Bitmap backgroundImage; + //ǰƫֵʾ + public int offsetx = 0, offsety = 0; + public int width = 1920; + public int height = 1080; + + private AppBarManager appBarManager; + public delegate void FullScreenDetected(bool status); + public event FullScreenDetected FullScreenDetectedEvent; + + public MainWindow(GeneralConfigurationObjects configuration) { + appBarManager = new AppBarManager(Handle); + generalConfigurationObjects = configuration; + capture = new WasapiLoopbackCapture(); // Է + visualizer = new Visualizer(generalConfigurationObjects.DefaultFourierVariation); // ½һӻ, ʹ 256 иҶ任 + + allColors = GetAllHsvColors(generalConfigurationObjects.NumberOfColors); // ȡеĽɫ (HSV ɫ) + + capture.WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(8192, 2); // ָĸʽ, , 32λ, IeeeFloat , 8192 + capture.DataAvailable += Capture_DataAvailable; // ¼ + + + + InitializeComponent(); + Init(); + Win32.SetParent(this.Handle, programIntPtr);//ᴥDisplayChange¼еѧ + } + /// + /// ȡɫ + /// + /// ɫϢ + public Color[] GetAllHsvColors(int NumberOfColors) { + if (generalConfigurationObjects.MonochromeOrNot) { + return new Color[] { generalConfigurationObjects.DefaultColor }; + } else if (generalConfigurationObjects.UseDefaultColorOrNOt) { + return SystemDefaultColors(); + } else { + Color[] colors1 = GenerateColorsBetween(generalConfigurationObjects.DefaultColor, generalConfigurationObjects.DefaultStopColor, NumberOfColors / 2); + Color[] colors2 = GenerateColorsBetween(generalConfigurationObjects.DefaultStopColor, generalConfigurationObjects.DefaultColor, NumberOfColors / 2); + Color[] colors = new Color[colors1.Length + colors2.Length]; + Array.Copy(colors1, 0, colors, 0, colors1.Length); + Array.Copy(colors2, 0, colors, colors1.Length, colors2.Length); + return colors; + } + } + /// + /// ĬɫHSV еĻɫ (ͶȺȾΪֵ) + /// + /// е HSV ɫ( 256 * 6 , , ɫҲὥ) + public static Color[] SystemDefaultColors() { + Color[] result = new Color[256 * 6]; + + for (int i = 0; i < 256; i++) { + result[i] = Color.FromArgb(255, i, 0); + } + + for (int i = 0; i < 256; i++) { + result[256 + i] = Color.FromArgb(255 - i, 255, 0); + } + + for (int i = 0; i < 256; i++) { + result[512 + i] = Color.FromArgb(0, 255, i); + } + + for (int i = 0; i < 256; i++) { + result[768 + i] = Color.FromArgb(0, 255 - i, 255); + } + + for (int i = 0; i < 256; i++) { + result[1024 + i] = Color.FromArgb(i, 0, 255); + } + + for (int i = 0; i < 256; i++) { + result[1280 + i] = Color.FromArgb(255, 0, 255 - i); + } + return result; + } + /// + /// ȡɫɫ + /// + /// ʼɫ + /// ɫ + /// Ҫȡɫ + /// + public Color[] GenerateColorsBetween(Color color1, Color color2, int steps) { + Color[] colors = new Color[steps]; + + for (int i = 0; i < steps; i++) { + double t = (double)i / (steps - 1); // ֵİٷֱ + int red = (int)(color1.R + t * (color2.R - color1.R)); + int green = (int)(color1.G + t * (color2.G - color1.G)); + int blue = (int)(color1.B + t * (color2.B - color1.B)); + + colors[i] = Color.FromArgb(red, green, blue); + } + + return colors; + } + /// + /// ݵʱ, ӻ + /// + /// + /// + public void Capture_DataAvailable(object? sender, WaveInEventArgs e) { + int length = e.BytesRecorded / 4; // (ÿһ 4 ֽ) + double[] result = new double[length]; // + + for (int i = 0; i < length; i++) { + + result[i] = BitConverter.ToSingle(e.Buffer, i * 4)*generalConfigurationObjects.DefaultRadical; // ȡֵ + + //result[i] = db; + + } + visualizer.PushSampleData(result); // µIJ洢 ӻ + + } + double CalculateDB(double sample) { + return 20 * Math.Log10(Math.Abs(sample) + 1e-10); // СԱȡ + } + + /// + /// ˢƵԼʵƵݻ + /// + /// + /// + private void DataTimer_Tick(object? sender, EventArgs e) { + + double[] newSpectrumData = visualizer.GetSpectrumData(generalConfigurationObjects.ApplyWindowFunc); // ӿӻлȡƵ + newSpectrumData = Visualizer.MakeSmooth(newSpectrumData, 2); // ƽƵ + + if (spectrumData == null) // Ѿ洢ƵΪ, µƵֱӸֵȥ + { + spectrumData = newSpectrumData; + return; + } + + for (int i = 0; i < newSpectrumData.Length; i++) // ƵݺƵ֮ "мֵ" + { + double oldData = spectrumData[i]; + double newData = newSpectrumData[i]; + double lerpData = oldData + (newData - oldData) * generalConfigurationObjects.DefaultOffset; // ÿһִ, ƵֵĿֵƶ 20% (̫, Ч, ̫С, Ƶ׻ӳٵĸо) + spectrumData[i] = lerpData; + } + } + + /// + /// һ + /// + /// ͼĿ + /// ·ɫ + /// Ϸɫ + /// Ƶ + /// , + /// ˵Ŀ + /// ˵ʼX + /// ˵ʵY + /// Ƶ׵(ʹøֵԷת) + private void DrawGradient(Graphics g, Color down, Color up, double[] spectrumData, int pointCount, int drawingWidth, float xOffset, float yOffset, double scale) { + GraphicsPath path = new GraphicsPath(); + + PointF[] points = new PointF[pointCount + 2]; + for (int i = 0; i < pointCount; i++) { + double x = i * drawingWidth / pointCount + xOffset; + double y = spectrumData[i * spectrumData.Length / pointCount] * scale + yOffset; + points[i + 1] = new PointF((float)x, (float)y); + } + + points[0] = new PointF(xOffset, yOffset); + points[points.Length - 1] = new PointF(xOffset + drawingWidth, yOffset); + + path.AddCurve(points); + + float upP = (float)points.Min(v => v.Y); + + if (Math.Abs(upP - yOffset) < 1) + return; + + using Brush brush = new LinearGradientBrush(new PointF(0, yOffset), new PointF(0, upP), down, up); + g.FillPath(brush, path); + } + + /// + /// ƽ + /// + /// ͼĿ + /// ·ɫ + /// Ϸɫ + /// Ƶ + /// ε + /// ͼĿ + /// ͼʼ X + /// ͼʼ Y + /// ֮ļ() + /// + private void DrawGradientStrips(Graphics g, Color down, Color up, double[] spectrumData, int stripCount, int drawingWidth, float xOffset, float yOffset, float spacing, double scale) { + float stripWidth = (drawingWidth - spacing * stripCount) / stripCount; + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = stripWidth * i + spacing * i + xOffset; + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height + points[i] = new PointF((float)x, (float)y); + } + + float upP = (float)points.Min(v => v.Y < 0 ? yOffset + v.Y : yOffset); + float downP = (float)points.Max(v => v.Y < 0 ? yOffset : yOffset + v.Y); + + if (downP < yOffset) + downP = yOffset; + + if (Math.Abs(upP - downP) < 1) + return; + + using Brush brush = new LinearGradientBrush(new PointF(0, downP), new PointF(0, upP), down, up); + + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + float y = yOffset; + float height = p.Y; + + if (height < 0) { + y += height; + height = -height; + } + g.FillRectangle(brush, new RectangleF(p.X, generalConfigurationObjects.SmoothStripe ? y + stripWidth / 2 : y, stripWidth, height)); + + //ǷԵƽ + if (generalConfigurationObjects.SmoothStripe) { + //ƶ˵İԲʹƽ + float radius = stripWidth / 2; // Բİ뾶 + if (height > 0) { + g.FillEllipse(brush, new RectangleF(p.X, y, stripWidth, radius * 2)); + } else { + g.FillEllipse(brush, new RectangleF(p.X, y + height, stripWidth, radius * 2)); + } + } + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawCurve(Graphics g, Pen pen, double[] spectrumData, int pointCount, int drawingWidth, double xOffset, double yOffset, double scale) { + PointF[] points = new PointF[pointCount]; + for (int i = 0; i < pointCount; i++) { + //MessageBox.Show(spectrumData[0].ToString()); + if (spectrumData[i] == 0.0) { + continue; + } + double x = i * drawingWidth / pointCount + xOffset; + double y = spectrumData[i * spectrumData.Length / pointCount] * scale + yOffset; + + points[i] = new PointF((float)x, (float)y); + } + + g.DrawCurve(pen, points); + } + + /// + /// 򵥵Բ + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawCircleStrips(Graphics g, Brush brush, double[] spectrumData, int stripCount, double xOffset, double yOffset, double radius, double spacing, double rotation, double scale) { + double rotationAngle = Math.PI / 180 * rotation; + double blockWidth = MathF.PI * 2 / stripCount; // angle + double stripWidth = blockWidth - MathF.PI / 180 * spacing; // angle + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = blockWidth * i + rotationAngle; // angle + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height + points[i] = new PointF((float)x, (float)y); + } + + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + double sinStart = Math.Sin(p.X); + double sinEnd = Math.Sin(p.X + stripWidth); + double cosStart = Math.Cos(p.X); + double cosEnd = Math.Cos(p.X + stripWidth); + + PointF[] polygon = new PointF[] + { + new PointF((float)(cosStart * radius + xOffset), (float)(sinStart * radius + yOffset)), + new PointF((float)(cosEnd * radius + xOffset), (float)(sinEnd * radius + yOffset)), + new PointF((float)(cosEnd * (radius + p.Y) + xOffset), (float)(sinEnd * (radius + p.Y) + yOffset)), + new PointF((float)(cosStart * (radius + p.Y) + xOffset), (float)(sinStart * (radius + p.Y) + yOffset)), + }; + + g.FillPolygon(brush, polygon); + } + } + + /// + /// Բ + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawCircleGradientStrips(Graphics g, Color inner, Color outer, double[] spectrumData, int stripCount, double xOffset, double yOffset, double radius, double spacing, double rotation, double scale) { + double rotationAngle = Math.PI / 180 * rotation; + double blockWidth = Math.PI * 2 / stripCount; // angle + double stripWidth = blockWidth - MathF.PI / 180 * spacing; // angle + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = blockWidth * i + rotationAngle; // angle + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height + points[i] = new PointF((float)x, (float)y); + } + + double maxHeight = points.Max(v => v.Y); + double outerRadius = radius + maxHeight; + + PointF[] polygon = new PointF[4]; + GraphicsPath path = new GraphicsPath(); + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + double sinStart = Math.Sin(p.X); + double sinEnd = Math.Sin(p.X + stripWidth); + double cosStart = Math.Cos(p.X); + double cosEnd = Math.Cos(p.X + stripWidth); + + PointF + p1 = new PointF((float)(cosStart * radius + xOffset), (float)(sinStart * radius + yOffset)), + p2 = new PointF((float)(cosEnd * radius + xOffset), (float)(sinEnd * radius + yOffset)), + p3 = new PointF((float)(cosEnd * (radius + p.Y) + xOffset), (float)(sinEnd * (radius + p.Y) + yOffset)), + p4 = new PointF((float)(cosStart * (radius + p.Y) + xOffset), (float)(sinStart * (radius + p.Y) + yOffset)); + + polygon[0] = p1; + polygon[1] = p2; + polygon[2] = p3; + polygon[3] = p4; + + + + PointF innerP = new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); + PointF outerP = new PointF((p3.X + p4.X) / 2, (p3.Y + p4.Y) / 2); + + Vector2 offset = new Vector2(outerP.X - innerP.X, outerP.Y - innerP.Y); + if (MathF.Sqrt(offset.X * offset.X + offset.Y * offset.Y) < 1) // ˢ֮벻̫С + continue; + + try { + using LinearGradientBrush brush = new LinearGradientBrush(innerP, outerP, inner, outer); // ѧ bug, Աˢ OutMemoryException + g.FillPolygon(brush, polygon); // ʵϲӦ쳣... + } catch { } + } + } + + /// + /// 򵥵 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawStrips(Graphics g, Brush brush, double[] spectrumData, int stripCount, int drawingWidth, float xOffset, float yOffset, float spacing, double scale) { + float stripWidth = (drawingWidth - spacing * stripCount) / stripCount; + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = stripWidth * i + spacing * i + xOffset; + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height + points[i] = new PointF((float)x, (float)y); + } + + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + float y = yOffset; + float height = p.Y; + + if (height < 0) { + y += height; + height = -height; + } + + g.FillRectangle(brush, new RectangleF(p.X, y, stripWidth, height)); + } + } + + /// + /// ı߿ + /// + /// + /// + /// + /// + /// + /// + private void DrawGradientBorder(Graphics g, Color inner, Color outer, Rectangle area, double scale, float width) { + int thickness = (int)(width * scale); + if (thickness < 1) + return; + + Rectangle rect = new Rectangle(area.X, area.Y, area.Width, area.Height); + + Rectangle up = new Rectangle(rect.Location, new Size(rect.Width, thickness)); + Rectangle down = new Rectangle(new Point(rect.X, (int)(rect.X + rect.Height - scale * width)), new Size(rect.Width, thickness)); + Rectangle left = new Rectangle(rect.Location, new Size(thickness, rect.Height)); + Rectangle right = new Rectangle(new Point((int)(rect.X + rect.Width - scale * width), rect.Y), new Size(thickness, rect.Height)); + + LinearGradientBrush upB = new LinearGradientBrush(up, outer, inner, LinearGradientMode.Vertical); + LinearGradientBrush downB = new LinearGradientBrush(down, inner, outer, LinearGradientMode.Vertical); + LinearGradientBrush leftB = new LinearGradientBrush(left, outer, inner, LinearGradientMode.Horizontal); + LinearGradientBrush rightB = new LinearGradientBrush(right, inner, outer, LinearGradientMode.Horizontal); + + upB.WrapMode = downB.WrapMode = leftB.WrapMode = rightB.WrapMode = WrapMode.TileFlipXY; + + g.FillRectangle(upB, up); + g.FillRectangle(downB, down); + g.FillRectangle(leftB, left); + g.FillRectangle(rightB, right); + } + + int colorIndex = 0; + double rotation = 0; + BufferedGraphics? oldBuffer; + + private void DrawingTimer_Tick(object? sender, EventArgs e) { + if (spectrumData == null) + return; + + rotation += .1; + colorIndex++; + + Color color1 = allColors[colorIndex % allColors.Length]; + Color color2 = allColors[(colorIndex + 200) % allColors.Length]; + + double[] bassArea = Visualizer.TakeSpectrumOfFrequency(spectrumData, capture.WaveFormat.SampleRate, 250); // Ƶ + double bassScale = bassArea.Average() * 100; // µ () + double extraScale = Math.Min(drawingPanel.Width, drawingPanel.Height) / 6; // µ (ϴڴС) + + Rectangle border = new Rectangle(Point.Empty, drawingPanel.Size); + + BufferedGraphics buffer = BufferedGraphicsManager.Current.Allocate(drawingPanel.CreateGraphics(), drawingPanel.ClientRectangle); + Graphics g = buffer.Graphics; + + if (oldBuffer != null) { + //oldBuffer.Render(buffer.Graphics); // Ҫʵ "Ӱ" Ч, ȡעδ, ҽ g.Clear Ϊ g.FillRectange(xxx, ͸ĺɫ) + oldBuffer.Dispose(); + } + + using Pen pen = new Pen(Color.Pink); // Ƶõı + + g.SmoothingMode = SmoothingMode.HighQuality; // ˺, DZǸͼ + g.Clear(drawingPanel.BackColor); + if (backgroundImage != null && generalConfigurationObjects.BackImgOrNot) { + g.DrawImage(backgroundImage, 0, 0); + } + if (generalConfigurationObjects.Frame) { + DrawGradientBorder(g, Color.FromArgb(0, color1), color2, border, bassScale, drawingPanel.Width / 10); + } + if (generalConfigurationObjects.Stripe) { + DrawGradientStrips(g, color1, color2, spectrumData, spectrumData.Length, drawingPanel.Width, 0, drawingPanel.Height, generalConfigurationObjects.StripeSpacing, -drawingPanel.Height * 10); + } + if (generalConfigurationObjects.Rotundity) { + DrawCircleGradientStrips(g, color1, color2, spectrumData, spectrumData.Length, drawingPanel.Width / 2, drawingPanel.Height / 2, MathF.Min(drawingPanel.Width, drawingPanel.Height) / 4 + extraScale * bassScale, 1, rotation, drawingPanel.Width / 6 * 10); + } + if (generalConfigurationObjects.WavyLine) { + DrawCurve(g, pen, visualizer.SampleData, visualizer.SampleData.Length, drawingPanel.Width, 0, drawingPanel.Height / 2, MathF.Min(drawingPanel.Height / 10, 100)); + } + buffer.Render(); + oldBuffer = buffer; // һ buffer (֮Բȫֻʹһ Buffer Ϊ,,, ûܵڴС, ÿһ֡Ӧ) + } + + private void MainWindow_Load(object sender, EventArgs e) { + + SetBounds(offsetx, offsety, width, height); + + capture.StartRecording(); + dataTimer.Start(); + drawingTimer.Start(); + } + + private void MainWindow_FormClosed(object sender, FormClosedEventArgs e) { + Environment.Exit(0); + } + protected override void WndProc(ref Message m) { + if (appBarManager != null && m.Msg == appBarManager.uCallbackMessage) { + switch ((int)m.WParam) { + case AppBarManager.ABN_FULLSCREENAPP: + bool isFullScreen = m.LParam != IntPtr.Zero; + if (isFullScreen) { + SetFrom.FullScreenWindowCount++; + } else { + SetFrom.FullScreenWindowCount--; + } + ChangeStatus(SetFrom.FullScreenWindowCount <= 0); + FullScreenDetectedEvent(SetFrom.FullScreenWindowCount <= 0); + break; + + } + } + base.WndProc(ref m); + + } + public void DisposeAppBarManager() { + appBarManager.Dispose(); + } + public void ReShow(int x, int y, int width, int height) { + this.width = width; + this.height = height; + SetBounds(x, y, width, height); + LoadBack(); + //Win32.SetParent(this.Handle, IntPtr.Zero); + //Win32.SetParent(this.Handle, programIntPtr); + Refresh(); + } + public void ReShow(GeneralConfigurationObjects generalConfigurationObjects) { + this.generalConfigurationObjects = generalConfigurationObjects; + LoadBack(); + allColors = GetAllHsvColors(generalConfigurationObjects.NumberOfColors); + } + public void ChangeStatus(bool status) { + if (!status && generalConfigurationObjects.AutoStopWallPaper) { + dataTimer.Stop(); + drawingTimer.Stop(); + return; + } + Invoke(new Action(() => { + dataTimer.Start(); + drawingTimer.Start(); + })); + + } + //ر + public void LoadBack() { + if (generalConfigurationObjects.BackImgOrNot && generalConfigurationObjects.BackgroundImagePath != null) { + //BackgroundImage = Image.FromFile(generalConfigurationObjects.BackgroundImagePath); + using (var originalImage = Image.FromFile(generalConfigurationObjects.BackgroundImagePath)) { + double widthScale = (double)width / originalImage.Width; + double heightScale = (double)height / originalImage.Height; + double scale = Math.Min(widthScale, heightScale); + int newWidth = (int)(originalImage.Width * scale); + int newHeight = (int)(originalImage.Height * scale); + int bgioffsetX = (width - newWidth) / 2; + int bgioffsetY = (height - newHeight) / 2; + backgroundImage = new Bitmap(width, height); + using (var graphics = Graphics.FromImage(backgroundImage)) { + graphics.DrawImage(originalImage, bgioffsetX, bgioffsetY, newWidth, newHeight); + } + } + } else { + BackColor = generalConfigurationObjects.BackgroundColor; + } + } + public void Init() { + // ͨһڣشھ + programIntPtr = Win32.FindWindow("Progman", null); + + // ھЧ + if (programIntPtr != IntPtr.Zero) { + + IntPtr result = IntPtr.Zero; + + // Program Manager ڷ 0x52c һϢʱΪ0x3e81룩 + Win32.SendMessageTimeout(programIntPtr, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result); + + // + Win32.EnumWindows((hwnd, lParam) => { + // ҵ SHELLDLL_DefView ھ WorkerW + if (Win32.FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero) { + // ҵǰ WorkerW ڵģһ WorkerW ڡ + IntPtr tempHwnd = Win32.FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null); + // + Win32.ShowWindow(tempHwnd, 0); + } + return true; + }, IntPtr.Zero); + } + } + } + +} \ No newline at end of file diff --git a/AudioVisualizer/MainWindow.cs.orig b/AudioVisualizer/MainWindow.cs.orig new file mode 100644 index 0000000..1534e2a --- /dev/null +++ b/AudioVisualizer/MainWindow.cs.orig @@ -0,0 +1,823 @@ +<<<<<<< HEAD +using AudioWallpaper.Entity; +using LibAudioVisualizer; +using NAudio.CoreAudioApi; +using NAudio.Wave; +using System.Drawing.Drawing2D; +using System.Numerics; + +namespace AudioWallpaper { + public partial class MainWindow : Form { + private IntPtr programIntPtr = IntPtr.Zero; + + public WasapiCapture capture; // Ƶ + public Visualizer visualizer; // ӻ + double[]? spectrumData; // Ƶ + + public Color[] allColors; // ɫ + + public GeneralConfigurationObjects generalConfigurationObjects; + public Bitmap backgroundImage; + //ǰƫֵʾ + public int offsetx = 0, offsety = 0; + public int width = 1920; + public int height = 1080; + + private AppBarManager appBarManager; + public delegate void FullScreenDetected(bool status); + public event FullScreenDetected FullScreenDetectedEvent; + + public MainWindow(GeneralConfigurationObjects configuration) { + appBarManager = new AppBarManager(Handle); + generalConfigurationObjects = configuration; + capture = new WasapiLoopbackCapture(); // Է + visualizer = new Visualizer(generalConfigurationObjects.DefaultFourierVariation); // ½һӻ, ʹ 256 иҶ任 + + allColors = GetAllHsvColors(generalConfigurationObjects.NumberOfColors); // ȡеĽɫ (HSV ɫ) + + capture.WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(8192, 2); // ָĸʽ, , 32λ, IeeeFloat , 8192 + capture.DataAvailable += Capture_DataAvailable; // ¼ + + + + InitializeComponent(); + Init(); + Win32.SetParent(this.Handle, programIntPtr);//ᴥDisplayChange¼еѧ +======= +using LibAudioVisualizer; +using NAudio.CoreAudioApi; +using NAudio.Wave; +using System.Configuration; +using System.Diagnostics; +using System.Drawing.Drawing2D; +using System.Numerics; +using System.Runtime.InteropServices; + +namespace AudioVisualizer { + public partial class MainWindow : Form { + private IntPtr programIntPtr = IntPtr.Zero; + + WasapiCapture capture; // Ƶ + public Visualizer visualizer; // ӻ + double[]? spectrumData; // Ƶ + + public static Color[] allColors; // ɫ + + public static ConfigurationObject configurationObject = new ConfigurationObject(); + public Bitmap backgroundImage; + + public MainWindow() { + // + configurationObject.LoadConfiguration("./config.ini"); + + + capture = new WasapiLoopbackCapture(); // Է + visualizer = new Visualizer(configurationObject.DefaultFourierVariation); // ½һӻ, ʹ 256 иҶ任 + + allColors = GetAllHsvColors(configurationObject.NumberOfColors); // ȡеĽɫ (HSV ɫ) + + capture.WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(8192, 2); // ָĸʽ, , 32λ, IeeeFloat , 8192 + capture.DataAvailable += Capture_DataAvailable; // ¼ + InitializeComponent(); + + Init(); + Win32.SetParent(this.Handle, programIntPtr); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + /// + /// ȡɫ + /// + /// ɫϢ +<<<<<<< HEAD + public Color[] GetAllHsvColors(int NumberOfColors) { + if (generalConfigurationObjects.MonochromeOrNot) { + return new Color[] { generalConfigurationObjects.DefaultColor }; + } else if (generalConfigurationObjects.UseDefaultColorOrNOt) { + return SystemDefaultColors(); + } else { + Color[] colors1 = GenerateColorsBetween(generalConfigurationObjects.DefaultColor, generalConfigurationObjects.DefaultStopColor, NumberOfColors / 2); + Color[] colors2 = GenerateColorsBetween(generalConfigurationObjects.DefaultStopColor, generalConfigurationObjects.DefaultColor, NumberOfColors / 2); +======= + public static Color[] GetAllHsvColors(int NumberOfColors) { + if (configurationObject.MonochromeOrNot) { + return new Color[] { configurationObject.DefaultColor }; + } else if (configurationObject.UseDefaultColorOrNOt) { + return SystemDefaultColors(); + } else { + Color[] colors1 = GenerateColorsBetween(configurationObject.DefaultColor, configurationObject.DefaultStopColor, NumberOfColors / 2); + Color[] colors2 = GenerateColorsBetween(configurationObject.DefaultStopColor, configurationObject.DefaultColor, NumberOfColors / 2); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Color[] colors = new Color[colors1.Length + colors2.Length]; + Array.Copy(colors1, 0, colors, 0, colors1.Length); + Array.Copy(colors2, 0, colors, colors1.Length, colors2.Length); + return colors; + } + } + /// + /// ĬɫHSV еĻɫ (ͶȺȾΪֵ) + /// + /// е HSV ɫ( 256 * 6 , , ɫҲὥ) + public static Color[] SystemDefaultColors() { + Color[] result = new Color[256 * 6]; + + for (int i = 0; i < 256; i++) { + result[i] = Color.FromArgb(255, i, 0); + } + + for (int i = 0; i < 256; i++) { + result[256 + i] = Color.FromArgb(255 - i, 255, 0); + } + + for (int i = 0; i < 256; i++) { + result[512 + i] = Color.FromArgb(0, 255, i); + } + + for (int i = 0; i < 256; i++) { + result[768 + i] = Color.FromArgb(0, 255 - i, 255); + } + + for (int i = 0; i < 256; i++) { + result[1024 + i] = Color.FromArgb(i, 0, 255); + } + + for (int i = 0; i < 256; i++) { + result[1280 + i] = Color.FromArgb(255, 0, 255 - i); + } + return result; + } + /// + /// ȡɫɫ + /// + /// ʼɫ + /// ɫ + /// Ҫȡɫ + /// +<<<<<<< HEAD + public Color[] GenerateColorsBetween(Color color1, Color color2, int steps) { +======= + public static Color[] GenerateColorsBetween(Color color1, Color color2, int steps) { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Color[] colors = new Color[steps]; + + for (int i = 0; i < steps; i++) { + double t = (double)i / (steps - 1); // ֵİٷֱ + int red = (int)(color1.R + t * (color2.R - color1.R)); + int green = (int)(color1.G + t * (color2.G - color1.G)); + int blue = (int)(color1.B + t * (color2.B - color1.B)); + + colors[i] = Color.FromArgb(red, green, blue); + } + + return colors; + } + /// + /// ݵʱ, ӻ + /// + /// + /// +<<<<<<< HEAD + public void Capture_DataAvailable(object? sender, WaveInEventArgs e) { + int length = e.BytesRecorded / 4; // (ÿһ 4 ֽ) + double[] result = new double[length]; // + + for (int i = 0; i < length; i++) { + + result[i] = BitConverter.ToSingle(e.Buffer, i * 4)*generalConfigurationObjects.DefaultRadical; // ȡֵ + + //result[i] = db; + + } + visualizer.PushSampleData(result); // µIJ洢 ӻ + + } + double CalculateDB(double sample) { + return 20 * Math.Log10(Math.Abs(sample) + 1e-10); // СԱȡ +======= + private void Capture_DataAvailable(object? sender, WaveInEventArgs e) { + int length = e.BytesRecorded / 4; // (ÿһ 4 ֽ) + double[] result = new double[length]; // + + for (int i = 0; i < length; i++) + result[i] = BitConverter.ToSingle(e.Buffer, i * 4); // ȡֵ + + visualizer.PushSampleData(result); // µIJ洢 ӻ +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + + /// + /// ˢƵԼʵƵݻ + /// + /// + /// + private void DataTimer_Tick(object? sender, EventArgs e) { +<<<<<<< HEAD + + double[] newSpectrumData = visualizer.GetSpectrumData(generalConfigurationObjects.ApplyWindowFunc); // ӿӻлȡƵ +======= + double[] newSpectrumData = visualizer.GetSpectrumData(); // ӿӻлȡƵ +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + newSpectrumData = Visualizer.MakeSmooth(newSpectrumData, 2); // ƽƵ + + if (spectrumData == null) // Ѿ洢ƵΪ, µƵֱӸֵȥ + { + spectrumData = newSpectrumData; + return; + } + + for (int i = 0; i < newSpectrumData.Length; i++) // ƵݺƵ֮ "мֵ" + { + double oldData = spectrumData[i]; + double newData = newSpectrumData[i]; +<<<<<<< HEAD + double lerpData = oldData + (newData - oldData) * generalConfigurationObjects.DefaultOffset; // ÿһִ, ƵֵĿֵƶ 20% (̫, Ч, ̫С, Ƶ׻ӳٵĸо) +======= + double lerpData = oldData + (newData - oldData) * configurationObject.DefaultOffset; // ÿһִ, ƵֵĿֵƶ 20% (̫, Ч, ̫С, Ƶ׻ӳٵĸо) +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + spectrumData[i] = lerpData; + } + } + + /// + /// һ + /// + /// ͼĿ + /// ·ɫ + /// Ϸɫ + /// Ƶ + /// , + /// ˵Ŀ + /// ˵ʼX + /// ˵ʵY + /// Ƶ׵(ʹøֵԷת) + private void DrawGradient(Graphics g, Color down, Color up, double[] spectrumData, int pointCount, int drawingWidth, float xOffset, float yOffset, double scale) { + GraphicsPath path = new GraphicsPath(); + + PointF[] points = new PointF[pointCount + 2]; + for (int i = 0; i < pointCount; i++) { + double x = i * drawingWidth / pointCount + xOffset; + double y = spectrumData[i * spectrumData.Length / pointCount] * scale + yOffset; + points[i + 1] = new PointF((float)x, (float)y); + } + + points[0] = new PointF(xOffset, yOffset); + points[points.Length - 1] = new PointF(xOffset + drawingWidth, yOffset); + + path.AddCurve(points); + + float upP = (float)points.Min(v => v.Y); + + if (Math.Abs(upP - yOffset) < 1) + return; + + using Brush brush = new LinearGradientBrush(new PointF(0, yOffset), new PointF(0, upP), down, up); + g.FillPath(brush, path); + } + + /// + /// ƽ + /// + /// ͼĿ + /// ·ɫ + /// Ϸɫ + /// Ƶ + /// ε + /// ͼĿ + /// ͼʼ X + /// ͼʼ Y + /// ֮ļ() + /// + private void DrawGradientStrips(Graphics g, Color down, Color up, double[] spectrumData, int stripCount, int drawingWidth, float xOffset, float yOffset, float spacing, double scale) { + float stripWidth = (drawingWidth - spacing * stripCount) / stripCount; + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = stripWidth * i + spacing * i + xOffset; + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height +<<<<<<< HEAD + points[i] = new PointF((float)x, (float)y); +======= + points[i] = new PointF((float)x, (float)y + (float)(y * configurationObject.DefaultRadical)); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + + float upP = (float)points.Min(v => v.Y < 0 ? yOffset + v.Y : yOffset); + float downP = (float)points.Max(v => v.Y < 0 ? yOffset : yOffset + v.Y); + + if (downP < yOffset) + downP = yOffset; + + if (Math.Abs(upP - downP) < 1) + return; + + using Brush brush = new LinearGradientBrush(new PointF(0, downP), new PointF(0, upP), down, up); + + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + float y = yOffset; + float height = p.Y; + + if (height < 0) { + y += height; + height = -height; + } +<<<<<<< HEAD + g.FillRectangle(brush, new RectangleF(p.X, generalConfigurationObjects.SmoothStripe ? y + stripWidth / 2 : y, stripWidth, height)); + + //ǷԵƽ + if (generalConfigurationObjects.SmoothStripe) { + //ƶ˵İԲʹƽ + float radius = stripWidth / 2; // Բİ뾶 + if (height > 0) { + g.FillEllipse(brush, new RectangleF(p.X, y, stripWidth, radius * 2)); + } else { + g.FillEllipse(brush, new RectangleF(p.X, y + height, stripWidth, radius * 2)); + } + } +======= + + g.FillRectangle(brush, new RectangleF(p.X, y, stripWidth, height)); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawCurve(Graphics g, Pen pen, double[] spectrumData, int pointCount, int drawingWidth, double xOffset, double yOffset, double scale) { + PointF[] points = new PointF[pointCount]; + for (int i = 0; i < pointCount; i++) { + //MessageBox.Show(spectrumData[0].ToString()); + if (spectrumData[i] == 0.0) { + continue; + } + double x = i * drawingWidth / pointCount + xOffset; + double y = spectrumData[i * spectrumData.Length / pointCount] * scale + yOffset; + + points[i] = new PointF((float)x, (float)y); + } + + g.DrawCurve(pen, points); + } + + /// + /// 򵥵Բ + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawCircleStrips(Graphics g, Brush brush, double[] spectrumData, int stripCount, double xOffset, double yOffset, double radius, double spacing, double rotation, double scale) { + double rotationAngle = Math.PI / 180 * rotation; + double blockWidth = MathF.PI * 2 / stripCount; // angle + double stripWidth = blockWidth - MathF.PI / 180 * spacing; // angle + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = blockWidth * i + rotationAngle; // angle + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height + points[i] = new PointF((float)x, (float)y); + } + + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + double sinStart = Math.Sin(p.X); + double sinEnd = Math.Sin(p.X + stripWidth); + double cosStart = Math.Cos(p.X); + double cosEnd = Math.Cos(p.X + stripWidth); + + PointF[] polygon = new PointF[] + { + new PointF((float)(cosStart * radius + xOffset), (float)(sinStart * radius + yOffset)), + new PointF((float)(cosEnd * radius + xOffset), (float)(sinEnd * radius + yOffset)), + new PointF((float)(cosEnd * (radius + p.Y) + xOffset), (float)(sinEnd * (radius + p.Y) + yOffset)), + new PointF((float)(cosStart * (radius + p.Y) + xOffset), (float)(sinStart * (radius + p.Y) + yOffset)), + }; + + g.FillPolygon(brush, polygon); + } + } + + /// + /// Բ + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawCircleGradientStrips(Graphics g, Color inner, Color outer, double[] spectrumData, int stripCount, double xOffset, double yOffset, double radius, double spacing, double rotation, double scale) { + double rotationAngle = Math.PI / 180 * rotation; + double blockWidth = Math.PI * 2 / stripCount; // angle + double stripWidth = blockWidth - MathF.PI / 180 * spacing; // angle + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = blockWidth * i + rotationAngle; // angle + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height +<<<<<<< HEAD + points[i] = new PointF((float)x, (float)y); +======= + points[i] = new PointF((float)x, (float)y + (float)(y * configurationObject.DefaultRadical)); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + + double maxHeight = points.Max(v => v.Y); + double outerRadius = radius + maxHeight; + + PointF[] polygon = new PointF[4]; +<<<<<<< HEAD + GraphicsPath path = new GraphicsPath(); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + double sinStart = Math.Sin(p.X); + double sinEnd = Math.Sin(p.X + stripWidth); + double cosStart = Math.Cos(p.X); + double cosEnd = Math.Cos(p.X + stripWidth); + + PointF + p1 = new PointF((float)(cosStart * radius + xOffset), (float)(sinStart * radius + yOffset)), + p2 = new PointF((float)(cosEnd * radius + xOffset), (float)(sinEnd * radius + yOffset)), + p3 = new PointF((float)(cosEnd * (radius + p.Y) + xOffset), (float)(sinEnd * (radius + p.Y) + yOffset)), + p4 = new PointF((float)(cosStart * (radius + p.Y) + xOffset), (float)(sinStart * (radius + p.Y) + yOffset)); + + polygon[0] = p1; + polygon[1] = p2; + polygon[2] = p3; + polygon[3] = p4; + + +<<<<<<< HEAD + +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + PointF innerP = new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); + PointF outerP = new PointF((p3.X + p4.X) / 2, (p3.Y + p4.Y) / 2); + + Vector2 offset = new Vector2(outerP.X - innerP.X, outerP.Y - innerP.Y); + if (MathF.Sqrt(offset.X * offset.X + offset.Y * offset.Y) < 1) // ˢ֮벻̫С + continue; + + try { + using LinearGradientBrush brush = new LinearGradientBrush(innerP, outerP, inner, outer); // ѧ bug, Աˢ OutMemoryException + g.FillPolygon(brush, polygon); // ʵϲӦ쳣... + } catch { } + } + } + + /// + /// 򵥵 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + private void DrawStrips(Graphics g, Brush brush, double[] spectrumData, int stripCount, int drawingWidth, float xOffset, float yOffset, float spacing, double scale) { + float stripWidth = (drawingWidth - spacing * stripCount) / stripCount; + PointF[] points = new PointF[stripCount]; + + for (int i = 0; i < stripCount; i++) { + double x = stripWidth * i + spacing * i + xOffset; + double y = spectrumData[i * spectrumData.Length / stripCount] * scale; // height + points[i] = new PointF((float)x, (float)y); + } + + for (int i = 0; i < stripCount; i++) { + PointF p = points[i]; + float y = yOffset; + float height = p.Y; + + if (height < 0) { + y += height; + height = -height; + } + + g.FillRectangle(brush, new RectangleF(p.X, y, stripWidth, height)); + } + } + + /// + /// ı߿ + /// + /// + /// + /// + /// + /// + /// + private void DrawGradientBorder(Graphics g, Color inner, Color outer, Rectangle area, double scale, float width) { + int thickness = (int)(width * scale); + if (thickness < 1) + return; + + Rectangle rect = new Rectangle(area.X, area.Y, area.Width, area.Height); + + Rectangle up = new Rectangle(rect.Location, new Size(rect.Width, thickness)); + Rectangle down = new Rectangle(new Point(rect.X, (int)(rect.X + rect.Height - scale * width)), new Size(rect.Width, thickness)); + Rectangle left = new Rectangle(rect.Location, new Size(thickness, rect.Height)); + Rectangle right = new Rectangle(new Point((int)(rect.X + rect.Width - scale * width), rect.Y), new Size(thickness, rect.Height)); + + LinearGradientBrush upB = new LinearGradientBrush(up, outer, inner, LinearGradientMode.Vertical); + LinearGradientBrush downB = new LinearGradientBrush(down, inner, outer, LinearGradientMode.Vertical); + LinearGradientBrush leftB = new LinearGradientBrush(left, outer, inner, LinearGradientMode.Horizontal); + LinearGradientBrush rightB = new LinearGradientBrush(right, inner, outer, LinearGradientMode.Horizontal); + + upB.WrapMode = downB.WrapMode = leftB.WrapMode = rightB.WrapMode = WrapMode.TileFlipXY; + + g.FillRectangle(upB, up); + g.FillRectangle(downB, down); + g.FillRectangle(leftB, left); + g.FillRectangle(rightB, right); + } + + int colorIndex = 0; + double rotation = 0; + BufferedGraphics? oldBuffer; +<<<<<<< HEAD + +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + private void DrawingTimer_Tick(object? sender, EventArgs e) { + if (spectrumData == null) + return; + + rotation += .1; + colorIndex++; + + Color color1 = allColors[colorIndex % allColors.Length]; + Color color2 = allColors[(colorIndex + 200) % allColors.Length]; + + double[] bassArea = Visualizer.TakeSpectrumOfFrequency(spectrumData, capture.WaveFormat.SampleRate, 250); // Ƶ + double bassScale = bassArea.Average() * 100; // µ () + double extraScale = Math.Min(drawingPanel.Width, drawingPanel.Height) / 6; // µ (ϴڴС) + + Rectangle border = new Rectangle(Point.Empty, drawingPanel.Size); + + BufferedGraphics buffer = BufferedGraphicsManager.Current.Allocate(drawingPanel.CreateGraphics(), drawingPanel.ClientRectangle); + Graphics g = buffer.Graphics; + + if (oldBuffer != null) { + //oldBuffer.Render(buffer.Graphics); // Ҫʵ "Ӱ" Ч, ȡעδ, ҽ g.Clear Ϊ g.FillRectange(xxx, ͸ĺɫ) + oldBuffer.Dispose(); + } + + using Pen pen = new Pen(Color.Pink); // Ƶõı + + g.SmoothingMode = SmoothingMode.HighQuality; // ˺, DZǸͼ + g.Clear(drawingPanel.BackColor); +<<<<<<< HEAD + if (backgroundImage != null && generalConfigurationObjects.BackImgOrNot) { + g.DrawImage(backgroundImage, 0, 0); + } + if (generalConfigurationObjects.Frame) { + DrawGradientBorder(g, Color.FromArgb(0, color1), color2, border, bassScale, drawingPanel.Width / 10); + } + if (generalConfigurationObjects.Stripe) { + DrawGradientStrips(g, color1, color2, spectrumData, spectrumData.Length, drawingPanel.Width, 0, drawingPanel.Height, generalConfigurationObjects.StripeSpacing, -drawingPanel.Height * 10); + } + if (generalConfigurationObjects.Rotundity) { + DrawCircleGradientStrips(g, color1, color2, spectrumData, spectrumData.Length, drawingPanel.Width / 2, drawingPanel.Height / 2, MathF.Min(drawingPanel.Width, drawingPanel.Height) / 4 + extraScale * bassScale, 1, rotation, drawingPanel.Width / 6 * 10); + } + if (generalConfigurationObjects.WavyLine) { + DrawCurve(g, pen, visualizer.SampleData, visualizer.SampleData.Length, drawingPanel.Width, 0, drawingPanel.Height / 2, MathF.Min(drawingPanel.Height / 10, 100)); + } + buffer.Render(); +======= + if (backgroundImage != null && configurationObject.BackImgOrNot) { + g.DrawImage(backgroundImage, 0, 0); + } + if (configurationObject.Frame) { + DrawGradientBorder(g, Color.FromArgb(0, color1), color2, border, bassScale, drawingPanel.Width / 10); + } + if (configurationObject.Stripe) { + DrawGradientStrips(g, color1, color2, spectrumData, spectrumData.Length, drawingPanel.Width, 0, drawingPanel.Height, 3, -drawingPanel.Height * 10); + } + if (configurationObject.Rotundity) { + DrawCircleGradientStrips(g, color1, color2, spectrumData, spectrumData.Length, drawingPanel.Width / 2, drawingPanel.Height / 2, MathF.Min(drawingPanel.Width, drawingPanel.Height) / 4 + extraScale * bassScale, 1, rotation, drawingPanel.Width / 6 * 10); + } + if (configurationObject.WavyLine) { + DrawCurve(g, pen, visualizer.SampleData, visualizer.SampleData.Length, drawingPanel.Width, 0, drawingPanel.Height / 2, MathF.Min(drawingPanel.Height / 10, 100)); + } + buffer.Render(); + +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + oldBuffer = buffer; // һ buffer (֮Բȫֻʹһ Buffer Ϊ,,, ûܵڴС, ÿһ֡Ӧ) + } + + private void MainWindow_Load(object sender, EventArgs e) { +<<<<<<< HEAD + + SetBounds(offsetx, offsety, width, height); +======= + int iActulaWidth = Screen.PrimaryScreen.Bounds.Width; + + int iActulaHeight = Screen.PrimaryScreen.Bounds.Height; + SetBounds(0, 0, iActulaWidth, iActulaHeight); + if (configurationObject.BackImgOrNot && configurationObject.BackgroundImagePath != null) { + //BackgroundImage = Image.FromFile(configurationObject.BackgroundImagePath); + backgroundImage = new Bitmap(iActulaWidth, iActulaHeight); + using (var graphics = Graphics.FromImage(backgroundImage)) { + graphics.DrawImage(Image.FromFile(configurationObject.BackgroundImagePath), 0, 0, iActulaWidth, iActulaHeight); + } + } else { + BackColor = configurationObject.BackgroundColor; + } +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + + capture.StartRecording(); + dataTimer.Start(); + drawingTimer.Start(); + } + + private void MainWindow_FormClosed(object sender, FormClosedEventArgs e) { + Environment.Exit(0); + } +<<<<<<< HEAD + protected override void WndProc(ref Message m) { + if (appBarManager != null && m.Msg == appBarManager.uCallbackMessage) { + switch ((int)m.WParam) { + case AppBarManager.ABN_FULLSCREENAPP: + bool isFullScreen = m.LParam != IntPtr.Zero; + if (isFullScreen) { + SetFrom.FullScreenWindowCount++; + } else { + SetFrom.FullScreenWindowCount--; + } + ChangeStatus(SetFrom.FullScreenWindowCount <= 0); + FullScreenDetectedEvent(SetFrom.FullScreenWindowCount <= 0); + break; + + } + } + base.WndProc(ref m); + + } + public void DisposeAppBarManager() { + appBarManager.Dispose(); + } + public void ReShow(int x, int y, int width, int height) { + this.width = width; + this.height = height; + SetBounds(x, y, width, height); + LoadBack(); + //Win32.SetParent(this.Handle, IntPtr.Zero); + //Win32.SetParent(this.Handle, programIntPtr); + Refresh(); + } + public void ReShow(GeneralConfigurationObjects generalConfigurationObjects) { + this.generalConfigurationObjects = generalConfigurationObjects; + LoadBack(); + allColors = GetAllHsvColors(generalConfigurationObjects.NumberOfColors); + } + public void ChangeStatus(bool status) { + if (!status && generalConfigurationObjects.AutoStopWallPaper) { + dataTimer.Stop(); + drawingTimer.Stop(); + return; + } + Invoke(new Action(() => { + dataTimer.Start(); + drawingTimer.Start(); + })); + + } + //ر + public void LoadBack() { + if (generalConfigurationObjects.BackImgOrNot && generalConfigurationObjects.BackgroundImagePath != null) { + //BackgroundImage = Image.FromFile(generalConfigurationObjects.BackgroundImagePath); + using (var originalImage = Image.FromFile(generalConfigurationObjects.BackgroundImagePath)) { + double widthScale = (double)width / originalImage.Width; + double heightScale = (double)height / originalImage.Height; + double scale = Math.Min(widthScale, heightScale); + int newWidth = (int)(originalImage.Width * scale); + int newHeight = (int)(originalImage.Height * scale); + int bgioffsetX = (width - newWidth) / 2; + int bgioffsetY = (height - newHeight) / 2; + backgroundImage = new Bitmap(width, height); + using (var graphics = Graphics.FromImage(backgroundImage)) { + graphics.DrawImage(originalImage, bgioffsetX, bgioffsetY, newWidth, newHeight); + } + } + } else { + BackColor = generalConfigurationObjects.BackgroundColor; + } + } +======= + + private void DrawingPanel_MouseDoubleClick(object sender, MouseEventArgs e) { + //WindowState = WindowState != FormWindowState.Maximized ? FormWindowState.Maximized : FormWindowState.Normal; + //FormBorderStyle = WindowState == FormWindowState.Maximized ? FormBorderStyle.None : FormBorderStyle.Sizable; + + } +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + public void Init() { + // ͨһڣشھ + programIntPtr = Win32.FindWindow("Progman", null); + + // ھЧ + if (programIntPtr != IntPtr.Zero) { + + IntPtr result = IntPtr.Zero; + + // Program Manager ڷ 0x52c һϢʱΪ0x3e81룩 + Win32.SendMessageTimeout(programIntPtr, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result); + + // + Win32.EnumWindows((hwnd, lParam) => { + // ҵ SHELLDLL_DefView ھ WorkerW + if (Win32.FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero) { + // ҵǰ WorkerW ڵģһ WorkerW ڡ + IntPtr tempHwnd = Win32.FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null); +<<<<<<< HEAD +======= + +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // + Win32.ShowWindow(tempHwnd, 0); + } + return true; + }, IntPtr.Zero); + } + } +<<<<<<< HEAD + } + +======= + + private void ExitWallpaperToolStripMenuItem_Click(object sender, EventArgs e) { + Environment.Exit(0); + } + + private void SettingSToolStripMenuItem_Click(object sender, EventArgs e) { + SetFrom setFrom = SetFrom.ShowSetFrom(this); + if (!setFrom.Visible) { + setFrom.ShowDialog(); + } else { + setFrom.WindowState = FormWindowState.Normal; + setFrom.Activate(); + } + } + + private void MainWindow_SizeChanged(object sender, EventArgs e) { + int iActulaWidth = Screen.PrimaryScreen.Bounds.Width; + + int iActulaHeight = Screen.PrimaryScreen.Bounds.Height; + SetBounds(0, 0, iActulaWidth, iActulaHeight); + } + + private void ReStartAPPRToolStripMenuItem_Click(object sender, EventArgs e) { + Process.Start(Application.StartupPath + Application.ProductName + ".exe"); + Process.GetCurrentProcess()?.Kill(); + } + + private void AboutUsToolStripMenuItem_Click(object sender, EventArgs e) { + new VersionInformationForm().ShowDialog(); + } + } + public static class Win32 { + [DllImport("user32.dll")] + public static extern IntPtr FindWindow(string className, string winName); + + [DllImport("user32.dll")] + public static extern IntPtr SendMessageTimeout(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam, uint fuFlage, uint timeout, IntPtr result); + + [DllImport("user32.dll")] + public static extern bool EnumWindows(EnumWindowsProc proc, IntPtr lParam); + public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam); + + [DllImport("user32.dll")] + public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string winName); + + [DllImport("user32.dll")] + public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow); + + [DllImport("user32.dll")] + public static extern IntPtr SetParent(IntPtr hwnd, IntPtr parentHwnd); + } +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 +} \ No newline at end of file diff --git a/AudioVisualizer/MainWindow.resx b/AudioVisualizer/MainWindow.resx new file mode 100644 index 0000000..fb92b3b --- /dev/null +++ b/AudioVisualizer/MainWindow.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 67, 17 + + + 180, 14 + + \ No newline at end of file diff --git a/AudioVisualizer/MainWindow.resx.orig b/AudioVisualizer/MainWindow.resx.orig new file mode 100644 index 0000000..d60beab --- /dev/null +++ b/AudioVisualizer/MainWindow.resx.orig @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + +<<<<<<< HEAD + 67, 17 + + + 180, 14 + +======= + 17, 17 + + + 155, 18 + + + 330, 17 + + + 495, 17 + + + + + AAABAAEAAAAAAAEAIADDEwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAlw + SFlzAAAOxAAADsQBlSsOGwAAE3VJREFUeJzt3XuUJFV9B/Dvr+dR1cuywspDke3qXRAwAYnyxihgICcY + TESRqFE4RwWTg8h2zbKAIu6JSJZ1poZHkJz1eAI+IyBgApiokOhRBBVBMfFgkJ1qYBUFVhZ2u2pmun75 + g1nZR1VPP253V8/9fv7sW/f270xPfbtefS9ARERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERE85F+F0C9ccCq5/epJyNfVOCU7K30U2FQvLR3VVG/ + MQAWuP0runRI4o0AnKY7CT4TTrjnda8qygsGwALmVaIAgkq7/cPA5f/HAscPeIHy/Og5AEs6HYchsLDx + w12AjjhXR55eHE+bGo8hsHDxg12APD9SowOK/CCccI43OiblwnC/CyCzSmPxGdB59n+Vt4eTzm3b9blB + VM/O3l6PM1Yg5QqPABaYRt/+ClxQDdxr2unL04CFiR/qApO1ExdET9gwUfxuu/0BfDYM3HM7Ko5yh6cA + C0hpLLoe6bvvxmZ2fgCoq7x2SPRnKU3nAGAALDAMgAVEFKenvV6oz76+2TGemHQe9vzIXFGUawyAhWXf + tBc3XL34qRbH+T2APTovh/KOAUBpngEDwAoMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhi + DAAiizEAiCzGACCyGAOAyGIMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhiDAAiizEAumzZ + 6i37DdWHj04Uh0Pxi/pI/d4n1y16ot915cX+FS0OIXqPihwlioNRwI8U8sPqhHNLv2uzAQOgCzy/dhIg + dwFwMQso9MU12AQYni3gpYU39CthUHxP/yrtn9JYdIEorgJiAPKHvw8UJwr0D38jAdZNBe5FfSx1QePa + gAYdeP7ze8+MjPwawFCLXYMwcMc6ff+sdf1aXdjT86NHARzQ6TiZ41fi+yB6TCt9FPq+alD8oon3p5fw + CMCQciX+6xnR29vs7pcq8f3VSecmo0XlzRoteJvjOjIWMGxEIF/w/GhNGLgHdqEyazEADChXamer6A2d + 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 + + +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + \ No newline at end of file diff --git a/AudioVisualizer/MyPanel.cs b/AudioVisualizer/MyPanel.cs new file mode 100644 index 0000000..ba9c45a --- /dev/null +++ b/AudioVisualizer/MyPanel.cs @@ -0,0 +1,176 @@ +using System.ComponentModel; + +namespace AudioWallpaper { + public partial class PanelEx : Control { + private float _iBorderThickness = 1f; + private float _iOpacity = 1f; + private Brush _brushBg = null; + private Pen _penFg = null; + + public PanelEx() { + this.SetStyle(ControlStyles.SupportsTransparentBackColor | + ControlStyles.Opaque, true); + this.BackColor = Color.Transparent; + BackgroundBrush = Brushes.Transparent; + ForegroundPen = Pens.Black; + } + + #region Propertys + #region HideParent + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override string Text { + get { return base.Text; } + set { base.Text = value; } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override Image BackgroundImage { + get { return base.BackgroundImage; } + set { base.BackgroundImage = value; } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override ImageLayout BackgroundImageLayout { + get { + return base.BackgroundImageLayout; + } + set { + base.BackgroundImageLayout = value; + } + } + #endregion + + public override Color BackColor { + get { + return base.BackColor; + } + set { + base.BackColor = value; + ResetBgBrush(); + } + } + + //[EditorAttribute(typeof(BrushTypeEditor), typeof(System.Drawing.Design.UITypeEditor))] + //public double Background + //{ + // get; + // set; + //} + + public override Color ForeColor { + get { + return base.ForeColor; + } + set { + base.ForeColor = value; + ResetFgPen(); + } + } + + public float BorderThickness { + get { return _iBorderThickness; } + set { + if (value < 0) { + throw new Exception("Out off range"); + } + _iBorderThickness = value; + ResetFgPen(); + ResetDrawRect(); + } + } + + public virtual float RotateAngle { + get; + set; + } + + + public float Opacity { + get { return _iOpacity; } + set { + if (value > 1 || value < 0) { + throw new Exception("Out of range,the Value be in [0,1]"); + } else { + _iOpacity = value; + ResetBrushes(); + } + } + } + + protected override CreateParams CreateParams { + get { + CreateParams cp = base.CreateParams; + cp.ExStyle = 0x20; + return cp; + } + } + + protected virtual Brush BackgroundBrush { + get { return _brushBg; } + set { _brushBg = value; } + } + + protected virtual Pen ForegroundPen { + get { return _penFg; } + set { _penFg = value; } + } + + protected virtual RectangleF DrawRect { + get; + set; + } + #endregion + + #region Methods + protected override void OnPaint(PaintEventArgs e) { + base.OnPaint(e); + e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + } + + protected override void OnSizeChanged(EventArgs e) { + base.OnSizeChanged(e); + ResetDrawRect(); + } + protected override void OnPaddingChanged(EventArgs e) { + base.OnPaddingChanged(e); + ResetDrawRect(); + } + + protected void ResetBrushes() { + ResetBgBrush(); + ResetFgPen(); + } + + protected void ResetBgBrush() { + BackgroundBrush = new SolidBrush(GetOpacityColor(BackColor, Opacity)); + } + + protected void ResetFgPen() { + ForegroundPen = new Pen(GetOpacityColor(ForeColor, Opacity), BorderThickness); + } + + protected Color GetOpacityColor(Color baseColor, float op) { + return Color.FromArgb(Convert.ToInt32(op * baseColor.A), baseColor); + } + + private void ResetDrawRect() { + float dbwidth = 2 * BorderThickness; + float halfwidth = BorderThickness / 2; + int paddingWhith = Padding.Left + Padding.Right; + int paddingHeight = Padding.Top + Padding.Bottom; + if (dbwidth > Width - paddingWhith || dbwidth > Height - paddingHeight) { + DrawRect = this.Bounds; + } else { + DrawRect = new RectangleF(Padding.Left + halfwidth, + Padding.Top + halfwidth, + Width - BorderThickness - paddingWhith, + Height - BorderThickness - paddingHeight); + } + } + #endregion + } + +} diff --git a/AudioVisualizer/Program.cs b/AudioVisualizer/Program.cs new file mode 100644 index 0000000..7ea3d64 --- /dev/null +++ b/AudioVisualizer/Program.cs @@ -0,0 +1,70 @@ +using System.Runtime.InteropServices; + +namespace AudioWallpaper { + internal static class Program { + [DllImport("user32.dll")] + private static extern bool FlashWindow(IntPtr hWnd, bool bInvert); + + [DllImport("user32.dll")] + private static extern bool FlashWindowEx(int pfwi); + /// + /// The main entry point for the application. + /// + /// + [DllImport("kernel32.dll")] + public static extern bool AllocConsole(); + [DllImport("kernel32.dll")] + public static extern bool FreeConsole();//ͷŹĿ̨ + + [STAThread] + static void Main(String[] args) { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + bool createdNew; + bool DoesTheGuardianExist = false; + // һΨһĻƣȷΨһ + using (Mutex mutex = new Mutex(true, "{C8F8E5D9-6F05-4F92-BE10-DF7A4F5F97FB}", out createdNew)) { + if (createdNew) { + //жǷ + //if (args.Length < 1) { + // mutex.ReleaseMutex(); + // return; + //} + //if (!args[0].Equals("ManagerStart")) { + // mutex.ReleaseMutex(); + // return; + //} + //if (!args[1].Equals("1")) { + // mutex.ReleaseMutex(); + // return; + //} +#if !DEBUG + + Mutex Dmutex = new Mutex(true, "{C9F9E5D9-6F05-4F92-BE10-DF7A4F5F97FB}", out DoesTheGuardianExist); + if (DoesTheGuardianExist) { + Dmutex.ReleaseMutex(); + Dmutex.Dispose(); + mutex.ReleaseMutex(); + return; + } + Dmutex.Dispose(); +#endif + // ̨ + AllocConsole(); + // 崴ɹ˵ǰûʵ + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + ApplicationConfiguration.Initialize(); + + // + FormManager formManager = new FormManager(); + Application.Run(); + //ͷſ̨ + FreeConsole(); + mutex.ReleaseMutex(); // ͷŻ + } + } + } + + } +} \ No newline at end of file diff --git a/AudioVisualizer/Program.cs.orig b/AudioVisualizer/Program.cs.orig new file mode 100644 index 0000000..5df10be --- /dev/null +++ b/AudioVisualizer/Program.cs.orig @@ -0,0 +1,92 @@ +using System.Runtime.InteropServices; + +<<<<<<< HEAD +namespace AudioWallpaper { +======= +namespace AudioVisualizer { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + internal static class Program { + [DllImport("user32.dll")] + private static extern bool FlashWindow(IntPtr hWnd, bool bInvert); + + [DllImport("user32.dll")] + private static extern bool FlashWindowEx(int pfwi); + /// + /// The main entry point for the application. + /// +<<<<<<< HEAD + /// + [DllImport("kernel32.dll")] + public static extern bool AllocConsole(); + [DllImport("kernel32.dll")] + public static extern bool FreeConsole();//ͷŹĿ̨ + + [STAThread] + static void Main(String[] args) { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + bool createdNew; + bool DoesTheGuardianExist = false; + // һΨһĻƣȷΨһ + using (Mutex mutex = new Mutex(true, "{C8F8E5D9-6F05-4F92-BE10-DF7A4F5F97FB}", out createdNew)) { + if (createdNew) { + //жǷ + //if (args.Length < 1) { + // mutex.ReleaseMutex(); + // return; + //} + //if (!args[0].Equals("ManagerStart")) { + // mutex.ReleaseMutex(); + // return; + //} + //if (!args[1].Equals("1")) { + // mutex.ReleaseMutex(); + // return; + //} +#if !DEBUG + + Mutex Dmutex = new Mutex(true, "{C9F9E5D9-6F05-4F92-BE10-DF7A4F5F97FB}", out DoesTheGuardianExist); + if (DoesTheGuardianExist) { + Dmutex.ReleaseMutex(); + Dmutex.Dispose(); + mutex.ReleaseMutex(); + return; + } + Dmutex.Dispose(); +#endif + // ̨ + AllocConsole(); +======= + [STAThread] + static void Main() { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + bool createdNew; + // һΨһĻƣȷΨһ + using (Mutex mutex = new Mutex(true, "{C8F8E5D9-6F05-4F92-BE10-DF7A4F5F97FB}", out createdNew)) { + if (createdNew) { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // 崴ɹ˵ǰûʵ + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + ApplicationConfiguration.Initialize(); +<<<<<<< HEAD + + // + FormManager formManager = new FormManager(); + Application.Run(); + //ͷſ̨ + FreeConsole(); +======= + Application.Run(new MainWindow()); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + mutex.ReleaseMutex(); // ͷŻ + } + } + } +<<<<<<< HEAD + +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } +} \ No newline at end of file diff --git a/AudioVisualizer/Properties/PublishProfiles/FolderProfile1.pubxml b/AudioVisualizer/Properties/PublishProfiles/FolderProfile1.pubxml new file mode 100644 index 0000000..da35d97 --- /dev/null +++ b/AudioVisualizer/Properties/PublishProfiles/FolderProfile1.pubxml @@ -0,0 +1,13 @@ + + + + + Release + Any CPU + bin\Release\net6.0-windows\publish\ + FileSystem + <_TargetId>Folder + + \ No newline at end of file diff --git a/AudioVisualizer/Properties/PublishProfiles/FolderProfile1.pubxml.user b/AudioVisualizer/Properties/PublishProfiles/FolderProfile1.pubxml.user new file mode 100644 index 0000000..e9ea52e --- /dev/null +++ b/AudioVisualizer/Properties/PublishProfiles/FolderProfile1.pubxml.user @@ -0,0 +1,6 @@ + + + + diff --git a/AudioVisualizer/Properties/PublishProfiles/默认win10 64 依赖框架.pubxml b/AudioVisualizer/Properties/PublishProfiles/默认win10 64 依赖框架.pubxml new file mode 100644 index 0000000..e7f628a --- /dev/null +++ b/AudioVisualizer/Properties/PublishProfiles/默认win10 64 依赖框架.pubxml @@ -0,0 +1,18 @@ + + + + + Release + Any CPU + bin\Release\net6.0-windows\publish\win-x64\ + FileSystem + <_TargetId>Folder + net6.0-windows + win-x64 + false + false + true + + \ No newline at end of file diff --git a/AudioVisualizer/Properties/PublishProfiles/默认win10 64 依赖框架.pubxml.user b/AudioVisualizer/Properties/PublishProfiles/默认win10 64 依赖框架.pubxml.user new file mode 100644 index 0000000..af2b2a9 --- /dev/null +++ b/AudioVisualizer/Properties/PublishProfiles/默认win10 64 依赖框架.pubxml.user @@ -0,0 +1,10 @@ + + + + + True|2024-09-16T05:28:12.4883887Z;False|2024-09-15T14:54:39.4096870+08:00;True|2024-07-06T21:39:30.9825159+08:00;True|2024-07-03T04:13:41.1394986+08:00;False|2024-07-03T04:12:59.2893619+08:00;True|2024-07-01T05:06:24.1367448+08:00;True|2024-07-01T05:02:36.4823466+08:00;True|2024-07-01T04:46:59.2121010+08:00;True|2024-01-21T20:14:21.6948634+08:00;True|2024-01-17T19:27:25.9806490+08:00;False|2024-01-17T19:25:05.5783143+08:00;True|2023-12-22T11:58:53.2362501+08:00;True|2023-12-22T10:49:44.8516367+08:00;True|2023-12-22T10:49:03.8170596+08:00;True|2023-12-22T10:36:46.6196209+08:00;True|2023-12-22T10:36:12.8935472+08:00;True|2023-09-27T08:32:05.6491812+08:00;True|2023-09-26T11:05:25.7324987+08:00;True|2023-09-26T11:05:03.1754028+08:00;True|2023-09-26T11:04:18.9806738+08:00;True|2023-09-26T11:03:15.6077214+08:00;True|2023-09-26T10:43:57.0321057+08:00;True|2023-09-26T10:42:48.3370646+08:00;True|2023-09-26T10:39:54.8449024+08:00;True|2023-09-22T12:00:16.8730995+08:00;True|2023-09-22T11:00:49.7372040+08:00;True|2023-09-22T10:59:01.9330159+08:00;True|2023-09-22T10:39:59.9135149+08:00;True|2023-09-20T19:22:38.0523342+08:00;True|2023-09-20T19:02:31.0651458+08:00;True|2023-09-20T08:50:23.8413611+08:00;True|2023-09-20T08:48:53.9236985+08:00;True|2023-09-20T08:48:06.8484981+08:00;True|2023-09-20T08:47:08.4124127+08:00;True|2023-09-19T20:19:54.7069919+08:00;True|2023-09-19T20:15:39.3422047+08:00;True|2023-09-19T20:03:01.7485613+08:00;True|2023-09-19T20:01:49.9576023+08:00;True|2023-09-19T15:02:02.6768088+08:00;True|2023-09-19T14:41:38.2193731+08:00;True|2023-09-19T14:34:19.6704409+08:00;True|2023-09-19T14:31:22.8745473+08:00;True|2023-09-19T14:30:40.4650538+08:00; + + + \ No newline at end of file diff --git a/AudioVisualizer/Properties/Resources.Designer.cs b/AudioVisualizer/Properties/Resources.Designer.cs new file mode 100644 index 0000000..bf3b55d --- /dev/null +++ b/AudioVisualizer/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace AudioWallpaper.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AudioWallpaper.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap exit { + get { + object obj = ResourceManager.GetObject("exit", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。 + /// + internal static System.Drawing.Icon FM_channel { + get { + object obj = ResourceManager.GetObject("FM_channel", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap reboot { + get { + object obj = ResourceManager.GetObject("reboot", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap setting { + get { + object obj = ResourceManager.GetObject("setting", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap VersionInformation { + get { + object obj = ResourceManager.GetObject("VersionInformation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/AudioVisualizer/Properties/Resources.Designer.cs.orig b/AudioVisualizer/Properties/Resources.Designer.cs.orig new file mode 100644 index 0000000..dab9830 --- /dev/null +++ b/AudioVisualizer/Properties/Resources.Designer.cs.orig @@ -0,0 +1,124 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +<<<<<<< HEAD +namespace AudioWallpaper.Properties { +======= +namespace AudioVisualizer.Properties { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { +<<<<<<< HEAD + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AudioWallpaper.Properties.Resources", typeof(Resources).Assembly); +======= + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AudioVisualizer.Properties.Resources", typeof(Resources).Assembly); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap exit { + get { + object obj = ResourceManager.GetObject("exit", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// +<<<<<<< HEAD + /// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。 + /// + internal static System.Drawing.Icon FM_channel { + get { + object obj = ResourceManager.GetObject("FM_channel", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap reboot { + get { + object obj = ResourceManager.GetObject("reboot", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap setting { + get { + object obj = ResourceManager.GetObject("setting", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap VersionInformation { + get { + object obj = ResourceManager.GetObject("VersionInformation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/AudioVisualizer/Properties/Resources.resx b/AudioVisualizer/Properties/Resources.resx new file mode 100644 index 0000000..5f339c1 --- /dev/null +++ b/AudioVisualizer/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\VersionInformation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\reboot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\setting.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\exit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\FM-channel.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/AudioVisualizer/Properties/Resources.resx.orig b/AudioVisualizer/Properties/Resources.resx.orig new file mode 100644 index 0000000..b79cc11 --- /dev/null +++ b/AudioVisualizer/Properties/Resources.resx.orig @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\VersionInformation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\reboot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\setting.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\exit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + +<<<<<<< HEAD + + ..\Resources\FM-channel.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + \ No newline at end of file diff --git a/AudioVisualizer/Resources/FM-channel.ico b/AudioVisualizer/Resources/FM-channel.ico new file mode 100644 index 0000000..ef0258d Binary files /dev/null and b/AudioVisualizer/Resources/FM-channel.ico differ diff --git a/AudioVisualizer/Resources/Image1.bmp b/AudioVisualizer/Resources/Image1.bmp new file mode 100644 index 0000000..55516c7 Binary files /dev/null and b/AudioVisualizer/Resources/Image1.bmp differ diff --git a/AudioVisualizer/Resources/VersionInformation.png b/AudioVisualizer/Resources/VersionInformation.png new file mode 100644 index 0000000..427a7d7 Binary files /dev/null and b/AudioVisualizer/Resources/VersionInformation.png differ diff --git a/AudioVisualizer/Resources/exit.png b/AudioVisualizer/Resources/exit.png new file mode 100644 index 0000000..fc2ab21 Binary files /dev/null and b/AudioVisualizer/Resources/exit.png differ diff --git a/AudioVisualizer/Resources/reboot.png b/AudioVisualizer/Resources/reboot.png new file mode 100644 index 0000000..3fe6350 Binary files /dev/null and b/AudioVisualizer/Resources/reboot.png differ diff --git a/AudioVisualizer/Resources/setting.png b/AudioVisualizer/Resources/setting.png new file mode 100644 index 0000000..a20c5d1 Binary files /dev/null and b/AudioVisualizer/Resources/setting.png differ diff --git a/AudioVisualizer/SetForm.Designer.cs b/AudioVisualizer/SetForm.Designer.cs new file mode 100644 index 0000000..32eaa35 --- /dev/null +++ b/AudioVisualizer/SetForm.Designer.cs @@ -0,0 +1,953 @@ +namespace AudioWallpaper { + partial class SetFrom { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetFrom)); + tabControl = new TabControl(); + Routine = new TabPage(); + MultiMonitorCompatibility = new GroupBox(); + RoutineCheckBoxAutoStop = new CheckBox(); + LableRoutineAutoStop = new Label(); + checkBoxUsingUnifiedConfiguration = new CheckBox(); + LabelUsingUnifiedConfiguration = new Label(); + DisplayName = new Label(); + checkBoxIsShow = new CheckBox(); + IsTheMonitorEnabled = new Label(); + DisplayRegistrationName = new Label(); + groupBoxColor = new GroupBox(); + labelBackgroundImg = new Label(); + BackgroundImage = new PictureBox(); + labelBackImgOrBackColor = new Label(); + checkBoxImgOrColor = new CheckBox(); + labelBackgroundCOlor = new Label(); + BackgroundColor = new PictureBox(); + checkBoxUseDefault = new CheckBox(); + labelUseSystemColor = new Label(); + labelNumberOfColors = new Label(); + numericUpDownNumberOfColors = new NumericUpDown(); + StartColor = new PictureBox(); + labelMonochrome = new Label(); + StopColor = new PictureBox(); + checkBoxMonochrome = new CheckBox(); + labelStartColor = new Label(); + labelStopColor = new Label(); + buttonReset = new Button(); + buttonSave = new Button(); + Display = new GroupBox(); + label2 = new Label(); + checkBoxSmoothStripe = new CheckBox(); + checkBoxBottomEdge = new CheckBox(); + checkBoxRotundity = new CheckBox(); + checkBoxFrame = new CheckBox(); + checkBoxWavyLine = new CheckBox(); + labelBottomEdge = new Label(); + labelRotundity = new Label(); + labelFrame = new Label(); + labelWaveLineDisplay = new Label(); + Effect = new GroupBox(); + labelWindowFuncText = new Label(); + selectWindowFunc = new ComboBox(); + numericUpDownFourierVariation = new NumericUpDown(); + labelFourierVariation = new Label(); + numericUpDownSpectralShift = new NumericUpDown(); + numericUpDownRhythmicMagnification = new NumericUpDown(); + labelSpectralShift = new Label(); + labelRhythmicMagnification = new Label(); + Other = new TabPage(); + ThirdParty = new GroupBox(); + CheckBoxAutoStop = new CheckBox(); + OtherDisplayName = new Label(); + LabelAutoStop = new Label(); + label3 = new Label(); + panelEx1 = new PanelEx(); + VideoRateLabel = new Label(); + trackBarVideoVolume = new TrackBar(); + VideoVolumeLabel = new Label(); + trackBarVideoRate = new TrackBar(); + videoView1 = new LibVLCSharp.WinForms.VideoView(); + UseOtherWallpaper = new CheckBox(); + label1 = new Label(); + OtherResetBtn = new Button(); + OtherSaveBtn = new Button(); + label4 = new Label(); + numericUpDownStripeSpacing = new NumericUpDown(); + tabControl.SuspendLayout(); + Routine.SuspendLayout(); + MultiMonitorCompatibility.SuspendLayout(); + groupBoxColor.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)BackgroundImage).BeginInit(); + ((System.ComponentModel.ISupportInitialize)BackgroundColor).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumberOfColors).BeginInit(); + ((System.ComponentModel.ISupportInitialize)StartColor).BeginInit(); + ((System.ComponentModel.ISupportInitialize)StopColor).BeginInit(); + Display.SuspendLayout(); + Effect.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFourierVariation).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpectralShift).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRhythmicMagnification).BeginInit(); + Other.SuspendLayout(); + ThirdParty.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoVolume).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoRate).BeginInit(); + ((System.ComponentModel.ISupportInitialize)videoView1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStripeSpacing).BeginInit(); + SuspendLayout(); + // + // tabControl + // + tabControl.Controls.Add(Routine); + tabControl.Controls.Add(Other); + tabControl.Dock = DockStyle.Fill; + tabControl.Location = new Point(0, 0); + tabControl.Name = "tabControl"; + tabControl.SelectedIndex = 0; + tabControl.Size = new Size(313, 722); + tabControl.TabIndex = 0; + // + // Routine + // + Routine.Controls.Add(MultiMonitorCompatibility); + Routine.Controls.Add(groupBoxColor); + Routine.Controls.Add(buttonReset); + Routine.Controls.Add(buttonSave); + Routine.Controls.Add(Display); + Routine.Controls.Add(Effect); + Routine.Location = new Point(4, 26); + Routine.Name = "Routine"; + Routine.Padding = new Padding(3); + Routine.Size = new Size(305, 692); + Routine.TabIndex = 0; + Routine.Text = "常规"; + Routine.UseVisualStyleBackColor = true; + // + // MultiMonitorCompatibility + // + MultiMonitorCompatibility.Controls.Add(RoutineCheckBoxAutoStop); + MultiMonitorCompatibility.Controls.Add(LableRoutineAutoStop); + MultiMonitorCompatibility.Controls.Add(checkBoxUsingUnifiedConfiguration); + MultiMonitorCompatibility.Controls.Add(LabelUsingUnifiedConfiguration); + MultiMonitorCompatibility.Controls.Add(DisplayName); + MultiMonitorCompatibility.Controls.Add(checkBoxIsShow); + MultiMonitorCompatibility.Controls.Add(IsTheMonitorEnabled); + MultiMonitorCompatibility.Controls.Add(DisplayRegistrationName); + MultiMonitorCompatibility.Location = new Point(8, 537); + MultiMonitorCompatibility.Name = "MultiMonitorCompatibility"; + MultiMonitorCompatibility.Size = new Size(289, 122); + MultiMonitorCompatibility.TabIndex = 5; + MultiMonitorCompatibility.TabStop = false; + MultiMonitorCompatibility.Text = "多显示器"; + // + // RoutineCheckBoxAutoStop + // + RoutineCheckBoxAutoStop.AutoSize = true; + RoutineCheckBoxAutoStop.Location = new Point(225, 97); + RoutineCheckBoxAutoStop.Name = "RoutineCheckBoxAutoStop"; + RoutineCheckBoxAutoStop.Size = new Size(15, 14); + RoutineCheckBoxAutoStop.TabIndex = 19; + RoutineCheckBoxAutoStop.UseVisualStyleBackColor = true; + // + // LableRoutineAutoStop + // + LableRoutineAutoStop.AutoSize = true; + LableRoutineAutoStop.Location = new Point(18, 96); + LableRoutineAutoStop.Name = "LableRoutineAutoStop"; + LableRoutineAutoStop.Size = new Size(140, 17); + LableRoutineAutoStop.TabIndex = 18; + LableRoutineAutoStop.Text = "其它应用全屏时暂停壁纸"; + // + // checkBoxUsingUnifiedConfiguration + // + checkBoxUsingUnifiedConfiguration.AutoSize = true; + checkBoxUsingUnifiedConfiguration.Location = new Point(132, 73); + checkBoxUsingUnifiedConfiguration.Name = "checkBoxUsingUnifiedConfiguration"; + checkBoxUsingUnifiedConfiguration.Size = new Size(15, 14); + checkBoxUsingUnifiedConfiguration.TabIndex = 17; + checkBoxUsingUnifiedConfiguration.UseVisualStyleBackColor = true; + checkBoxUsingUnifiedConfiguration.CheckedChanged += checkBoxUsingUnifiedConfiguration_CheckedChanged; + // + // LabelUsingUnifiedConfiguration + // + LabelUsingUnifiedConfiguration.AutoSize = true; + LabelUsingUnifiedConfiguration.Location = new Point(18, 71); + LabelUsingUnifiedConfiguration.Name = "LabelUsingUnifiedConfiguration"; + LabelUsingUnifiedConfiguration.Size = new Size(80, 17); + LabelUsingUnifiedConfiguration.TabIndex = 16; + LabelUsingUnifiedConfiguration.Text = "使用统一配置"; + // + // DisplayName + // + DisplayName.AutoSize = true; + DisplayName.Location = new Point(104, 19); + DisplayName.Name = "DisplayName"; + DisplayName.Size = new Size(68, 17); + DisplayName.TabIndex = 15; + DisplayName.Text = "没有初始化"; + // + // checkBoxIsShow + // + checkBoxIsShow.AutoSize = true; + checkBoxIsShow.Location = new Point(132, 47); + checkBoxIsShow.Name = "checkBoxIsShow"; + checkBoxIsShow.Size = new Size(15, 14); + checkBoxIsShow.TabIndex = 14; + checkBoxIsShow.UseVisualStyleBackColor = true; + checkBoxIsShow.CheckedChanged += checkBoxIsShow_CheckedChanged; + // + // IsTheMonitorEnabled + // + IsTheMonitorEnabled.AutoSize = true; + IsTheMonitorEnabled.Location = new Point(18, 45); + IsTheMonitorEnabled.Name = "IsTheMonitorEnabled"; + IsTheMonitorEnabled.Size = new Size(80, 17); + IsTheMonitorEnabled.TabIndex = 1; + IsTheMonitorEnabled.Text = "启用律动壁纸"; + // + // DisplayRegistrationName + // + DisplayRegistrationName.AutoSize = true; + DisplayRegistrationName.Location = new Point(18, 19); + DisplayRegistrationName.Name = "DisplayRegistrationName"; + DisplayRegistrationName.Size = new Size(80, 17); + DisplayRegistrationName.TabIndex = 0; + DisplayRegistrationName.Text = "显示器注册名"; + // + // groupBoxColor + // + groupBoxColor.Controls.Add(labelBackgroundImg); + groupBoxColor.Controls.Add(BackgroundImage); + groupBoxColor.Controls.Add(labelBackImgOrBackColor); + groupBoxColor.Controls.Add(checkBoxImgOrColor); + groupBoxColor.Controls.Add(labelBackgroundCOlor); + groupBoxColor.Controls.Add(BackgroundColor); + groupBoxColor.Controls.Add(checkBoxUseDefault); + groupBoxColor.Controls.Add(labelUseSystemColor); + groupBoxColor.Controls.Add(labelNumberOfColors); + groupBoxColor.Controls.Add(numericUpDownNumberOfColors); + groupBoxColor.Controls.Add(StartColor); + groupBoxColor.Controls.Add(labelMonochrome); + groupBoxColor.Controls.Add(StopColor); + groupBoxColor.Controls.Add(checkBoxMonochrome); + groupBoxColor.Controls.Add(labelStartColor); + groupBoxColor.Controls.Add(labelStopColor); + groupBoxColor.Location = new Point(8, 147); + groupBoxColor.Name = "groupBoxColor"; + groupBoxColor.Size = new Size(289, 256); + groupBoxColor.TabIndex = 4; + groupBoxColor.TabStop = false; + groupBoxColor.Text = "颜色信息"; + // + // labelBackgroundImg + // + labelBackgroundImg.AutoSize = true; + labelBackgroundImg.Location = new Point(16, 157); + labelBackgroundImg.Name = "labelBackgroundImg"; + labelBackgroundImg.Size = new Size(56, 17); + labelBackgroundImg.TabIndex = 22; + labelBackgroundImg.Text = "背景图片"; + // + // BackgroundImage + // + BackgroundImage.BackgroundImageLayout = ImageLayout.Zoom; + BackgroundImage.BorderStyle = BorderStyle.FixedSingle; + BackgroundImage.Cursor = Cursors.Hand; + BackgroundImage.Enabled = false; + BackgroundImage.Location = new Point(80, 157); + BackgroundImage.Name = "BackgroundImage"; + BackgroundImage.Size = new Size(160, 90); + BackgroundImage.SizeMode = PictureBoxSizeMode.Zoom; + BackgroundImage.TabIndex = 21; + BackgroundImage.TabStop = false; + BackgroundImage.Click += BackgroundImage_Click; + // + // labelBackImgOrBackColor + // + labelBackImgOrBackColor.AutoSize = true; + labelBackImgOrBackColor.Location = new Point(163, 125); + labelBackImgOrBackColor.Name = "labelBackImgOrBackColor"; + labelBackImgOrBackColor.Size = new Size(56, 17); + labelBackImgOrBackColor.TabIndex = 20; + labelBackImgOrBackColor.Text = "是否图片"; + // + // checkBoxImgOrColor + // + checkBoxImgOrColor.AutoSize = true; + checkBoxImgOrColor.Location = new Point(225, 126); + checkBoxImgOrColor.Name = "checkBoxImgOrColor"; + checkBoxImgOrColor.Size = new Size(15, 14); + checkBoxImgOrColor.TabIndex = 19; + checkBoxImgOrColor.UseVisualStyleBackColor = true; + checkBoxImgOrColor.CheckedChanged += ImgOrColor_CheckedChanged; + // + // labelBackgroundCOlor + // + labelBackgroundCOlor.AutoSize = true; + labelBackgroundCOlor.Location = new Point(16, 125); + labelBackgroundCOlor.Name = "labelBackgroundCOlor"; + labelBackgroundCOlor.Size = new Size(56, 17); + labelBackgroundCOlor.TabIndex = 18; + labelBackgroundCOlor.Text = "背景颜色"; + // + // BackgroundColor + // + BackgroundColor.BorderStyle = BorderStyle.FixedSingle; + BackgroundColor.Cursor = Cursors.Hand; + BackgroundColor.Location = new Point(99, 125); + BackgroundColor.Name = "BackgroundColor"; + BackgroundColor.Size = new Size(45, 17); + BackgroundColor.TabIndex = 17; + BackgroundColor.TabStop = false; + BackgroundColor.Click += BackgroundColor_Click; + // + // checkBoxUseDefault + // + checkBoxUseDefault.AutoSize = true; + checkBoxUseDefault.Location = new Point(99, 30); + checkBoxUseDefault.Name = "checkBoxUseDefault"; + checkBoxUseDefault.Size = new Size(15, 14); + checkBoxUseDefault.TabIndex = 16; + checkBoxUseDefault.UseVisualStyleBackColor = true; + checkBoxUseDefault.CheckedChanged += checkBoxUseDefault_CheckedChanged; + // + // labelUseSystemColor + // + labelUseSystemColor.AutoSize = true; + labelUseSystemColor.Location = new Point(16, 30); + labelUseSystemColor.Name = "labelUseSystemColor"; + labelUseSystemColor.Size = new Size(56, 17); + labelUseSystemColor.TabIndex = 15; + labelUseSystemColor.Text = "使用默认"; + // + // labelNumberOfColors + // + labelNumberOfColors.AutoSize = true; + labelNumberOfColors.Location = new Point(16, 90); + labelNumberOfColors.Name = "labelNumberOfColors"; + labelNumberOfColors.Size = new Size(56, 17); + labelNumberOfColors.TabIndex = 14; + labelNumberOfColors.Text = "颜色数量"; + // + // numericUpDownNumberOfColors + // + numericUpDownNumberOfColors.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + numericUpDownNumberOfColors.Location = new Point(99, 89); + numericUpDownNumberOfColors.Maximum = new decimal(new int[] { 51200, 0, 0, 0 }); + numericUpDownNumberOfColors.Minimum = new decimal(new int[] { 4, 0, 0, 0 }); + numericUpDownNumberOfColors.Name = "numericUpDownNumberOfColors"; + numericUpDownNumberOfColors.Size = new Size(120, 23); + numericUpDownNumberOfColors.TabIndex = 13; + numericUpDownNumberOfColors.Value = new decimal(new int[] { 4, 0, 0, 0 }); + // + // StartColor + // + StartColor.BorderStyle = BorderStyle.FixedSingle; + StartColor.Cursor = Cursors.Hand; + StartColor.Location = new Point(99, 59); + StartColor.Name = "StartColor"; + StartColor.Size = new Size(45, 17); + StartColor.TabIndex = 7; + StartColor.TabStop = false; + StartColor.Click += StartColor_Click; + // + // labelMonochrome + // + labelMonochrome.AutoSize = true; + labelMonochrome.Location = new Point(163, 30); + labelMonochrome.Name = "labelMonochrome"; + labelMonochrome.Size = new Size(56, 17); + labelMonochrome.TabIndex = 12; + labelMonochrome.Text = "是否单色"; + // + // StopColor + // + StopColor.BorderStyle = BorderStyle.FixedSingle; + StopColor.Cursor = Cursors.Hand; + StopColor.Location = new Point(225, 59); + StopColor.Name = "StopColor"; + StopColor.Size = new Size(45, 17); + StopColor.TabIndex = 8; + StopColor.TabStop = false; + StopColor.Click += StopColor_Click; + // + // checkBoxMonochrome + // + checkBoxMonochrome.AutoSize = true; + checkBoxMonochrome.Location = new Point(225, 32); + checkBoxMonochrome.Name = "checkBoxMonochrome"; + checkBoxMonochrome.Size = new Size(15, 14); + checkBoxMonochrome.TabIndex = 11; + checkBoxMonochrome.UseVisualStyleBackColor = true; + checkBoxMonochrome.CheckedChanged += checkBoxMonochrome_CheckedChanged; + // + // labelStartColor + // + labelStartColor.AutoSize = true; + labelStartColor.Location = new Point(16, 59); + labelStartColor.Name = "labelStartColor"; + labelStartColor.Size = new Size(56, 17); + labelStartColor.TabIndex = 9; + labelStartColor.Text = "起始颜色"; + // + // labelStopColor + // + labelStopColor.AutoSize = true; + labelStopColor.Location = new Point(163, 59); + labelStopColor.Name = "labelStopColor"; + labelStopColor.Size = new Size(56, 17); + labelStopColor.TabIndex = 10; + labelStopColor.Text = "停止颜色"; + // + // buttonReset + // + buttonReset.Location = new Point(8, 665); + buttonReset.Name = "buttonReset"; + buttonReset.Size = new Size(75, 23); + buttonReset.TabIndex = 3; + buttonReset.Text = "重置"; + buttonReset.UseVisualStyleBackColor = true; + buttonReset.Click += ButtonReset_Click; + // + // buttonSave + // + buttonSave.Location = new Point(222, 665); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 2; + buttonSave.Text = "保存"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // Display + // + Display.Controls.Add(numericUpDownStripeSpacing); + Display.Controls.Add(label4); + Display.Controls.Add(label2); + Display.Controls.Add(checkBoxSmoothStripe); + Display.Controls.Add(checkBoxBottomEdge); + Display.Controls.Add(checkBoxRotundity); + Display.Controls.Add(checkBoxFrame); + Display.Controls.Add(checkBoxWavyLine); + Display.Controls.Add(labelBottomEdge); + Display.Controls.Add(labelRotundity); + Display.Controls.Add(labelFrame); + Display.Controls.Add(labelWaveLineDisplay); + Display.Location = new Point(8, 409); + Display.Name = "Display"; + Display.Size = new Size(289, 122); + Display.TabIndex = 1; + Display.TabStop = false; + Display.Text = "显示内容"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(163, 97); + label2.Name = "label2"; + label2.Size = new Size(56, 17); + label2.TabIndex = 15; + label2.Text = "平滑圆角"; + // + // checkBoxSmoothStripe + // + checkBoxSmoothStripe.AutoSize = true; + checkBoxSmoothStripe.Location = new Point(255, 98); + checkBoxSmoothStripe.Name = "checkBoxSmoothStripe"; + checkBoxSmoothStripe.Size = new Size(15, 14); + checkBoxSmoothStripe.TabIndex = 14; + checkBoxSmoothStripe.UseVisualStyleBackColor = true; + // + // checkBoxBottomEdge + // + checkBoxBottomEdge.AutoSize = true; + checkBoxBottomEdge.Location = new Point(130, 98); + checkBoxBottomEdge.Name = "checkBoxBottomEdge"; + checkBoxBottomEdge.Size = new Size(15, 14); + checkBoxBottomEdge.TabIndex = 13; + checkBoxBottomEdge.UseVisualStyleBackColor = true; + // + // checkBoxRotundity + // + checkBoxRotundity.AutoSize = true; + checkBoxRotundity.Location = new Point(130, 72); + checkBoxRotundity.Name = "checkBoxRotundity"; + checkBoxRotundity.Size = new Size(15, 14); + checkBoxRotundity.TabIndex = 12; + checkBoxRotundity.UseVisualStyleBackColor = true; + // + // checkBoxFrame + // + checkBoxFrame.AutoSize = true; + checkBoxFrame.Location = new Point(130, 46); + checkBoxFrame.Name = "checkBoxFrame"; + checkBoxFrame.Size = new Size(15, 14); + checkBoxFrame.TabIndex = 11; + checkBoxFrame.UseVisualStyleBackColor = true; + // + // checkBoxWavyLine + // + checkBoxWavyLine.AutoSize = true; + checkBoxWavyLine.Location = new Point(130, 20); + checkBoxWavyLine.Name = "checkBoxWavyLine"; + checkBoxWavyLine.Size = new Size(15, 14); + checkBoxWavyLine.TabIndex = 10; + checkBoxWavyLine.UseVisualStyleBackColor = true; + // + // labelBottomEdge + // + labelBottomEdge.AutoSize = true; + labelBottomEdge.Location = new Point(16, 97); + labelBottomEdge.Name = "labelBottomEdge"; + labelBottomEdge.Size = new Size(80, 17); + labelBottomEdge.TabIndex = 5; + labelBottomEdge.Text = "是否显示底边"; + // + // labelRotundity + // + labelRotundity.AutoSize = true; + labelRotundity.Location = new Point(16, 71); + labelRotundity.Name = "labelRotundity"; + labelRotundity.Size = new Size(80, 17); + labelRotundity.TabIndex = 4; + labelRotundity.Text = "是否显示圆形"; + // + // labelFrame + // + labelFrame.AutoSize = true; + labelFrame.Location = new Point(16, 45); + labelFrame.Name = "labelFrame"; + labelFrame.Size = new Size(80, 17); + labelFrame.TabIndex = 3; + labelFrame.Text = "是否显示边框"; + // + // labelWaveLineDisplay + // + labelWaveLineDisplay.AutoSize = true; + labelWaveLineDisplay.Location = new Point(16, 19); + labelWaveLineDisplay.Name = "labelWaveLineDisplay"; + labelWaveLineDisplay.Size = new Size(80, 17); + labelWaveLineDisplay.TabIndex = 2; + labelWaveLineDisplay.Text = "是否显示频谱"; + // + // Effect + // + Effect.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + Effect.Controls.Add(labelWindowFuncText); + Effect.Controls.Add(selectWindowFunc); + Effect.Controls.Add(numericUpDownFourierVariation); + Effect.Controls.Add(labelFourierVariation); + Effect.Controls.Add(numericUpDownSpectralShift); + Effect.Controls.Add(numericUpDownRhythmicMagnification); + Effect.Controls.Add(labelSpectralShift); + Effect.Controls.Add(labelRhythmicMagnification); + Effect.Location = new Point(8, 6); + Effect.Name = "Effect"; + Effect.Size = new Size(289, 135); + Effect.TabIndex = 0; + Effect.TabStop = false; + Effect.Text = "基础参数"; + // + // labelWindowFuncText + // + labelWindowFuncText.AutoSize = true; + labelWindowFuncText.Location = new Point(13, 106); + labelWindowFuncText.Name = "labelWindowFuncText"; + labelWindowFuncText.Size = new Size(80, 17); + labelWindowFuncText.TabIndex = 8; + labelWindowFuncText.Text = "选择窗口函数"; + // + // selectWindowFunc + // + selectWindowFunc.DisplayMember = "0"; + selectWindowFunc.FormattingEnabled = true; + selectWindowFunc.Location = new Point(99, 103); + selectWindowFunc.Name = "selectWindowFunc"; + selectWindowFunc.Size = new Size(120, 25); + selectWindowFunc.TabIndex = 7; + selectWindowFunc.ValueMember = "0"; + // + // numericUpDownFourierVariation + // + numericUpDownFourierVariation.Location = new Point(99, 74); + numericUpDownFourierVariation.Maximum = new decimal(new int[] { 999999999, 0, 0, 0 }); + numericUpDownFourierVariation.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownFourierVariation.Name = "numericUpDownFourierVariation"; + numericUpDownFourierVariation.Size = new Size(120, 23); + numericUpDownFourierVariation.TabIndex = 5; + numericUpDownFourierVariation.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // labelFourierVariation + // + labelFourierVariation.AutoSize = true; + labelFourierVariation.Location = new Point(16, 75); + labelFourierVariation.Name = "labelFourierVariation"; + labelFourierVariation.Size = new Size(80, 17); + labelFourierVariation.TabIndex = 4; + labelFourierVariation.Text = "傅里叶变化量"; + // + // numericUpDownSpectralShift + // + numericUpDownSpectralShift.DecimalPlaces = 2; + numericUpDownSpectralShift.Increment = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownSpectralShift.Location = new Point(99, 45); + numericUpDownSpectralShift.Maximum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownSpectralShift.Minimum = new decimal(new int[] { 2, 0, 0, -2147418112 }); + numericUpDownSpectralShift.Name = "numericUpDownSpectralShift"; + numericUpDownSpectralShift.Size = new Size(120, 23); + numericUpDownSpectralShift.TabIndex = 3; + // + // numericUpDownRhythmicMagnification + // + numericUpDownRhythmicMagnification.DecimalPlaces = 1; + numericUpDownRhythmicMagnification.Increment = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDownRhythmicMagnification.Location = new Point(99, 16); + numericUpDownRhythmicMagnification.Maximum = new decimal(new int[] { 9999, 0, 0, 0 }); + numericUpDownRhythmicMagnification.Minimum = new decimal(new int[] { 9999, 0, 0, int.MinValue }); + numericUpDownRhythmicMagnification.Name = "numericUpDownRhythmicMagnification"; + numericUpDownRhythmicMagnification.Size = new Size(120, 23); + numericUpDownRhythmicMagnification.TabIndex = 2; + // + // labelSpectralShift + // + labelSpectralShift.AutoSize = true; + labelSpectralShift.Location = new Point(16, 47); + labelSpectralShift.Name = "labelSpectralShift"; + labelSpectralShift.Size = new Size(56, 17); + labelSpectralShift.TabIndex = 1; + labelSpectralShift.Text = "频谱偏移"; + // + // labelRhythmicMagnification + // + labelRhythmicMagnification.AutoSize = true; + labelRhythmicMagnification.Location = new Point(16, 19); + labelRhythmicMagnification.Name = "labelRhythmicMagnification"; + labelRhythmicMagnification.Size = new Size(56, 17); + labelRhythmicMagnification.TabIndex = 0; + labelRhythmicMagnification.Text = "律动倍率"; + // + // Other + // + Other.Controls.Add(ThirdParty); + Other.Controls.Add(OtherResetBtn); + Other.Controls.Add(OtherSaveBtn); + Other.Location = new Point(4, 26); + Other.Name = "Other"; + Other.Padding = new Padding(3); + Other.Size = new Size(305, 692); + Other.TabIndex = 1; + Other.Text = "其他"; + Other.UseVisualStyleBackColor = true; + // + // ThirdParty + // + ThirdParty.Controls.Add(CheckBoxAutoStop); + ThirdParty.Controls.Add(OtherDisplayName); + ThirdParty.Controls.Add(LabelAutoStop); + ThirdParty.Controls.Add(label3); + ThirdParty.Controls.Add(panelEx1); + ThirdParty.Controls.Add(VideoRateLabel); + ThirdParty.Controls.Add(trackBarVideoVolume); + ThirdParty.Controls.Add(VideoVolumeLabel); + ThirdParty.Controls.Add(trackBarVideoRate); + ThirdParty.Controls.Add(videoView1); + ThirdParty.Controls.Add(UseOtherWallpaper); + ThirdParty.Controls.Add(label1); + ThirdParty.Location = new Point(8, 6); + ThirdParty.Name = "ThirdParty"; + ThirdParty.Size = new Size(289, 289); + ThirdParty.TabIndex = 6; + ThirdParty.TabStop = false; + ThirdParty.Text = "第三方壁纸"; + // + // CheckBoxAutoStop + // + CheckBoxAutoStop.AutoSize = true; + CheckBoxAutoStop.Location = new Point(193, 246); + CheckBoxAutoStop.Name = "CheckBoxAutoStop"; + CheckBoxAutoStop.Size = new Size(15, 14); + CheckBoxAutoStop.TabIndex = 18; + CheckBoxAutoStop.UseVisualStyleBackColor = true; + // + // OtherDisplayName + // + OtherDisplayName.AutoSize = true; + OtherDisplayName.Location = new Point(140, 219); + OtherDisplayName.Name = "OtherDisplayName"; + OtherDisplayName.Size = new Size(68, 17); + OtherDisplayName.TabIndex = 24; + OtherDisplayName.Text = "没有初始化"; + // + // LabelAutoStop + // + LabelAutoStop.AutoSize = true; + LabelAutoStop.Location = new Point(16, 245); + LabelAutoStop.Name = "LabelAutoStop"; + LabelAutoStop.Size = new Size(140, 17); + LabelAutoStop.TabIndex = 0; + LabelAutoStop.Text = "其它应用全屏时暂停壁纸"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(16, 219); + label3.Name = "label3"; + label3.Size = new Size(80, 17); + label3.TabIndex = 23; + label3.Text = "显示器注册名"; + // + // panelEx1 + // + panelEx1.BackColor = Color.Transparent; + panelEx1.BorderThickness = 1F; + panelEx1.Cursor = Cursors.Hand; + panelEx1.Location = new Point(16, 40); + panelEx1.Name = "panelEx1"; + panelEx1.Opacity = 0.5F; + panelEx1.RotateAngle = 0F; + panelEx1.Size = new Size(192, 108); + panelEx1.TabIndex = 22; + panelEx1.Click += videoView1_Click; + // + // VideoRateLabel + // + VideoRateLabel.AutoSize = true; + VideoRateLabel.Location = new Point(229, 182); + VideoRateLabel.Name = "VideoRateLabel"; + VideoRateLabel.Size = new Size(15, 17); + VideoRateLabel.TabIndex = 21; + VideoRateLabel.Text = "1"; + // + // trackBarVideoVolume + // + trackBarVideoVolume.Location = new Point(223, 40); + trackBarVideoVolume.Maximum = 100; + trackBarVideoVolume.Name = "trackBarVideoVolume"; + trackBarVideoVolume.Orientation = Orientation.Vertical; + trackBarVideoVolume.Size = new Size(45, 104); + trackBarVideoVolume.TabIndex = 7; + trackBarVideoVolume.Value = 100; + trackBarVideoVolume.Scroll += trackBarVideoVolume_Scroll; + // + // VideoVolumeLabel + // + VideoVolumeLabel.AutoSize = true; + VideoVolumeLabel.Location = new Point(229, 154); + VideoVolumeLabel.Name = "VideoVolumeLabel"; + VideoVolumeLabel.Size = new Size(29, 17); + VideoVolumeLabel.TabIndex = 20; + VideoVolumeLabel.Text = "100"; + // + // trackBarVideoRate + // + trackBarVideoRate.Location = new Point(16, 154); + trackBarVideoRate.Maximum = 100; + trackBarVideoRate.Minimum = 5; + trackBarVideoRate.Name = "trackBarVideoRate"; + trackBarVideoRate.Size = new Size(192, 45); + trackBarVideoRate.TabIndex = 19; + trackBarVideoRate.TickStyle = TickStyle.TopLeft; + trackBarVideoRate.Value = 10; + trackBarVideoRate.Scroll += trackBarVideoRate_Scroll; + // + // videoView1 + // + videoView1.BackColor = Color.Black; + videoView1.Cursor = Cursors.Hand; + videoView1.Location = new Point(16, 40); + videoView1.MediaPlayer = null; + videoView1.Name = "videoView1"; + videoView1.Size = new Size(192, 108); + videoView1.TabIndex = 18; + videoView1.Text = "videoView1"; + // + // UseOtherWallpaper + // + UseOtherWallpaper.AutoSize = true; + UseOtherWallpaper.Location = new Point(193, 21); + UseOtherWallpaper.Name = "UseOtherWallpaper"; + UseOtherWallpaper.Size = new Size(15, 14); + UseOtherWallpaper.TabIndex = 17; + UseOtherWallpaper.UseVisualStyleBackColor = true; + UseOtherWallpaper.CheckedChanged += UseOtherWallpaper_CheckedChanged; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(16, 19); + label1.Name = "label1"; + label1.Size = new Size(92, 17); + label1.TabIndex = 5; + label1.Text = "启用第三方壁纸"; + // + // OtherResetBtn + // + OtherResetBtn.Location = new Point(8, 665); + OtherResetBtn.Name = "OtherResetBtn"; + OtherResetBtn.Size = new Size(75, 23); + OtherResetBtn.TabIndex = 5; + OtherResetBtn.Text = "重置"; + OtherResetBtn.UseVisualStyleBackColor = true; + OtherResetBtn.Click += OtherResetBtn_Click; + // + // OtherSaveBtn + // + OtherSaveBtn.Location = new Point(222, 665); + OtherSaveBtn.Name = "OtherSaveBtn"; + OtherSaveBtn.Size = new Size(75, 23); + OtherSaveBtn.TabIndex = 4; + OtherSaveBtn.Text = "保存"; + OtherSaveBtn.UseVisualStyleBackColor = true; + OtherSaveBtn.Click += OtherSaveBtn_Click; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(163, 71); + label4.Name = "label4"; + label4.Size = new Size(56, 17); + label4.TabIndex = 16; + label4.Text = "条纹间隔"; + // + // numericUpDownStripeSpacing + // + numericUpDownStripeSpacing.Location = new Point(225, 68); + numericUpDownStripeSpacing.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownStripeSpacing.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownStripeSpacing.Name = "numericUpDownStripeSpacing"; + numericUpDownStripeSpacing.Size = new Size(45, 23); + numericUpDownStripeSpacing.TabIndex = 9; + numericUpDownStripeSpacing.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // SetFrom + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(313, 722); + Controls.Add(tabControl); + FormBorderStyle = FormBorderStyle.FixedSingle; + Icon = (Icon)resources.GetObject("$this.Icon"); + MaximizeBox = false; + Name = "SetFrom"; + Text = "设置"; + FormClosed += SetFrom_FormClosed; + Load += SetForm_Load; + LocationChanged += SetFrom_LocationChanged; + tabControl.ResumeLayout(false); + Routine.ResumeLayout(false); + MultiMonitorCompatibility.ResumeLayout(false); + MultiMonitorCompatibility.PerformLayout(); + groupBoxColor.ResumeLayout(false); + groupBoxColor.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)BackgroundImage).EndInit(); + ((System.ComponentModel.ISupportInitialize)BackgroundColor).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumberOfColors).EndInit(); + ((System.ComponentModel.ISupportInitialize)StartColor).EndInit(); + ((System.ComponentModel.ISupportInitialize)StopColor).EndInit(); + Display.ResumeLayout(false); + Display.PerformLayout(); + Effect.ResumeLayout(false); + Effect.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFourierVariation).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpectralShift).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRhythmicMagnification).EndInit(); + Other.ResumeLayout(false); + ThirdParty.ResumeLayout(false); + ThirdParty.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoVolume).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoRate).EndInit(); + ((System.ComponentModel.ISupportInitialize)videoView1).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStripeSpacing).EndInit(); + ResumeLayout(false); + } + + #endregion + + private TabControl tabControl; + private TabPage Routine; + private TabPage Other; + private GroupBox Effect; + private Label labelRhythmicMagnification; + private Label labelSpectralShift; + private GroupBox Display; + private Label labelBottomEdge; + private Label labelRotundity; + private Label labelFrame; + private Label labelWaveLineDisplay; + private NumericUpDown numericUpDownSpectralShift; + private NumericUpDown numericUpDownRhythmicMagnification; + private Button buttonReset; + private Button buttonSave; + private CheckBox checkBoxBottomEdge; + private CheckBox checkBoxRotundity; + private CheckBox checkBoxFrame; + private CheckBox checkBoxWavyLine; + private NumericUpDown numericUpDownFourierVariation; + private Label labelFourierVariation; + private PictureBox StartColor; + private Label labelStopColor; + private Label labelStartColor; + private PictureBox StopColor; + private Label labelMonochrome; + private CheckBox checkBoxMonochrome; + private Label labelNumberOfColors; + private NumericUpDown numericUpDownNumberOfColors; + private GroupBox groupBoxColor; + private CheckBox checkBoxUseDefault; + private Label labelUseSystemColor; + private Label labelBackgroundCOlor; + private PictureBox BackgroundColor; + private Label labelBackgroundImg; + private PictureBox BackgroundImage; + private Label labelBackImgOrBackColor; + private CheckBox checkBoxImgOrColor; + private GroupBox MultiMonitorCompatibility; + private Label DisplayRegistrationName; + private Label DisplayName; + private CheckBox checkBoxIsShow; + private Label IsTheMonitorEnabled; + private Label LabelUsingUnifiedConfiguration; + private CheckBox checkBoxUsingUnifiedConfiguration; + private CheckBox RoutineCheckBoxAutoStop; + private Label LableRoutineAutoStop; + private Button OtherResetBtn; + private Button OtherSaveBtn; + private GroupBox ThirdParty; + private CheckBox UseOtherWallpaper; + private Label label1; + private LibVLCSharp.WinForms.VideoView videoView1; + private Label VideoRateLabel; + private TrackBar trackBarVideoVolume; + private Label VideoVolumeLabel; + private TrackBar trackBarVideoRate; + private PanelEx panelEx1; + private Label OtherDisplayName; + private Label label3; + private CheckBox CheckBoxAutoStop; + private Label LabelAutoStop; + private Label labelWindowFuncText; + private ComboBox selectWindowFunc; + private Label label2; + private CheckBox checkBoxSmoothStripe; + private NumericUpDown numericUpDownStripeSpacing; + private Label label4; + } +} \ No newline at end of file diff --git a/AudioVisualizer/SetForm.Designer.cs.orig b/AudioVisualizer/SetForm.Designer.cs.orig new file mode 100644 index 0000000..8abfb16 --- /dev/null +++ b/AudioVisualizer/SetForm.Designer.cs.orig @@ -0,0 +1,1049 @@ +<<<<<<< HEAD +namespace AudioWallpaper { +======= +namespace AudioVisualizer { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + partial class SetFrom { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetFrom)); + tabControl = new TabControl(); + Routine = new TabPage(); +<<<<<<< HEAD + MultiMonitorCompatibility = new GroupBox(); + RoutineCheckBoxAutoStop = new CheckBox(); + LableRoutineAutoStop = new Label(); + checkBoxUsingUnifiedConfiguration = new CheckBox(); + LabelUsingUnifiedConfiguration = new Label(); + DisplayName = new Label(); + checkBoxIsShow = new CheckBox(); + IsTheMonitorEnabled = new Label(); + DisplayRegistrationName = new Label(); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + groupBoxColor = new GroupBox(); + labelBackgroundImg = new Label(); + BackgroundImage = new PictureBox(); + labelBackImgOrBackColor = new Label(); + checkBoxImgOrColor = new CheckBox(); + labelBackgroundCOlor = new Label(); + BackgroundColor = new PictureBox(); + checkBoxUseDefault = new CheckBox(); + labelUseSystemColor = new Label(); + labelNumberOfColors = new Label(); + numericUpDownNumberOfColors = new NumericUpDown(); + StartColor = new PictureBox(); + labelMonochrome = new Label(); + StopColor = new PictureBox(); + checkBoxMonochrome = new CheckBox(); + labelStartColor = new Label(); + labelStopColor = new Label(); + buttonReset = new Button(); + buttonSave = new Button(); + Display = new GroupBox(); +<<<<<<< HEAD + label2 = new Label(); + checkBoxSmoothStripe = new CheckBox(); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + checkBoxBottomEdge = new CheckBox(); + checkBoxRotundity = new CheckBox(); + checkBoxFrame = new CheckBox(); + checkBoxWavyLine = new CheckBox(); + labelBottomEdge = new Label(); + labelRotundity = new Label(); + labelFrame = new Label(); + labelWaveLineDisplay = new Label(); + Effect = new GroupBox(); +<<<<<<< HEAD + labelWindowFuncText = new Label(); + selectWindowFunc = new ComboBox(); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + numericUpDownFourierVariation = new NumericUpDown(); + labelFourierVariation = new Label(); + numericUpDownSpectralShift = new NumericUpDown(); + numericUpDownRhythmicMagnification = new NumericUpDown(); + labelSpectralShift = new Label(); + labelRhythmicMagnification = new Label(); + Other = new TabPage(); +<<<<<<< HEAD + ThirdParty = new GroupBox(); + CheckBoxAutoStop = new CheckBox(); + OtherDisplayName = new Label(); + LabelAutoStop = new Label(); + label3 = new Label(); + panelEx1 = new PanelEx(); + VideoRateLabel = new Label(); + trackBarVideoVolume = new TrackBar(); + VideoVolumeLabel = new Label(); + trackBarVideoRate = new TrackBar(); + videoView1 = new LibVLCSharp.WinForms.VideoView(); + UseOtherWallpaper = new CheckBox(); + label1 = new Label(); + OtherResetBtn = new Button(); + OtherSaveBtn = new Button(); + label4 = new Label(); + numericUpDownStripeSpacing = new NumericUpDown(); + tabControl.SuspendLayout(); + Routine.SuspendLayout(); + MultiMonitorCompatibility.SuspendLayout(); +======= + tabControl.SuspendLayout(); + Routine.SuspendLayout(); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + groupBoxColor.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)BackgroundImage).BeginInit(); + ((System.ComponentModel.ISupportInitialize)BackgroundColor).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumberOfColors).BeginInit(); + ((System.ComponentModel.ISupportInitialize)StartColor).BeginInit(); + ((System.ComponentModel.ISupportInitialize)StopColor).BeginInit(); + Display.SuspendLayout(); + Effect.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFourierVariation).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpectralShift).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRhythmicMagnification).BeginInit(); +<<<<<<< HEAD + Other.SuspendLayout(); + ThirdParty.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoVolume).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoRate).BeginInit(); + ((System.ComponentModel.ISupportInitialize)videoView1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStripeSpacing).BeginInit(); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + SuspendLayout(); + // + // tabControl + // + tabControl.Controls.Add(Routine); + tabControl.Controls.Add(Other); + tabControl.Dock = DockStyle.Fill; + tabControl.Location = new Point(0, 0); + tabControl.Name = "tabControl"; + tabControl.SelectedIndex = 0; +<<<<<<< HEAD + tabControl.Size = new Size(313, 722); +======= + tabControl.Size = new Size(313, 568); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + tabControl.TabIndex = 0; + // + // Routine + // +<<<<<<< HEAD + Routine.Controls.Add(MultiMonitorCompatibility); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Routine.Controls.Add(groupBoxColor); + Routine.Controls.Add(buttonReset); + Routine.Controls.Add(buttonSave); + Routine.Controls.Add(Display); + Routine.Controls.Add(Effect); + Routine.Location = new Point(4, 26); + Routine.Name = "Routine"; + Routine.Padding = new Padding(3); +<<<<<<< HEAD + Routine.Size = new Size(305, 692); +======= + Routine.Size = new Size(305, 538); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Routine.TabIndex = 0; + Routine.Text = "常规"; + Routine.UseVisualStyleBackColor = true; + // +<<<<<<< HEAD + // MultiMonitorCompatibility + // + MultiMonitorCompatibility.Controls.Add(RoutineCheckBoxAutoStop); + MultiMonitorCompatibility.Controls.Add(LableRoutineAutoStop); + MultiMonitorCompatibility.Controls.Add(checkBoxUsingUnifiedConfiguration); + MultiMonitorCompatibility.Controls.Add(LabelUsingUnifiedConfiguration); + MultiMonitorCompatibility.Controls.Add(DisplayName); + MultiMonitorCompatibility.Controls.Add(checkBoxIsShow); + MultiMonitorCompatibility.Controls.Add(IsTheMonitorEnabled); + MultiMonitorCompatibility.Controls.Add(DisplayRegistrationName); + MultiMonitorCompatibility.Location = new Point(8, 537); + MultiMonitorCompatibility.Name = "MultiMonitorCompatibility"; + MultiMonitorCompatibility.Size = new Size(289, 122); + MultiMonitorCompatibility.TabIndex = 5; + MultiMonitorCompatibility.TabStop = false; + MultiMonitorCompatibility.Text = "多显示器"; + // + // RoutineCheckBoxAutoStop + // + RoutineCheckBoxAutoStop.AutoSize = true; + RoutineCheckBoxAutoStop.Location = new Point(225, 97); + RoutineCheckBoxAutoStop.Name = "RoutineCheckBoxAutoStop"; + RoutineCheckBoxAutoStop.Size = new Size(15, 14); + RoutineCheckBoxAutoStop.TabIndex = 19; + RoutineCheckBoxAutoStop.UseVisualStyleBackColor = true; + // + // LableRoutineAutoStop + // + LableRoutineAutoStop.AutoSize = true; + LableRoutineAutoStop.Location = new Point(18, 96); + LableRoutineAutoStop.Name = "LableRoutineAutoStop"; + LableRoutineAutoStop.Size = new Size(140, 17); + LableRoutineAutoStop.TabIndex = 18; + LableRoutineAutoStop.Text = "其它应用全屏时暂停壁纸"; + // + // checkBoxUsingUnifiedConfiguration + // + checkBoxUsingUnifiedConfiguration.AutoSize = true; + checkBoxUsingUnifiedConfiguration.Location = new Point(132, 73); + checkBoxUsingUnifiedConfiguration.Name = "checkBoxUsingUnifiedConfiguration"; + checkBoxUsingUnifiedConfiguration.Size = new Size(15, 14); + checkBoxUsingUnifiedConfiguration.TabIndex = 17; + checkBoxUsingUnifiedConfiguration.UseVisualStyleBackColor = true; + checkBoxUsingUnifiedConfiguration.CheckedChanged += checkBoxUsingUnifiedConfiguration_CheckedChanged; + // + // LabelUsingUnifiedConfiguration + // + LabelUsingUnifiedConfiguration.AutoSize = true; + LabelUsingUnifiedConfiguration.Location = new Point(18, 71); + LabelUsingUnifiedConfiguration.Name = "LabelUsingUnifiedConfiguration"; + LabelUsingUnifiedConfiguration.Size = new Size(80, 17); + LabelUsingUnifiedConfiguration.TabIndex = 16; + LabelUsingUnifiedConfiguration.Text = "使用统一配置"; + // + // DisplayName + // + DisplayName.AutoSize = true; + DisplayName.Location = new Point(104, 19); + DisplayName.Name = "DisplayName"; + DisplayName.Size = new Size(68, 17); + DisplayName.TabIndex = 15; + DisplayName.Text = "没有初始化"; + // + // checkBoxIsShow + // + checkBoxIsShow.AutoSize = true; + checkBoxIsShow.Location = new Point(132, 47); + checkBoxIsShow.Name = "checkBoxIsShow"; + checkBoxIsShow.Size = new Size(15, 14); + checkBoxIsShow.TabIndex = 14; + checkBoxIsShow.UseVisualStyleBackColor = true; + checkBoxIsShow.CheckedChanged += checkBoxIsShow_CheckedChanged; + // + // IsTheMonitorEnabled + // + IsTheMonitorEnabled.AutoSize = true; + IsTheMonitorEnabled.Location = new Point(18, 45); + IsTheMonitorEnabled.Name = "IsTheMonitorEnabled"; + IsTheMonitorEnabled.Size = new Size(80, 17); + IsTheMonitorEnabled.TabIndex = 1; + IsTheMonitorEnabled.Text = "启用律动壁纸"; + // + // DisplayRegistrationName + // + DisplayRegistrationName.AutoSize = true; + DisplayRegistrationName.Location = new Point(18, 19); + DisplayRegistrationName.Name = "DisplayRegistrationName"; + DisplayRegistrationName.Size = new Size(80, 17); + DisplayRegistrationName.TabIndex = 0; + DisplayRegistrationName.Text = "显示器注册名"; + // +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // groupBoxColor + // + groupBoxColor.Controls.Add(labelBackgroundImg); + groupBoxColor.Controls.Add(BackgroundImage); + groupBoxColor.Controls.Add(labelBackImgOrBackColor); + groupBoxColor.Controls.Add(checkBoxImgOrColor); + groupBoxColor.Controls.Add(labelBackgroundCOlor); + groupBoxColor.Controls.Add(BackgroundColor); + groupBoxColor.Controls.Add(checkBoxUseDefault); + groupBoxColor.Controls.Add(labelUseSystemColor); + groupBoxColor.Controls.Add(labelNumberOfColors); + groupBoxColor.Controls.Add(numericUpDownNumberOfColors); + groupBoxColor.Controls.Add(StartColor); + groupBoxColor.Controls.Add(labelMonochrome); + groupBoxColor.Controls.Add(StopColor); + groupBoxColor.Controls.Add(checkBoxMonochrome); + groupBoxColor.Controls.Add(labelStartColor); + groupBoxColor.Controls.Add(labelStopColor); +<<<<<<< HEAD + groupBoxColor.Location = new Point(8, 147); +======= + groupBoxColor.Location = new Point(8, 120); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + groupBoxColor.Name = "groupBoxColor"; + groupBoxColor.Size = new Size(289, 256); + groupBoxColor.TabIndex = 4; + groupBoxColor.TabStop = false; + groupBoxColor.Text = "颜色信息"; + // + // labelBackgroundImg + // + labelBackgroundImg.AutoSize = true; + labelBackgroundImg.Location = new Point(16, 157); + labelBackgroundImg.Name = "labelBackgroundImg"; + labelBackgroundImg.Size = new Size(56, 17); + labelBackgroundImg.TabIndex = 22; + labelBackgroundImg.Text = "背景图片"; + // + // BackgroundImage + // + BackgroundImage.BackgroundImageLayout = ImageLayout.Zoom; + BackgroundImage.BorderStyle = BorderStyle.FixedSingle; + BackgroundImage.Cursor = Cursors.Hand; + BackgroundImage.Enabled = false; + BackgroundImage.Location = new Point(80, 157); + BackgroundImage.Name = "BackgroundImage"; + BackgroundImage.Size = new Size(160, 90); + BackgroundImage.SizeMode = PictureBoxSizeMode.Zoom; + BackgroundImage.TabIndex = 21; + BackgroundImage.TabStop = false; + BackgroundImage.Click += BackgroundImage_Click; + // + // labelBackImgOrBackColor + // + labelBackImgOrBackColor.AutoSize = true; + labelBackImgOrBackColor.Location = new Point(163, 125); + labelBackImgOrBackColor.Name = "labelBackImgOrBackColor"; + labelBackImgOrBackColor.Size = new Size(56, 17); + labelBackImgOrBackColor.TabIndex = 20; + labelBackImgOrBackColor.Text = "是否图片"; + // + // checkBoxImgOrColor + // + checkBoxImgOrColor.AutoSize = true; + checkBoxImgOrColor.Location = new Point(225, 126); + checkBoxImgOrColor.Name = "checkBoxImgOrColor"; + checkBoxImgOrColor.Size = new Size(15, 14); + checkBoxImgOrColor.TabIndex = 19; + checkBoxImgOrColor.UseVisualStyleBackColor = true; + checkBoxImgOrColor.CheckedChanged += ImgOrColor_CheckedChanged; + // + // labelBackgroundCOlor + // + labelBackgroundCOlor.AutoSize = true; + labelBackgroundCOlor.Location = new Point(16, 125); + labelBackgroundCOlor.Name = "labelBackgroundCOlor"; + labelBackgroundCOlor.Size = new Size(56, 17); + labelBackgroundCOlor.TabIndex = 18; + labelBackgroundCOlor.Text = "背景颜色"; + // + // BackgroundColor + // + BackgroundColor.BorderStyle = BorderStyle.FixedSingle; + BackgroundColor.Cursor = Cursors.Hand; + BackgroundColor.Location = new Point(99, 125); + BackgroundColor.Name = "BackgroundColor"; + BackgroundColor.Size = new Size(45, 17); + BackgroundColor.TabIndex = 17; + BackgroundColor.TabStop = false; + BackgroundColor.Click += BackgroundColor_Click; + // + // checkBoxUseDefault + // + checkBoxUseDefault.AutoSize = true; + checkBoxUseDefault.Location = new Point(99, 30); + checkBoxUseDefault.Name = "checkBoxUseDefault"; + checkBoxUseDefault.Size = new Size(15, 14); + checkBoxUseDefault.TabIndex = 16; + checkBoxUseDefault.UseVisualStyleBackColor = true; + checkBoxUseDefault.CheckedChanged += checkBoxUseDefault_CheckedChanged; + // + // labelUseSystemColor + // + labelUseSystemColor.AutoSize = true; + labelUseSystemColor.Location = new Point(16, 30); + labelUseSystemColor.Name = "labelUseSystemColor"; + labelUseSystemColor.Size = new Size(56, 17); + labelUseSystemColor.TabIndex = 15; + labelUseSystemColor.Text = "使用默认"; + // + // labelNumberOfColors + // + labelNumberOfColors.AutoSize = true; + labelNumberOfColors.Location = new Point(16, 90); + labelNumberOfColors.Name = "labelNumberOfColors"; + labelNumberOfColors.Size = new Size(56, 17); + labelNumberOfColors.TabIndex = 14; + labelNumberOfColors.Text = "颜色数量"; + // + // numericUpDownNumberOfColors + // + numericUpDownNumberOfColors.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + numericUpDownNumberOfColors.Location = new Point(99, 89); + numericUpDownNumberOfColors.Maximum = new decimal(new int[] { 51200, 0, 0, 0 }); + numericUpDownNumberOfColors.Minimum = new decimal(new int[] { 4, 0, 0, 0 }); + numericUpDownNumberOfColors.Name = "numericUpDownNumberOfColors"; + numericUpDownNumberOfColors.Size = new Size(120, 23); + numericUpDownNumberOfColors.TabIndex = 13; + numericUpDownNumberOfColors.Value = new decimal(new int[] { 4, 0, 0, 0 }); + // + // StartColor + // + StartColor.BorderStyle = BorderStyle.FixedSingle; + StartColor.Cursor = Cursors.Hand; + StartColor.Location = new Point(99, 59); + StartColor.Name = "StartColor"; + StartColor.Size = new Size(45, 17); + StartColor.TabIndex = 7; + StartColor.TabStop = false; + StartColor.Click += StartColor_Click; + // + // labelMonochrome + // + labelMonochrome.AutoSize = true; + labelMonochrome.Location = new Point(163, 30); + labelMonochrome.Name = "labelMonochrome"; + labelMonochrome.Size = new Size(56, 17); + labelMonochrome.TabIndex = 12; + labelMonochrome.Text = "是否单色"; + // + // StopColor + // + StopColor.BorderStyle = BorderStyle.FixedSingle; + StopColor.Cursor = Cursors.Hand; + StopColor.Location = new Point(225, 59); + StopColor.Name = "StopColor"; + StopColor.Size = new Size(45, 17); + StopColor.TabIndex = 8; + StopColor.TabStop = false; + StopColor.Click += StopColor_Click; + // + // checkBoxMonochrome + // + checkBoxMonochrome.AutoSize = true; + checkBoxMonochrome.Location = new Point(225, 32); + checkBoxMonochrome.Name = "checkBoxMonochrome"; + checkBoxMonochrome.Size = new Size(15, 14); + checkBoxMonochrome.TabIndex = 11; + checkBoxMonochrome.UseVisualStyleBackColor = true; + checkBoxMonochrome.CheckedChanged += checkBoxMonochrome_CheckedChanged; + // + // labelStartColor + // + labelStartColor.AutoSize = true; + labelStartColor.Location = new Point(16, 59); + labelStartColor.Name = "labelStartColor"; + labelStartColor.Size = new Size(56, 17); + labelStartColor.TabIndex = 9; + labelStartColor.Text = "起始颜色"; + // + // labelStopColor + // + labelStopColor.AutoSize = true; + labelStopColor.Location = new Point(163, 59); + labelStopColor.Name = "labelStopColor"; + labelStopColor.Size = new Size(56, 17); + labelStopColor.TabIndex = 10; + labelStopColor.Text = "停止颜色"; + // + // buttonReset + // +<<<<<<< HEAD + buttonReset.Location = new Point(8, 665); +======= + buttonReset.Location = new Point(8, 509); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + buttonReset.Name = "buttonReset"; + buttonReset.Size = new Size(75, 23); + buttonReset.TabIndex = 3; + buttonReset.Text = "重置"; + buttonReset.UseVisualStyleBackColor = true; +<<<<<<< HEAD + buttonReset.Click += ButtonReset_Click; + // + // buttonSave + // + buttonSave.Location = new Point(222, 665); +======= + buttonReset.Click += buttonReset_Click; + // + // buttonSave + // + buttonSave.Location = new Point(222, 509); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(75, 23); + buttonSave.TabIndex = 2; + buttonSave.Text = "保存"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // Display + // +<<<<<<< HEAD + Display.Controls.Add(numericUpDownStripeSpacing); + Display.Controls.Add(label4); + Display.Controls.Add(label2); + Display.Controls.Add(checkBoxSmoothStripe); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Display.Controls.Add(checkBoxBottomEdge); + Display.Controls.Add(checkBoxRotundity); + Display.Controls.Add(checkBoxFrame); + Display.Controls.Add(checkBoxWavyLine); + Display.Controls.Add(labelBottomEdge); + Display.Controls.Add(labelRotundity); + Display.Controls.Add(labelFrame); + Display.Controls.Add(labelWaveLineDisplay); +<<<<<<< HEAD + Display.Location = new Point(8, 409); +======= + Display.Location = new Point(8, 382); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Display.Name = "Display"; + Display.Size = new Size(289, 122); + Display.TabIndex = 1; + Display.TabStop = false; + Display.Text = "显示内容"; + // +<<<<<<< HEAD + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(163, 97); + label2.Name = "label2"; + label2.Size = new Size(56, 17); + label2.TabIndex = 15; + label2.Text = "平滑圆角"; + // + // checkBoxSmoothStripe + // + checkBoxSmoothStripe.AutoSize = true; + checkBoxSmoothStripe.Location = new Point(255, 98); + checkBoxSmoothStripe.Name = "checkBoxSmoothStripe"; + checkBoxSmoothStripe.Size = new Size(15, 14); + checkBoxSmoothStripe.TabIndex = 14; + checkBoxSmoothStripe.UseVisualStyleBackColor = true; + // +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // checkBoxBottomEdge + // + checkBoxBottomEdge.AutoSize = true; + checkBoxBottomEdge.Location = new Point(130, 98); + checkBoxBottomEdge.Name = "checkBoxBottomEdge"; + checkBoxBottomEdge.Size = new Size(15, 14); + checkBoxBottomEdge.TabIndex = 13; + checkBoxBottomEdge.UseVisualStyleBackColor = true; + // + // checkBoxRotundity + // + checkBoxRotundity.AutoSize = true; + checkBoxRotundity.Location = new Point(130, 72); + checkBoxRotundity.Name = "checkBoxRotundity"; + checkBoxRotundity.Size = new Size(15, 14); + checkBoxRotundity.TabIndex = 12; + checkBoxRotundity.UseVisualStyleBackColor = true; + // + // checkBoxFrame + // + checkBoxFrame.AutoSize = true; + checkBoxFrame.Location = new Point(130, 46); + checkBoxFrame.Name = "checkBoxFrame"; + checkBoxFrame.Size = new Size(15, 14); + checkBoxFrame.TabIndex = 11; + checkBoxFrame.UseVisualStyleBackColor = true; + // + // checkBoxWavyLine + // + checkBoxWavyLine.AutoSize = true; + checkBoxWavyLine.Location = new Point(130, 20); + checkBoxWavyLine.Name = "checkBoxWavyLine"; + checkBoxWavyLine.Size = new Size(15, 14); + checkBoxWavyLine.TabIndex = 10; + checkBoxWavyLine.UseVisualStyleBackColor = true; + // + // labelBottomEdge + // + labelBottomEdge.AutoSize = true; + labelBottomEdge.Location = new Point(16, 97); + labelBottomEdge.Name = "labelBottomEdge"; + labelBottomEdge.Size = new Size(80, 17); + labelBottomEdge.TabIndex = 5; + labelBottomEdge.Text = "是否显示底边"; + // + // labelRotundity + // + labelRotundity.AutoSize = true; + labelRotundity.Location = new Point(16, 71); + labelRotundity.Name = "labelRotundity"; + labelRotundity.Size = new Size(80, 17); + labelRotundity.TabIndex = 4; + labelRotundity.Text = "是否显示圆形"; + // + // labelFrame + // + labelFrame.AutoSize = true; + labelFrame.Location = new Point(16, 45); + labelFrame.Name = "labelFrame"; + labelFrame.Size = new Size(80, 17); + labelFrame.TabIndex = 3; + labelFrame.Text = "是否显示边框"; + // + // labelWaveLineDisplay + // + labelWaveLineDisplay.AutoSize = true; + labelWaveLineDisplay.Location = new Point(16, 19); + labelWaveLineDisplay.Name = "labelWaveLineDisplay"; + labelWaveLineDisplay.Size = new Size(80, 17); + labelWaveLineDisplay.TabIndex = 2; + labelWaveLineDisplay.Text = "是否显示频谱"; + // + // Effect + // + Effect.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; +<<<<<<< HEAD + Effect.Controls.Add(labelWindowFuncText); + Effect.Controls.Add(selectWindowFunc); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Effect.Controls.Add(numericUpDownFourierVariation); + Effect.Controls.Add(labelFourierVariation); + Effect.Controls.Add(numericUpDownSpectralShift); + Effect.Controls.Add(numericUpDownRhythmicMagnification); + Effect.Controls.Add(labelSpectralShift); + Effect.Controls.Add(labelRhythmicMagnification); + Effect.Location = new Point(8, 6); + Effect.Name = "Effect"; +<<<<<<< HEAD + Effect.Size = new Size(289, 135); +======= + Effect.Size = new Size(289, 108); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Effect.TabIndex = 0; + Effect.TabStop = false; + Effect.Text = "基础参数"; + // +<<<<<<< HEAD + // labelWindowFuncText + // + labelWindowFuncText.AutoSize = true; + labelWindowFuncText.Location = new Point(13, 106); + labelWindowFuncText.Name = "labelWindowFuncText"; + labelWindowFuncText.Size = new Size(80, 17); + labelWindowFuncText.TabIndex = 8; + labelWindowFuncText.Text = "选择窗口函数"; + // + // selectWindowFunc + // + selectWindowFunc.DisplayMember = "0"; + selectWindowFunc.FormattingEnabled = true; + selectWindowFunc.Location = new Point(99, 103); + selectWindowFunc.Name = "selectWindowFunc"; + selectWindowFunc.Size = new Size(120, 25); + selectWindowFunc.TabIndex = 7; + selectWindowFunc.ValueMember = "0"; + // +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // numericUpDownFourierVariation + // + numericUpDownFourierVariation.Location = new Point(99, 74); + numericUpDownFourierVariation.Maximum = new decimal(new int[] { 999999999, 0, 0, 0 }); + numericUpDownFourierVariation.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownFourierVariation.Name = "numericUpDownFourierVariation"; + numericUpDownFourierVariation.Size = new Size(120, 23); + numericUpDownFourierVariation.TabIndex = 5; + numericUpDownFourierVariation.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // labelFourierVariation + // + labelFourierVariation.AutoSize = true; + labelFourierVariation.Location = new Point(16, 75); + labelFourierVariation.Name = "labelFourierVariation"; + labelFourierVariation.Size = new Size(80, 17); + labelFourierVariation.TabIndex = 4; + labelFourierVariation.Text = "傅里叶变化量"; + // + // numericUpDownSpectralShift + // + numericUpDownSpectralShift.DecimalPlaces = 2; + numericUpDownSpectralShift.Increment = new decimal(new int[] { 1, 0, 0, 131072 }); + numericUpDownSpectralShift.Location = new Point(99, 45); + numericUpDownSpectralShift.Maximum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownSpectralShift.Minimum = new decimal(new int[] { 2, 0, 0, -2147418112 }); + numericUpDownSpectralShift.Name = "numericUpDownSpectralShift"; + numericUpDownSpectralShift.Size = new Size(120, 23); + numericUpDownSpectralShift.TabIndex = 3; + // + // numericUpDownRhythmicMagnification + // + numericUpDownRhythmicMagnification.DecimalPlaces = 1; + numericUpDownRhythmicMagnification.Increment = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDownRhythmicMagnification.Location = new Point(99, 16); + numericUpDownRhythmicMagnification.Maximum = new decimal(new int[] { 9999, 0, 0, 0 }); + numericUpDownRhythmicMagnification.Minimum = new decimal(new int[] { 9999, 0, 0, int.MinValue }); + numericUpDownRhythmicMagnification.Name = "numericUpDownRhythmicMagnification"; + numericUpDownRhythmicMagnification.Size = new Size(120, 23); + numericUpDownRhythmicMagnification.TabIndex = 2; + // + // labelSpectralShift + // + labelSpectralShift.AutoSize = true; + labelSpectralShift.Location = new Point(16, 47); + labelSpectralShift.Name = "labelSpectralShift"; + labelSpectralShift.Size = new Size(56, 17); + labelSpectralShift.TabIndex = 1; + labelSpectralShift.Text = "频谱偏移"; + // + // labelRhythmicMagnification + // + labelRhythmicMagnification.AutoSize = true; + labelRhythmicMagnification.Location = new Point(16, 19); + labelRhythmicMagnification.Name = "labelRhythmicMagnification"; + labelRhythmicMagnification.Size = new Size(56, 17); + labelRhythmicMagnification.TabIndex = 0; + labelRhythmicMagnification.Text = "律动倍率"; + // + // Other + // +<<<<<<< HEAD + Other.Controls.Add(ThirdParty); + Other.Controls.Add(OtherResetBtn); + Other.Controls.Add(OtherSaveBtn); + Other.Location = new Point(4, 26); + Other.Name = "Other"; + Other.Padding = new Padding(3); + Other.Size = new Size(305, 692); +======= + Other.Location = new Point(4, 26); + Other.Name = "Other"; + Other.Padding = new Padding(3); + Other.Size = new Size(305, 538); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Other.TabIndex = 1; + Other.Text = "其他"; + Other.UseVisualStyleBackColor = true; + // +<<<<<<< HEAD + // ThirdParty + // + ThirdParty.Controls.Add(CheckBoxAutoStop); + ThirdParty.Controls.Add(OtherDisplayName); + ThirdParty.Controls.Add(LabelAutoStop); + ThirdParty.Controls.Add(label3); + ThirdParty.Controls.Add(panelEx1); + ThirdParty.Controls.Add(VideoRateLabel); + ThirdParty.Controls.Add(trackBarVideoVolume); + ThirdParty.Controls.Add(VideoVolumeLabel); + ThirdParty.Controls.Add(trackBarVideoRate); + ThirdParty.Controls.Add(videoView1); + ThirdParty.Controls.Add(UseOtherWallpaper); + ThirdParty.Controls.Add(label1); + ThirdParty.Location = new Point(8, 6); + ThirdParty.Name = "ThirdParty"; + ThirdParty.Size = new Size(289, 289); + ThirdParty.TabIndex = 6; + ThirdParty.TabStop = false; + ThirdParty.Text = "第三方壁纸"; + // + // CheckBoxAutoStop + // + CheckBoxAutoStop.AutoSize = true; + CheckBoxAutoStop.Location = new Point(193, 246); + CheckBoxAutoStop.Name = "CheckBoxAutoStop"; + CheckBoxAutoStop.Size = new Size(15, 14); + CheckBoxAutoStop.TabIndex = 18; + CheckBoxAutoStop.UseVisualStyleBackColor = true; + // + // OtherDisplayName + // + OtherDisplayName.AutoSize = true; + OtherDisplayName.Location = new Point(140, 219); + OtherDisplayName.Name = "OtherDisplayName"; + OtherDisplayName.Size = new Size(68, 17); + OtherDisplayName.TabIndex = 24; + OtherDisplayName.Text = "没有初始化"; + // + // LabelAutoStop + // + LabelAutoStop.AutoSize = true; + LabelAutoStop.Location = new Point(16, 245); + LabelAutoStop.Name = "LabelAutoStop"; + LabelAutoStop.Size = new Size(140, 17); + LabelAutoStop.TabIndex = 0; + LabelAutoStop.Text = "其它应用全屏时暂停壁纸"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(16, 219); + label3.Name = "label3"; + label3.Size = new Size(80, 17); + label3.TabIndex = 23; + label3.Text = "显示器注册名"; + // + // panelEx1 + // + panelEx1.BackColor = Color.Transparent; + panelEx1.BorderThickness = 1F; + panelEx1.Cursor = Cursors.Hand; + panelEx1.Location = new Point(16, 40); + panelEx1.Name = "panelEx1"; + panelEx1.Opacity = 0.5F; + panelEx1.RotateAngle = 0F; + panelEx1.Size = new Size(192, 108); + panelEx1.TabIndex = 22; + panelEx1.Click += videoView1_Click; + // + // VideoRateLabel + // + VideoRateLabel.AutoSize = true; + VideoRateLabel.Location = new Point(229, 182); + VideoRateLabel.Name = "VideoRateLabel"; + VideoRateLabel.Size = new Size(15, 17); + VideoRateLabel.TabIndex = 21; + VideoRateLabel.Text = "1"; + // + // trackBarVideoVolume + // + trackBarVideoVolume.Location = new Point(223, 40); + trackBarVideoVolume.Maximum = 100; + trackBarVideoVolume.Name = "trackBarVideoVolume"; + trackBarVideoVolume.Orientation = Orientation.Vertical; + trackBarVideoVolume.Size = new Size(45, 104); + trackBarVideoVolume.TabIndex = 7; + trackBarVideoVolume.Value = 100; + trackBarVideoVolume.Scroll += trackBarVideoVolume_Scroll; + // + // VideoVolumeLabel + // + VideoVolumeLabel.AutoSize = true; + VideoVolumeLabel.Location = new Point(229, 154); + VideoVolumeLabel.Name = "VideoVolumeLabel"; + VideoVolumeLabel.Size = new Size(29, 17); + VideoVolumeLabel.TabIndex = 20; + VideoVolumeLabel.Text = "100"; + // + // trackBarVideoRate + // + trackBarVideoRate.Location = new Point(16, 154); + trackBarVideoRate.Maximum = 100; + trackBarVideoRate.Minimum = 5; + trackBarVideoRate.Name = "trackBarVideoRate"; + trackBarVideoRate.Size = new Size(192, 45); + trackBarVideoRate.TabIndex = 19; + trackBarVideoRate.TickStyle = TickStyle.TopLeft; + trackBarVideoRate.Value = 10; + trackBarVideoRate.Scroll += trackBarVideoRate_Scroll; + // + // videoView1 + // + videoView1.BackColor = Color.Black; + videoView1.Cursor = Cursors.Hand; + videoView1.Location = new Point(16, 40); + videoView1.MediaPlayer = null; + videoView1.Name = "videoView1"; + videoView1.Size = new Size(192, 108); + videoView1.TabIndex = 18; + videoView1.Text = "videoView1"; + // + // UseOtherWallpaper + // + UseOtherWallpaper.AutoSize = true; + UseOtherWallpaper.Location = new Point(193, 21); + UseOtherWallpaper.Name = "UseOtherWallpaper"; + UseOtherWallpaper.Size = new Size(15, 14); + UseOtherWallpaper.TabIndex = 17; + UseOtherWallpaper.UseVisualStyleBackColor = true; + UseOtherWallpaper.CheckedChanged += UseOtherWallpaper_CheckedChanged; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(16, 19); + label1.Name = "label1"; + label1.Size = new Size(92, 17); + label1.TabIndex = 5; + label1.Text = "启用第三方壁纸"; + // + // OtherResetBtn + // + OtherResetBtn.Location = new Point(8, 665); + OtherResetBtn.Name = "OtherResetBtn"; + OtherResetBtn.Size = new Size(75, 23); + OtherResetBtn.TabIndex = 5; + OtherResetBtn.Text = "重置"; + OtherResetBtn.UseVisualStyleBackColor = true; + OtherResetBtn.Click += OtherResetBtn_Click; + // + // OtherSaveBtn + // + OtherSaveBtn.Location = new Point(222, 665); + OtherSaveBtn.Name = "OtherSaveBtn"; + OtherSaveBtn.Size = new Size(75, 23); + OtherSaveBtn.TabIndex = 4; + OtherSaveBtn.Text = "保存"; + OtherSaveBtn.UseVisualStyleBackColor = true; + OtherSaveBtn.Click += OtherSaveBtn_Click; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(163, 71); + label4.Name = "label4"; + label4.Size = new Size(56, 17); + label4.TabIndex = 16; + label4.Text = "条纹间隔"; + // + // numericUpDownStripeSpacing + // + numericUpDownStripeSpacing.Location = new Point(225, 68); + numericUpDownStripeSpacing.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownStripeSpacing.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownStripeSpacing.Name = "numericUpDownStripeSpacing"; + numericUpDownStripeSpacing.Size = new Size(45, 23); + numericUpDownStripeSpacing.TabIndex = 9; + numericUpDownStripeSpacing.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // SetFrom + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; +<<<<<<< HEAD + ClientSize = new Size(313, 722); +======= + ClientSize = new Size(313, 568); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + Controls.Add(tabControl); + FormBorderStyle = FormBorderStyle.FixedSingle; + Icon = (Icon)resources.GetObject("$this.Icon"); + MaximizeBox = false; + Name = "SetFrom"; + Text = "设置"; + FormClosed += SetFrom_FormClosed; + Load += SetForm_Load; +<<<<<<< HEAD + LocationChanged += SetFrom_LocationChanged; + tabControl.ResumeLayout(false); + Routine.ResumeLayout(false); + MultiMonitorCompatibility.ResumeLayout(false); + MultiMonitorCompatibility.PerformLayout(); +======= + tabControl.ResumeLayout(false); + Routine.ResumeLayout(false); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + groupBoxColor.ResumeLayout(false); + groupBoxColor.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)BackgroundImage).EndInit(); + ((System.ComponentModel.ISupportInitialize)BackgroundColor).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownNumberOfColors).EndInit(); + ((System.ComponentModel.ISupportInitialize)StartColor).EndInit(); + ((System.ComponentModel.ISupportInitialize)StopColor).EndInit(); + Display.ResumeLayout(false); + Display.PerformLayout(); + Effect.ResumeLayout(false); + Effect.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownFourierVariation).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpectralShift).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownRhythmicMagnification).EndInit(); +<<<<<<< HEAD + Other.ResumeLayout(false); + ThirdParty.ResumeLayout(false); + ThirdParty.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoVolume).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackBarVideoRate).EndInit(); + ((System.ComponentModel.ISupportInitialize)videoView1).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStripeSpacing).EndInit(); +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + ResumeLayout(false); + } + + #endregion + + private TabControl tabControl; + private TabPage Routine; + private TabPage Other; + private GroupBox Effect; + private Label labelRhythmicMagnification; + private Label labelSpectralShift; + private GroupBox Display; + private Label labelBottomEdge; + private Label labelRotundity; + private Label labelFrame; + private Label labelWaveLineDisplay; + private NumericUpDown numericUpDownSpectralShift; + private NumericUpDown numericUpDownRhythmicMagnification; + private Button buttonReset; + private Button buttonSave; + private CheckBox checkBoxBottomEdge; + private CheckBox checkBoxRotundity; + private CheckBox checkBoxFrame; + private CheckBox checkBoxWavyLine; + private NumericUpDown numericUpDownFourierVariation; + private Label labelFourierVariation; + private PictureBox StartColor; + private Label labelStopColor; + private Label labelStartColor; + private PictureBox StopColor; + private Label labelMonochrome; + private CheckBox checkBoxMonochrome; + private Label labelNumberOfColors; + private NumericUpDown numericUpDownNumberOfColors; + private GroupBox groupBoxColor; + private CheckBox checkBoxUseDefault; + private Label labelUseSystemColor; + private Label labelBackgroundCOlor; + private PictureBox BackgroundColor; + private Label labelBackgroundImg; + private PictureBox BackgroundImage; + private Label labelBackImgOrBackColor; + private CheckBox checkBoxImgOrColor; +<<<<<<< HEAD + private GroupBox MultiMonitorCompatibility; + private Label DisplayRegistrationName; + private Label DisplayName; + private CheckBox checkBoxIsShow; + private Label IsTheMonitorEnabled; + private Label LabelUsingUnifiedConfiguration; + private CheckBox checkBoxUsingUnifiedConfiguration; + private CheckBox RoutineCheckBoxAutoStop; + private Label LableRoutineAutoStop; + private Button OtherResetBtn; + private Button OtherSaveBtn; + private GroupBox ThirdParty; + private CheckBox UseOtherWallpaper; + private Label label1; + private LibVLCSharp.WinForms.VideoView videoView1; + private Label VideoRateLabel; + private TrackBar trackBarVideoVolume; + private Label VideoVolumeLabel; + private TrackBar trackBarVideoRate; + private PanelEx panelEx1; + private Label OtherDisplayName; + private Label label3; + private CheckBox CheckBoxAutoStop; + private Label LabelAutoStop; + private Label labelWindowFuncText; + private ComboBox selectWindowFunc; + private Label label2; + private CheckBox checkBoxSmoothStripe; + private NumericUpDown numericUpDownStripeSpacing; + private Label label4; +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } +} \ No newline at end of file diff --git a/AudioVisualizer/SetForm.cs b/AudioVisualizer/SetForm.cs new file mode 100644 index 0000000..f43d6cd --- /dev/null +++ b/AudioVisualizer/SetForm.cs @@ -0,0 +1,397 @@ +using AudioWallpaper.Entity; +using LibVLCSharp.Shared; +using System.Runtime.CompilerServices; + +namespace AudioWallpaper { + public partial class SetFrom : Form { + public static String ConfigFilePath = Application.StartupPath + "\\config.ini"; + public String? BackImagePath = null; + public String? OtherVideoPath = null; + private static SetFrom? setFrom = null; + private Screen NowWindowOnScrenn; + private System.Timers.Timer debounceTimer; + private const double DEBOUNCE_TIME = 150; + public static int FullScreenWindowCount = 0; + private LibVLC? libVLC = new LibVLC(); + private MediaPlayer? mediaPlayer; + private Media? media; + private String[] windowFunc = new String[] { "RECTANGULAR", "HANNING", "HAMMING", "BLACKMAN", "BARTLETT" }; + + private SetFrom() { + debounceTimer = new System.Timers.Timer(DEBOUNCE_TIME); + debounceTimer.Elapsed += DebounceTimer_Tick; + debounceTimer.AutoReset = false; + + } + public delegate void ReLoadConfig(ConfigurationObject configurationObject); + public event ReLoadConfig ReloadConfig; + + + + public static SetFrom ShowSetFrom() { + if (setFrom == null) { + setFrom = new SetFrom(); + setFrom.InitializeComponent(); + setFrom.selectWindowFunc.Items.Clear(); + foreach (string item in setFrom.windowFunc) { + setFrom.selectWindowFunc.Items.Add(item); + } + } + return setFrom; + } + private void buttonSave_Click(object sender, EventArgs e) { + SavaConfig(); + } + private void SavaConfig() { + //创建配置对象 + GeneralConfigurationObjects generalConfigurationObjects = new GeneralConfigurationObjects { + //为配置对象添加内容 + DefaultRadical = (float)numericUpDownRhythmicMagnification.Value, + DefaultOffset = (float)numericUpDownSpectralShift.Value, + DefaultFourierVariation = (int)numericUpDownFourierVariation.Value, + ApplyWindowFunc = selectWindowFunc.SelectedItem != null ? selectWindowFunc.SelectedItem.ToString() : "", + DefaultColor = StartColor.BackColor, + DefaultStopColor = StopColor.BackColor, + UseDefaultColorOrNOt = checkBoxUseDefault.Checked, + NumberOfColors = (int)numericUpDownNumberOfColors.Value, + MonochromeOrNot = checkBoxMonochrome.Checked, + BackgroundColor = BackgroundColor.BackColor, + BackImgOrNot = checkBoxImgOrColor.Checked, + BackgroundImagePath = BackImagePath, + WavyLine = checkBoxWavyLine.Checked, + Frame = checkBoxFrame.Checked, + Rotundity = checkBoxRotundity.Checked, + Stripe = checkBoxBottomEdge.Checked, + SmoothStripe = checkBoxSmoothStripe.Checked, + StripeSpacing = (uint)numericUpDownStripeSpacing.Value, + SettingForScreenName = DisplayName.Text, + IsShow = checkBoxIsShow.Checked, + IsUsingUnifiedConfiguration = checkBoxUsingUnifiedConfiguration.Checked, + AutoStopWallPaper = RoutineCheckBoxAutoStop.Checked + }; + //保存设置 + generalConfigurationObjects.SaveConfig(ConfigFilePath); + //创建其他配置对象 + VideoWallpaperConfigObject videoWallpaperConfigObject = new VideoWallpaperConfigObject { + Rate = trackBarVideoRate.Value, + Volume = trackBarVideoVolume.Value, + Url = OtherVideoPath, + SettingForScreenName = OtherDisplayName.Text, + IsShow = UseOtherWallpaper.Checked, + AutoStopWallPaper = CheckBoxAutoStop.Checked + }; + videoWallpaperConfigObject.SaveConfig(ConfigFilePath); + + + ConfigurationObject configurationObject = new ConfigurationObject() { + GeneralConfigurationObjects = generalConfigurationObjects, + VideoWallpaperConfigObject = videoWallpaperConfigObject + }; + + if (ReloadConfig != null) { + ReloadConfig(configurationObject); + } + } + /// + /// 设置窗体加载事件 + /// + /// + /// + private void SetForm_Load(object sender, EventArgs e) { + //appBarManager.RegisterCallbackMessage(); + //appBarManage + ShowSetData(); + ControlStatusUpdates(); + } + + public void ShowSetData() { + //获取当前显示器 + NowWindowOnScrenn = GetThisWindowOnScreen(); + DisplayName.Text = NowWindowOnScrenn.DeviceName; + OtherDisplayName.Text = NowWindowOnScrenn.DeviceName; + //创建配置对象 + ConfigurationObject configurationObject = new ConfigurationObject(); + GeneralConfigurationObjects generalConfigurationObjects = configurationObject.GeneralConfigurationObjects.LoadConfiguration(ConfigFilePath, NowWindowOnScrenn.DeviceName); + VideoWallpaperConfigObject videoWallpaperConfig = configurationObject.VideoWallpaperConfigObject.LoadConfig(ConfigFilePath, NowWindowOnScrenn.DeviceName); + + numericUpDownRhythmicMagnification.Value = (decimal)generalConfigurationObjects.DefaultRadical; + numericUpDownSpectralShift.Value = (decimal)generalConfigurationObjects.DefaultOffset; + numericUpDownFourierVariation.Value = generalConfigurationObjects.DefaultFourierVariation; + selectWindowFunc.SelectedIndex = Array.IndexOf(windowFunc, generalConfigurationObjects.ApplyWindowFunc) >= 0 ? Array.IndexOf(windowFunc, generalConfigurationObjects.ApplyWindowFunc) : 0; + StartColor.BackColor = generalConfigurationObjects.DefaultColor; + StopColor.BackColor = generalConfigurationObjects.DefaultStopColor; + checkBoxUseDefault.Checked = generalConfigurationObjects.UseDefaultColorOrNOt; + numericUpDownNumberOfColors.Value = generalConfigurationObjects.NumberOfColors; + checkBoxMonochrome.Checked = generalConfigurationObjects.MonochromeOrNot; + BackgroundColor.BackColor = generalConfigurationObjects.BackgroundColor; + checkBoxImgOrColor.Checked = generalConfigurationObjects.BackImgOrNot; + BackImagePath = generalConfigurationObjects.BackgroundImagePath; + if (generalConfigurationObjects.BackgroundImagePath != null) { + BackgroundImage.Image = Image.FromFile(generalConfigurationObjects.BackgroundImagePath); + } else { + BackgroundImage.Image = null; + } + checkBoxWavyLine.Checked = generalConfigurationObjects.WavyLine; + checkBoxFrame.Checked = generalConfigurationObjects.Frame; + checkBoxRotundity.Checked = generalConfigurationObjects.Rotundity; + checkBoxBottomEdge.Checked = generalConfigurationObjects.Stripe; + checkBoxSmoothStripe.Checked = generalConfigurationObjects.SmoothStripe; + numericUpDownStripeSpacing.Value = generalConfigurationObjects.StripeSpacing; + checkBoxIsShow.Checked = generalConfigurationObjects.IsShow; + checkBoxUsingUnifiedConfiguration.Checked = generalConfigurationObjects.IsUsingUnifiedConfiguration; + RoutineCheckBoxAutoStop.Checked = generalConfigurationObjects.AutoStopWallPaper; + + UseOtherWallpaper.Checked = videoWallpaperConfig.IsShow; + OtherVideoPath = videoWallpaperConfig.Url; + trackBarVideoRate.Value = videoWallpaperConfig.Rate; + trackBarVideoVolume.Value = videoWallpaperConfig.Volume; + VideoRateLabel.Text = ((float)videoWallpaperConfig.Rate / 10f).ToString(); + VideoVolumeLabel.Text = videoWallpaperConfig.Volume.ToString(); + CheckBoxAutoStop.Checked = videoWallpaperConfig.AutoStopWallPaper; + videoViewPlayer(OtherVideoPath); + + + } + private void ButtonReset_Click(object sender, EventArgs e) { + GeneralConfigurationObjects generalConfigurationObjects = new GeneralConfigurationObjects(); + generalConfigurationObjects.SettingForScreenName = NowWindowOnScrenn.DeviceName; + generalConfigurationObjects.SaveConfig(ConfigFilePath); + + ShowSetData(); + } + private void checkBoxMonochrome_CheckedChanged(object sender, EventArgs e) { + ControlStatusUpdates(); + } + + private void StartColor_Click(object sender, EventArgs e) { + //创建颜色选择器 + ColorDialog startColorDialog = new ColorDialog(); + if (startColorDialog.ShowDialog() == DialogResult.OK) { + StartColor.BackColor = startColorDialog.Color; + } + } + + private void StopColor_Click(object sender, EventArgs e) { + ColorDialog stopColorDialog = new ColorDialog(); + if (stopColorDialog.ShowDialog() == DialogResult.OK) { + StopColor.BackColor = stopColorDialog.Color; + } + } + private void BackgroundColor_Click(object sender, EventArgs e) { + ColorDialog backgroundColorDialog = new ColorDialog(); + if (backgroundColorDialog.ShowDialog() == DialogResult.OK) { + BackgroundColor.BackColor = backgroundColorDialog.Color; + } + } + /// + /// 是否使用系统默认颜色 + /// + /// + /// + private void checkBoxUseDefault_CheckedChanged(object sender, EventArgs e) { + StartColor.Enabled = !checkBoxUseDefault.Checked; + StopColor.Enabled = !checkBoxUseDefault.Checked; + if (checkBoxUseDefault.Checked && checkBoxMonochrome.Checked) { + checkBoxMonochrome.Checked = false; + } + numericUpDownNumberOfColors.Enabled = !checkBoxUseDefault.Checked; + } + private void ImgOrColor_CheckedChanged(object sender, EventArgs e) { + //选中时,背景颜色选项将不能被点击 + BackgroundColor.Enabled = !checkBoxImgOrColor.Checked; + BackgroundImage.Enabled = checkBoxImgOrColor.Checked; + } + + private void BackgroundImage_Click(object sender, EventArgs e) { + //创建文件选择框,并显示,选择文件 + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = "图片文件(*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg"; + dialog.Title = "请选择一张图片作为背景"; + if (dialog.ShowDialog() == DialogResult.OK) { + BackImagePath = dialog.FileName; + BackgroundImage.Image = Image.FromFile(dialog.FileName); + } + } + + private void SetFrom_FormClosed(object sender, FormClosedEventArgs e) { + DisposeVideo(); + Visible = false; + + } + /// + /// 获取当期窗体所在屏幕 + /// + private Screen GetThisWindowOnScreen() { + return Screen.FromControl(this); + } + + private void SetFrom_LocationChanged(object sender, EventArgs e) { + //防抖,调用showsetdata函数 + debounceTimer.Stop(); + debounceTimer.Start(); + + } + /// + /// 防抖 + /// + /// + /// + private void DebounceTimer_Tick(object sender, EventArgs e) { + this.Invoke(new Action(() => { + if (GetThisWindowOnScreen().GetHashCode() != NowWindowOnScrenn.GetHashCode()) { + ShowSetData(); + } + ControlStatusUpdates(); + })); + } + + private void checkBoxUsingUnifiedConfiguration_CheckedChanged(object sender, EventArgs e) { + if (checkBoxUsingUnifiedConfiguration.Checked) { + + } + } + + private void checkBoxIsShow_CheckedChanged(object sender, EventArgs e) { + ControlStatusUpdates(); + if (checkBoxIsShow.Checked && UseOtherWallpaper.Checked) { + UseOtherWallpaper.Checked = false; + } + } + /// + /// 统一更新控件状态 + /// + private void ControlStatusUpdates() { + bool IsShow = checkBoxIsShow.Checked; + Display.Enabled = IsShow; + groupBoxColor.Enabled = IsShow; + Effect.Enabled = IsShow; + checkBoxUsingUnifiedConfiguration.Enabled = IsShow; + + //是否单色 如果选中,禁用停止颜色选项卡 + StopColor.Cursor = checkBoxMonochrome.Checked ? Cursors.No : Cursors.Hand; + StopColor.Enabled = !checkBoxMonochrome.Checked; + if (checkBoxMonochrome.Checked && checkBoxUseDefault.Checked) { + checkBoxUseDefault.Checked = false; + } + numericUpDownNumberOfColors.Enabled = !checkBoxMonochrome.Checked; + } + /// + /// 是否使用第三方壁纸 + /// + /// + /// + private void UseOtherWallpaper_CheckedChanged(object sender, EventArgs e) { + if (UseOtherWallpaper.Checked && checkBoxIsShow.Checked) { + checkBoxIsShow.Checked = false; + } + } + /// + /// 视频 + /// + /// + /// + private void videoView1_Click(object sender, EventArgs e) { + + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = "视频(*.MP4;*.AVI;*.MKV;*.MOV;*.WMV)|*.MP4;*.AVI;*.MKV;*.MOV;*.WMV"; + dialog.Title = "请选择一个视频文件作为壁纸"; + if (dialog.ShowDialog() == DialogResult.OK) { + OtherVideoPath = dialog.FileName; + videoViewPlayer(OtherVideoPath); + } + } + /// + /// 音量滑动条 + /// + /// + /// + private void trackBarVideoVolume_Scroll(object sender, EventArgs e) { + VideoVolumeLabel.Text = trackBarVideoVolume.Value.ToString(); + if (mediaPlayer != null) { + mediaPlayer.Volume = trackBarVideoVolume.Value; + } + } + /// + /// 速率滑动条 + /// + /// + /// + private void trackBarVideoRate_Scroll(object sender, EventArgs e) { + VideoRateLabel.Text = ((float)trackBarVideoRate.Value / 10f).ToString(); + if (mediaPlayer != null) { + mediaPlayer.SetRate((float)trackBarVideoRate.Value / 10f); + } + } + private void videoViewPlayer(String? url) { + if (url == null) { + return; + } + if (libVLC == null) { + libVLC = new LibVLC(); + } + Uri? uri = null; + + try { + uri = new Uri(url); + } catch (Exception) { + return; + }; + if (uri == null) { + return; + } + + media = new Media(libVLC, uri); + + if (mediaPlayer == null) { + mediaPlayer = new MediaPlayer(libVLC); + mediaPlayer.TimeChanged += MediaPlayer_TimeChanged; + mediaPlayer.EndReached += MediaPlayer_EndReached; + } + videoView1.MediaPlayer = mediaPlayer; + System.GC.Collect(); + mediaPlayer.SetRate((float)trackBarVideoRate.Value / 10f); + mediaPlayer.Mute = true; + mediaPlayer.Play(media); + } + + private void MediaPlayer_TimeChanged(object? sender, MediaPlayerTimeChangedEventArgs e) { + if (e.Time >= 3000 && mediaPlayer != null && media != null) { + mediaPlayer.Position = 0; + } + } + private void MediaPlayer_EndReached(object? sender, EventArgs e) { + if (media != null && mediaPlayer != null) { + ThreadPool.QueueUserWorkItem((p) => mediaPlayer.Play(media)); + } + } + private void DisposeVideo() { + if (mediaPlayer != null) { + mediaPlayer.TimeChanged -= MediaPlayer_TimeChanged; + mediaPlayer.EndReached -= MediaPlayer_EndReached; + mediaPlayer.Stop(); + mediaPlayer.Dispose(); + mediaPlayer = null; + } + if (media != null) { + media.Dispose(); + media = null; + } + GC.Collect(); + } + /// + /// 其他配置保存按钮 + /// + /// + /// + private void OtherSaveBtn_Click(object sender, EventArgs e) { + SavaConfig(); + } + + private void OtherResetBtn_Click(object sender, EventArgs e) { + VideoWallpaperConfigObject videoWallpaperConfigObject = new VideoWallpaperConfigObject(); + videoWallpaperConfigObject.SettingForScreenName = NowWindowOnScrenn.DeviceName; + videoWallpaperConfigObject.SaveConfig(ConfigFilePath); + ShowSetData(); + } + } +} diff --git a/AudioVisualizer/SetForm.cs.orig b/AudioVisualizer/SetForm.cs.orig new file mode 100644 index 0000000..5306c4b --- /dev/null +++ b/AudioVisualizer/SetForm.cs.orig @@ -0,0 +1,522 @@ +<<<<<<< HEAD +using AudioWallpaper.Entity; +using LibVLCSharp.Shared; +using System.Runtime.CompilerServices; + +namespace AudioWallpaper { + public partial class SetFrom : Form { + public static String ConfigFilePath = Application.StartupPath + "\\config.ini"; + public String? BackImagePath = null; + public String? OtherVideoPath = null; + private static SetFrom? setFrom = null; + private Screen NowWindowOnScrenn; + private System.Timers.Timer debounceTimer; + private const double DEBOUNCE_TIME = 150; + public static int FullScreenWindowCount = 0; + private LibVLC? libVLC = new LibVLC(); + private MediaPlayer? mediaPlayer; + private Media? media; + private String[] windowFunc = new String[] { "RECTANGULAR", "HANNING", "HAMMING", "BLACKMAN", "BARTLETT" }; + + private SetFrom() { + debounceTimer = new System.Timers.Timer(DEBOUNCE_TIME); + debounceTimer.Elapsed += DebounceTimer_Tick; + debounceTimer.AutoReset = false; + + } + public delegate void ReLoadConfig(ConfigurationObject configurationObject); + public event ReLoadConfig ReloadConfig; + + + + public static SetFrom ShowSetFrom() { + if (setFrom == null) { + setFrom = new SetFrom(); + setFrom.InitializeComponent(); + setFrom.selectWindowFunc.Items.Clear(); + foreach (string item in setFrom.windowFunc) { + setFrom.selectWindowFunc.Items.Add(item); + } + } + return setFrom; + } + private void buttonSave_Click(object sender, EventArgs e) { + SavaConfig(); + } + private void SavaConfig() { + //创建配置对象 + GeneralConfigurationObjects generalConfigurationObjects = new GeneralConfigurationObjects { +======= +using LibAudioVisualizer; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AudioVisualizer { + public partial class SetFrom : Form { + String ConfigFilePath = Application.StartupPath + "\\config.ini"; + public MainWindow MainWindowData; + public String? BackImagePath = null; + private static SetFrom? setFrom = null; + private SetFrom() { + + } + public static SetFrom ShowSetFrom(MainWindow mainWindow) { + if (setFrom == null) { + setFrom = new SetFrom(); + } + setFrom.InitializeComponent(); + setFrom.MainWindowData = mainWindow; + return setFrom; + } + private void buttonSave_Click(object sender, EventArgs e) { + //创建配置对象 + ConfigurationObject configuration = new ConfigurationObject { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + //为配置对象添加内容 + DefaultRadical = (float)numericUpDownRhythmicMagnification.Value, + DefaultOffset = (float)numericUpDownSpectralShift.Value, + DefaultFourierVariation = (int)numericUpDownFourierVariation.Value, +<<<<<<< HEAD + ApplyWindowFunc = selectWindowFunc.SelectedItem != null ? selectWindowFunc.SelectedItem.ToString() : "", +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + DefaultColor = StartColor.BackColor, + DefaultStopColor = StopColor.BackColor, + UseDefaultColorOrNOt = checkBoxUseDefault.Checked, + NumberOfColors = (int)numericUpDownNumberOfColors.Value, + MonochromeOrNot = checkBoxMonochrome.Checked, + BackgroundColor = BackgroundColor.BackColor, + BackImgOrNot = checkBoxImgOrColor.Checked, + BackgroundImagePath = BackImagePath, + WavyLine = checkBoxWavyLine.Checked, + Frame = checkBoxFrame.Checked, + Rotundity = checkBoxRotundity.Checked, +<<<<<<< HEAD + Stripe = checkBoxBottomEdge.Checked, + SmoothStripe = checkBoxSmoothStripe.Checked, + StripeSpacing = (uint)numericUpDownStripeSpacing.Value, + SettingForScreenName = DisplayName.Text, + IsShow = checkBoxIsShow.Checked, + IsUsingUnifiedConfiguration = checkBoxUsingUnifiedConfiguration.Checked, + AutoStopWallPaper = RoutineCheckBoxAutoStop.Checked + }; + //保存设置 + generalConfigurationObjects.SaveConfig(ConfigFilePath); + //创建其他配置对象 + VideoWallpaperConfigObject videoWallpaperConfigObject = new VideoWallpaperConfigObject { + Rate = trackBarVideoRate.Value, + Volume = trackBarVideoVolume.Value, + Url = OtherVideoPath, + SettingForScreenName = OtherDisplayName.Text, + IsShow = UseOtherWallpaper.Checked, + AutoStopWallPaper = CheckBoxAutoStop.Checked + }; + videoWallpaperConfigObject.SaveConfig(ConfigFilePath); + + + ConfigurationObject configurationObject = new ConfigurationObject() { + GeneralConfigurationObjects = generalConfigurationObjects, + VideoWallpaperConfigObject = videoWallpaperConfigObject + }; + + if (ReloadConfig != null) { + ReloadConfig(configurationObject); + } +======= + Stripe = checkBoxBottomEdge.Checked + }; + //保存设置 + configuration.SaveConfiguration(ConfigFilePath); + ReloadSet(configuration); + + } + public void ReloadSet(ConfigurationObject configuration) { + MainWindow.configurationObject = configuration; + //重新生成颜色数组 + MainWindow.allColors = MainWindow.GetAllHsvColors(configuration.NumberOfColors); + + //MainWindowData.BackColor = Color.Red; + if (configuration.BackImgOrNot && configuration.BackgroundImagePath != null) { + //MainWindowData.BackColor = Color.Transparent; + //MainWindowData.BackgroundImage = Image.FromFile(configuration.BackgroundImagePath); + int iActulaWidth = Screen.PrimaryScreen.Bounds.Width; + + int iActulaHeight = Screen.PrimaryScreen.Bounds.Height; + MainWindowData.backgroundImage = new Bitmap(iActulaWidth, iActulaHeight); + using (var graphics = Graphics.FromImage(MainWindowData.backgroundImage)) { + graphics.DrawImage(Image.FromFile(configuration.BackgroundImagePath), 0, 0, iActulaWidth, iActulaHeight); + } + + } else { + MainWindowData.BackColor = configuration.BackgroundColor; + } + //修改傅里叶变化量 + + + GC.Collect(); +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + /// + /// 设置窗体加载事件 + /// + /// + /// + private void SetForm_Load(object sender, EventArgs e) { +<<<<<<< HEAD + //appBarManager.RegisterCallbackMessage(); + //appBarManage + ShowSetData(); + ControlStatusUpdates(); + } + + public void ShowSetData() { + //获取当前显示器 + NowWindowOnScrenn = GetThisWindowOnScreen(); + DisplayName.Text = NowWindowOnScrenn.DeviceName; + OtherDisplayName.Text = NowWindowOnScrenn.DeviceName; + //创建配置对象 + ConfigurationObject configurationObject = new ConfigurationObject(); + GeneralConfigurationObjects generalConfigurationObjects = configurationObject.GeneralConfigurationObjects.LoadConfiguration(ConfigFilePath, NowWindowOnScrenn.DeviceName); + VideoWallpaperConfigObject videoWallpaperConfig = configurationObject.VideoWallpaperConfigObject.LoadConfig(ConfigFilePath, NowWindowOnScrenn.DeviceName); + + numericUpDownRhythmicMagnification.Value = (decimal)generalConfigurationObjects.DefaultRadical; + numericUpDownSpectralShift.Value = (decimal)generalConfigurationObjects.DefaultOffset; + numericUpDownFourierVariation.Value = generalConfigurationObjects.DefaultFourierVariation; + selectWindowFunc.SelectedIndex = Array.IndexOf(windowFunc, generalConfigurationObjects.ApplyWindowFunc) >= 0 ? Array.IndexOf(windowFunc, generalConfigurationObjects.ApplyWindowFunc) : 0; + StartColor.BackColor = generalConfigurationObjects.DefaultColor; + StopColor.BackColor = generalConfigurationObjects.DefaultStopColor; + checkBoxUseDefault.Checked = generalConfigurationObjects.UseDefaultColorOrNOt; + numericUpDownNumberOfColors.Value = generalConfigurationObjects.NumberOfColors; + checkBoxMonochrome.Checked = generalConfigurationObjects.MonochromeOrNot; + BackgroundColor.BackColor = generalConfigurationObjects.BackgroundColor; + checkBoxImgOrColor.Checked = generalConfigurationObjects.BackImgOrNot; + BackImagePath = generalConfigurationObjects.BackgroundImagePath; + if (generalConfigurationObjects.BackgroundImagePath != null) { + BackgroundImage.Image = Image.FromFile(generalConfigurationObjects.BackgroundImagePath); + } else { + BackgroundImage.Image = null; + } + checkBoxWavyLine.Checked = generalConfigurationObjects.WavyLine; + checkBoxFrame.Checked = generalConfigurationObjects.Frame; + checkBoxRotundity.Checked = generalConfigurationObjects.Rotundity; + checkBoxBottomEdge.Checked = generalConfigurationObjects.Stripe; + checkBoxSmoothStripe.Checked = generalConfigurationObjects.SmoothStripe; + numericUpDownStripeSpacing.Value = generalConfigurationObjects.StripeSpacing; + checkBoxIsShow.Checked = generalConfigurationObjects.IsShow; + checkBoxUsingUnifiedConfiguration.Checked = generalConfigurationObjects.IsUsingUnifiedConfiguration; + RoutineCheckBoxAutoStop.Checked = generalConfigurationObjects.AutoStopWallPaper; + + UseOtherWallpaper.Checked = videoWallpaperConfig.IsShow; + OtherVideoPath = videoWallpaperConfig.Url; + trackBarVideoRate.Value = videoWallpaperConfig.Rate; + trackBarVideoVolume.Value = videoWallpaperConfig.Volume; + VideoRateLabel.Text = ((float)videoWallpaperConfig.Rate / 10f).ToString(); + VideoVolumeLabel.Text = videoWallpaperConfig.Volume.ToString(); + CheckBoxAutoStop.Checked = videoWallpaperConfig.AutoStopWallPaper; + videoViewPlayer(OtherVideoPath); + + + } + private void ButtonReset_Click(object sender, EventArgs e) { + GeneralConfigurationObjects generalConfigurationObjects = new GeneralConfigurationObjects(); + generalConfigurationObjects.SettingForScreenName = NowWindowOnScrenn.DeviceName; + generalConfigurationObjects.SaveConfig(ConfigFilePath); + + ShowSetData(); + } + private void checkBoxMonochrome_CheckedChanged(object sender, EventArgs e) { + ControlStatusUpdates(); +======= + ShowSetData(); + } + + public void ShowSetData() { + //创建配置对象 + ConfigurationObject configuration = new ConfigurationObject().LoadConfiguration(ConfigFilePath); + numericUpDownRhythmicMagnification.Value = (decimal)configuration.DefaultRadical; + numericUpDownSpectralShift.Value = (decimal)configuration.DefaultOffset; + numericUpDownFourierVariation.Value = configuration.DefaultFourierVariation; + StartColor.BackColor = configuration.DefaultColor; + StopColor.BackColor = configuration.DefaultStopColor; + checkBoxUseDefault.Checked = configuration.UseDefaultColorOrNOt; + numericUpDownNumberOfColors.Value = configuration.NumberOfColors; + checkBoxMonochrome.Checked = configuration.MonochromeOrNot; + BackgroundColor.BackColor = configuration.BackgroundColor; + checkBoxImgOrColor.Checked = configuration.BackImgOrNot; + if (configuration.BackgroundImagePath != null) { + BackgroundImage.Image = Image.FromFile(configuration.BackgroundImagePath); + } + BackImagePath = configuration.BackgroundImagePath; + checkBoxWavyLine.Checked = configuration.WavyLine; + checkBoxFrame.Checked = configuration.Frame; + checkBoxRotundity.Checked = configuration.Rotundity; + checkBoxBottomEdge.Checked = configuration.Stripe; + MainWindow.configurationObject = configuration; + } + + private void buttonReset_Click(object sender, EventArgs e) { + new ConfigurationObject().SaveConfiguration(ConfigFilePath); + ShowSetData(); + } + + private void checkBoxMonochrome_CheckedChanged(object sender, EventArgs e) { + //如果选中,禁用停止颜色选项卡 + StopColor.Cursor = checkBoxMonochrome.Checked ? Cursors.No : Cursors.Hand; + StopColor.Enabled = !checkBoxMonochrome.Checked; + if (checkBoxMonochrome.Checked && checkBoxUseDefault.Checked) { + checkBoxUseDefault.Checked = false; + } + + numericUpDownNumberOfColors.Enabled = !checkBoxMonochrome.Checked; +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } + + private void StartColor_Click(object sender, EventArgs e) { + //创建颜色选择器 + ColorDialog startColorDialog = new ColorDialog(); + if (startColorDialog.ShowDialog() == DialogResult.OK) { + StartColor.BackColor = startColorDialog.Color; + } + } + + private void StopColor_Click(object sender, EventArgs e) { + ColorDialog stopColorDialog = new ColorDialog(); + if (stopColorDialog.ShowDialog() == DialogResult.OK) { + StopColor.BackColor = stopColorDialog.Color; + } + } + private void BackgroundColor_Click(object sender, EventArgs e) { + ColorDialog backgroundColorDialog = new ColorDialog(); + if (backgroundColorDialog.ShowDialog() == DialogResult.OK) { + BackgroundColor.BackColor = backgroundColorDialog.Color; + } + } + /// + /// 是否使用系统默认颜色 + /// + /// + /// + private void checkBoxUseDefault_CheckedChanged(object sender, EventArgs e) { + StartColor.Enabled = !checkBoxUseDefault.Checked; + StopColor.Enabled = !checkBoxUseDefault.Checked; + if (checkBoxUseDefault.Checked && checkBoxMonochrome.Checked) { + checkBoxMonochrome.Checked = false; + } + numericUpDownNumberOfColors.Enabled = !checkBoxUseDefault.Checked; + } + private void ImgOrColor_CheckedChanged(object sender, EventArgs e) { + //选中时,背景颜色选项将不能被点击 + BackgroundColor.Enabled = !checkBoxImgOrColor.Checked; + BackgroundImage.Enabled = checkBoxImgOrColor.Checked; + } + + private void BackgroundImage_Click(object sender, EventArgs e) { + //创建文件选择框,并显示,选择文件 + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = "图片文件(*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg"; + dialog.Title = "请选择一张图片作为背景"; + if (dialog.ShowDialog() == DialogResult.OK) { + BackImagePath = dialog.FileName; + BackgroundImage.Image = Image.FromFile(dialog.FileName); + } + } + + private void SetFrom_FormClosed(object sender, FormClosedEventArgs e) { +<<<<<<< HEAD + DisposeVideo(); + Visible = false; + + } + /// + /// 获取当期窗体所在屏幕 + /// + private Screen GetThisWindowOnScreen() { + return Screen.FromControl(this); + } + + private void SetFrom_LocationChanged(object sender, EventArgs e) { + //防抖,调用showsetdata函数 + debounceTimer.Stop(); + debounceTimer.Start(); + + } + /// + /// 防抖 + /// + /// + /// + private void DebounceTimer_Tick(object sender, EventArgs e) { + this.Invoke(new Action(() => { + if (GetThisWindowOnScreen().GetHashCode() != NowWindowOnScrenn.GetHashCode()) { + ShowSetData(); + } + ControlStatusUpdates(); + })); + } + + private void checkBoxUsingUnifiedConfiguration_CheckedChanged(object sender, EventArgs e) { + if (checkBoxUsingUnifiedConfiguration.Checked) { + + } + } + + private void checkBoxIsShow_CheckedChanged(object sender, EventArgs e) { + ControlStatusUpdates(); + if (checkBoxIsShow.Checked && UseOtherWallpaper.Checked) { + UseOtherWallpaper.Checked = false; + } + } + /// + /// 统一更新控件状态 + /// + private void ControlStatusUpdates() { + bool IsShow = checkBoxIsShow.Checked; + Display.Enabled = IsShow; + groupBoxColor.Enabled = IsShow; + Effect.Enabled = IsShow; + checkBoxUsingUnifiedConfiguration.Enabled = IsShow; + + //是否单色 如果选中,禁用停止颜色选项卡 + StopColor.Cursor = checkBoxMonochrome.Checked ? Cursors.No : Cursors.Hand; + StopColor.Enabled = !checkBoxMonochrome.Checked; + if (checkBoxMonochrome.Checked && checkBoxUseDefault.Checked) { + checkBoxUseDefault.Checked = false; + } + numericUpDownNumberOfColors.Enabled = !checkBoxMonochrome.Checked; + } + /// + /// 是否使用第三方壁纸 + /// + /// + /// + private void UseOtherWallpaper_CheckedChanged(object sender, EventArgs e) { + if (UseOtherWallpaper.Checked && checkBoxIsShow.Checked) { + checkBoxIsShow.Checked = false; + } + } + /// + /// 视频 + /// + /// + /// + private void videoView1_Click(object sender, EventArgs e) { + + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = "视频(*.MP4;*.AVI;*.MKV;*.MOV;*.WMV)|*.MP4;*.AVI;*.MKV;*.MOV;*.WMV"; + dialog.Title = "请选择一个视频文件作为壁纸"; + if (dialog.ShowDialog() == DialogResult.OK) { + OtherVideoPath = dialog.FileName; + videoViewPlayer(OtherVideoPath); + } + } + /// + /// 音量滑动条 + /// + /// + /// + private void trackBarVideoVolume_Scroll(object sender, EventArgs e) { + VideoVolumeLabel.Text = trackBarVideoVolume.Value.ToString(); + if (mediaPlayer != null) { + mediaPlayer.Volume = trackBarVideoVolume.Value; + } + } + /// + /// 速率滑动条 + /// + /// + /// + private void trackBarVideoRate_Scroll(object sender, EventArgs e) { + VideoRateLabel.Text = ((float)trackBarVideoRate.Value / 10f).ToString(); + if (mediaPlayer != null) { + mediaPlayer.SetRate((float)trackBarVideoRate.Value / 10f); + } + } + private void videoViewPlayer(String? url) { + if (url == null) { + return; + } + if (libVLC == null) { + libVLC = new LibVLC(); + } + Uri? uri = null; + + try { + uri = new Uri(url); + } catch (Exception) { + return; + }; + if (uri == null) { + return; + } + + media = new Media(libVLC, uri); + + if (mediaPlayer == null) { + mediaPlayer = new MediaPlayer(libVLC); + mediaPlayer.TimeChanged += MediaPlayer_TimeChanged; + mediaPlayer.EndReached += MediaPlayer_EndReached; + } + videoView1.MediaPlayer = mediaPlayer; + System.GC.Collect(); + mediaPlayer.SetRate((float)trackBarVideoRate.Value / 10f); + mediaPlayer.Mute = true; + mediaPlayer.Play(media); + } + + private void MediaPlayer_TimeChanged(object? sender, MediaPlayerTimeChangedEventArgs e) { + if (e.Time >= 3000 && mediaPlayer != null && media != null) { + mediaPlayer.Position = 0; + } + } + private void MediaPlayer_EndReached(object? sender, EventArgs e) { + if (media != null && mediaPlayer != null) { + ThreadPool.QueueUserWorkItem((p) => mediaPlayer.Play(media)); + } + } + private void DisposeVideo() { + if (mediaPlayer != null) { + mediaPlayer.TimeChanged -= MediaPlayer_TimeChanged; + mediaPlayer.EndReached -= MediaPlayer_EndReached; + mediaPlayer.Stop(); + mediaPlayer.Dispose(); + mediaPlayer = null; + } + if (media != null) { + media.Dispose(); + media = null; + } + GC.Collect(); + } + /// + /// 其他配置保存按钮 + /// + /// + /// + private void OtherSaveBtn_Click(object sender, EventArgs e) { + SavaConfig(); + } + + private void OtherResetBtn_Click(object sender, EventArgs e) { + VideoWallpaperConfigObject videoWallpaperConfigObject = new VideoWallpaperConfigObject(); + videoWallpaperConfigObject.SettingForScreenName = NowWindowOnScrenn.DeviceName; + videoWallpaperConfigObject.SaveConfig(ConfigFilePath); + ShowSetData(); + } +======= + if (setFrom != null) { + setFrom.Dispose(); + setFrom = null; + } + } +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + } +} diff --git a/AudioVisualizer/SetForm.resx b/AudioVisualizer/SetForm.resx new file mode 100644 index 0000000..b67c184 --- /dev/null +++ b/AudioVisualizer/SetForm.resx @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAAAAAAAEAIADDEwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAlw + SFlzAAAOxAAADsQBlSsOGwAAE3VJREFUeJzt3XuUJFV9B/Dvr+dR1cuywspDke3qXRAwAYnyxihgICcY + TESRqFE4RwWTg8h2zbKAIu6JSJZ1poZHkJz1eAI+IyBgApiokOhRBBVBMfFgkJ1qYBUFVhZ2u2pmun75 + g1nZR1VPP253V8/9fv7sW/f270xPfbtefS9ARERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERE85F+F0C9ccCq5/epJyNfVOCU7K30U2FQvLR3VVG/ + MQAWuP0runRI4o0AnKY7CT4TTrjnda8qygsGwALmVaIAgkq7/cPA5f/HAscPeIHy/Og5AEs6HYchsLDx + w12AjjhXR55eHE+bGo8hsHDxg12APD9SowOK/CCccI43OiblwnC/CyCzSmPxGdB59n+Vt4eTzm3b9blB + VM/O3l6PM1Yg5QqPABaYRt/+ClxQDdxr2unL04CFiR/qApO1ExdET9gwUfxuu/0BfDYM3HM7Ko5yh6cA + C0hpLLoe6bvvxmZ2fgCoq7x2SPRnKU3nAGAALDAMgAVEFKenvV6oz76+2TGemHQe9vzIXFGUawyAhWXf + tBc3XL34qRbH+T2APTovh/KOAUBpngEDwAoMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhi + DAAiizEAiCzGACCyGAOAyGIMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhiDAAiizEAumzZ + 6i37DdWHj04Uh0Pxi/pI/d4n1y16ot915cX+FS0OIXqPihwlioNRwI8U8sPqhHNLv2uzAQOgCzy/dhIg + dwFwMQso9MU12AQYni3gpYU39CthUHxP/yrtn9JYdIEorgJiAPKHvw8UJwr0D38jAdZNBe5FfSx1QePa + gAYdeP7ze8+MjPwawFCLXYMwcMc6ff+sdf1aXdjT86NHARzQ6TiZ41fi+yB6TCt9FPq+alD8oon3p5fw + CMCQciX+6xnR29vs7pcq8f3VSecmo0XlzRoteJvjOjIWMGxEIF/w/GhNGLgHdqEyazEADChXamer6A2d + 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 + + + \ No newline at end of file diff --git a/AudioVisualizer/SetForm.resx.orig b/AudioVisualizer/SetForm.resx.orig new file mode 100644 index 0000000..6e96d76 --- /dev/null +++ b/AudioVisualizer/SetForm.resx.orig @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAAAAAAAEAIADDEwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAlw + SFlzAAAOxAAADsQBlSsOGwAAE3VJREFUeJzt3XuUJFV9B/Dvr+dR1cuywspDke3qXRAwAYnyxihgICcY + TESRqFE4RwWTg8h2zbKAIu6JSJZ1poZHkJz1eAI+IyBgApiokOhRBBVBMfFgkJ1qYBUFVhZ2u2pmun75 + g1nZR1VPP253V8/9fv7sW/f270xPfbtefS9ARERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERE85F+F0C9ccCq5/epJyNfVOCU7K30U2FQvLR3VVG/ + MQAWuP0runRI4o0AnKY7CT4TTrjnda8qygsGwALmVaIAgkq7/cPA5f/HAscPeIHy/Og5AEs6HYchsLDx + w12AjjhXR55eHE+bGo8hsHDxg12APD9SowOK/CCccI43OiblwnC/CyCzSmPxGdB59n+Vt4eTzm3b9blB + VM/O3l6PM1Yg5QqPABaYRt/+ClxQDdxr2unL04CFiR/qApO1ExdET9gwUfxuu/0BfDYM3HM7Ko5yh6cA + C0hpLLoe6bvvxmZ2fgCoq7x2SPRnKU3nAGAALDAMgAVEFKenvV6oz76+2TGemHQe9vzIXFGUawyAhWXf + tBc3XL34qRbH+T2APTovh/KOAUBpngEDwAoMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhi + DAAiizEAiCzGACCyGAOAyGIMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhiDAAiizEAumzZ + 6i37DdWHj04Uh0Pxi/pI/d4n1y16ot915cX+FS0OIXqPihwlioNRwI8U8sPqhHNLv2uzAQOgCzy/dhIg + dwFwMQso9MU12AQYni3gpYU39CthUHxP/yrtn9JYdIEorgJiAPKHvw8UJwr0D38jAdZNBe5FfSx1QePa + gAYdeP7ze8+MjPwawFCLXYMwcMc6ff+sdf1aXdjT86NHARzQ6TiZ41fi+yB6TCt9FPq+alD8oon3p5fw + CMCQciX+6xnR29vs7pcq8f3VSecmo0XlzRoteJvjOjIWMGxEIF/w/GhNGLgHdqEyazEADChXamer6A2d + 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 + + + \ No newline at end of file diff --git a/AudioVisualizer/VersionInformationForm.Designer.cs b/AudioVisualizer/VersionInformationForm.Designer.cs new file mode 100644 index 0000000..34ee455 --- /dev/null +++ b/AudioVisualizer/VersionInformationForm.Designer.cs @@ -0,0 +1,182 @@ +namespace AudioWallpaper { + partial class VersionInformationForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VersionInformationForm)); + linkLabelURLHome = new LinkLabel(); + labelAuthor = new Label(); + backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); + backgroundWorker2 = new System.ComponentModel.BackgroundWorker(); + labelEdition = new Label(); + backgroundWorker3 = new System.ComponentModel.BackgroundWorker(); + labelCopyright = new Label(); + backgroundWorker4 = new System.ComponentModel.BackgroundWorker(); + pictureBoxCopyright = new PictureBox(); + pictureBoxIcon = new PictureBox(); + pictureBoxLogo = new PictureBox(); + linkLabelSponsor = new LinkLabel(); + ((System.ComponentModel.ISupportInitialize)pictureBoxCopyright).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxIcon).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLogo).BeginInit(); + SuspendLayout(); + // + // linkLabelURLHome + // + linkLabelURLHome.AutoSize = true; + linkLabelURLHome.Font = new Font("宋体", 24F, FontStyle.Bold, GraphicsUnit.Point); + linkLabelURLHome.Location = new Point(82, 125); + linkLabelURLHome.Margin = new Padding(4, 0, 4, 0); + linkLabelURLHome.Name = "linkLabelURLHome"; + linkLabelURLHome.Size = new Size(412, 33); + linkLabelURLHome.TabIndex = 2; + linkLabelURLHome.TabStop = true; + linkLabelURLHome.Text = "律动壁纸——IT资源网产品"; + linkLabelURLHome.LinkClicked += linkLabelURLHome_LinkClicked; + // + // labelAuthor + // + labelAuthor.AutoSize = true; + labelAuthor.Font = new Font("华文行楷", 18F, FontStyle.Regular, GraphicsUnit.Point); + labelAuthor.Location = new Point(222, 176); + labelAuthor.Margin = new Padding(4, 0, 4, 0); + labelAuthor.Name = "labelAuthor"; + labelAuthor.Size = new Size(132, 25); + labelAuthor.TabIndex = 3; + labelAuthor.Text = "李传玖开发"; + // + // labelEdition + // + labelEdition.AutoSize = true; + labelEdition.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point); + labelEdition.Location = new Point(186, 206); + labelEdition.Margin = new Padding(4, 0, 4, 0); + labelEdition.Name = "labelEdition"; + labelEdition.Size = new Size(77, 12); + labelEdition.TabIndex = 4; + labelEdition.Text = "版本号:1.2.3"; + // + // labelCopyright + // + labelCopyright.AutoSize = true; + labelCopyright.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point); + labelCopyright.Location = new Point(336, 206); + labelCopyright.Margin = new Padding(4, 0, 4, 0); + labelCopyright.Name = "labelCopyright"; + labelCopyright.Size = new Size(41, 12); + labelCopyright.TabIndex = 5; + labelCopyright.Text = "李传玖"; + // + // pictureBoxCopyright + // + pictureBoxCopyright.Image = (Image)resources.GetObject("pictureBoxCopyright.Image"); + pictureBoxCopyright.Location = new Point(321, 206); + pictureBoxCopyright.Name = "pictureBoxCopyright"; + pictureBoxCopyright.Size = new Size(12, 12); + pictureBoxCopyright.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxCopyright.TabIndex = 6; + pictureBoxCopyright.TabStop = false; + // + // pictureBoxIcon + // + pictureBoxIcon.Cursor = Cursors.Hand; + pictureBoxIcon.Image = (Image)resources.GetObject("pictureBoxIcon.Image"); + pictureBoxIcon.Location = new Point(-1, 116); + pictureBoxIcon.Margin = new Padding(4, 3, 4, 3); + pictureBoxIcon.Name = "pictureBoxIcon"; + pictureBoxIcon.Size = new Size(69, 50); + pictureBoxIcon.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxIcon.TabIndex = 1; + pictureBoxIcon.TabStop = false; + // + // pictureBoxLogo + // + pictureBoxLogo.Cursor = Cursors.Hand; + pictureBoxLogo.Image = (Image)resources.GetObject("pictureBoxLogo.Image"); + pictureBoxLogo.Location = new Point(-1, 1); + pictureBoxLogo.Margin = new Padding(4, 3, 4, 3); + pictureBoxLogo.Name = "pictureBoxLogo"; + pictureBoxLogo.Size = new Size(519, 104); + pictureBoxLogo.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxLogo.TabIndex = 0; + pictureBoxLogo.TabStop = false; + pictureBoxLogo.Click += pictureBoxLogo_Click; + // + // linkLabelSponsor + // + linkLabelSponsor.AutoSize = true; + linkLabelSponsor.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point); + linkLabelSponsor.Location = new Point(247, 228); + linkLabelSponsor.Name = "linkLabelSponsor"; + linkLabelSponsor.Size = new Size(53, 12); + linkLabelSponsor.TabIndex = 7; + linkLabelSponsor.TabStop = true; + linkLabelSponsor.Text = "赞助开发"; + linkLabelSponsor.LinkClicked += linkLabelSponsor_LinkClicked; + // + // VersionInformationForm + // + AutoScaleDimensions = new SizeF(7F, 12F); + AutoScaleMode = AutoScaleMode.Font; + AutoSize = true; + ClientSize = new Size(518, 246); + Controls.Add(linkLabelSponsor); + Controls.Add(pictureBoxCopyright); + Controls.Add(labelCopyright); + Controls.Add(labelEdition); + Controls.Add(labelAuthor); + Controls.Add(linkLabelURLHome); + Controls.Add(pictureBoxIcon); + Controls.Add(pictureBoxLogo); + Font = new Font("宋体", 9F, FontStyle.Bold | FontStyle.Italic, GraphicsUnit.Point); + FormBorderStyle = FormBorderStyle.FixedSingle; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "VersionInformationForm"; + StartPosition = FormStartPosition.CenterScreen; + Text = "关于我们"; + ((System.ComponentModel.ISupportInitialize)pictureBoxCopyright).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxIcon).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLogo).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private PictureBox pictureBoxLogo; + private PictureBox pictureBoxIcon; + private LinkLabel linkLabelURLHome; + private Label labelAuthor; + private System.ComponentModel.BackgroundWorker backgroundWorker1; + private System.ComponentModel.BackgroundWorker backgroundWorker2; + private Label labelEdition; + private System.ComponentModel.BackgroundWorker backgroundWorker3; + private Label labelCopyright; + private System.ComponentModel.BackgroundWorker backgroundWorker4; + private PictureBox pictureBoxCopyright; + private LinkLabel linkLabelSponsor; + } +} \ No newline at end of file diff --git a/AudioVisualizer/VersionInformationForm.Designer.cs.orig b/AudioVisualizer/VersionInformationForm.Designer.cs.orig new file mode 100644 index 0000000..a83d406 --- /dev/null +++ b/AudioVisualizer/VersionInformationForm.Designer.cs.orig @@ -0,0 +1,193 @@ +<<<<<<< HEAD +namespace AudioWallpaper { +======= +namespace AudioVisualizer { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + partial class VersionInformationForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VersionInformationForm)); + linkLabelURLHome = new LinkLabel(); + labelAuthor = new Label(); + backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); + backgroundWorker2 = new System.ComponentModel.BackgroundWorker(); + labelEdition = new Label(); + backgroundWorker3 = new System.ComponentModel.BackgroundWorker(); + labelCopyright = new Label(); + backgroundWorker4 = new System.ComponentModel.BackgroundWorker(); + pictureBoxCopyright = new PictureBox(); + pictureBoxIcon = new PictureBox(); + pictureBoxLogo = new PictureBox(); + linkLabelSponsor = new LinkLabel(); + ((System.ComponentModel.ISupportInitialize)pictureBoxCopyright).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxIcon).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLogo).BeginInit(); + SuspendLayout(); + // + // linkLabelURLHome + // + linkLabelURLHome.AutoSize = true; + linkLabelURLHome.Font = new Font("宋体", 24F, FontStyle.Bold, GraphicsUnit.Point); + linkLabelURLHome.Location = new Point(82, 125); + linkLabelURLHome.Margin = new Padding(4, 0, 4, 0); + linkLabelURLHome.Name = "linkLabelURLHome"; + linkLabelURLHome.Size = new Size(412, 33); + linkLabelURLHome.TabIndex = 2; + linkLabelURLHome.TabStop = true; + linkLabelURLHome.Text = "律动壁纸——IT资源网产品"; + linkLabelURLHome.LinkClicked += linkLabelURLHome_LinkClicked; + // + // labelAuthor + // + labelAuthor.AutoSize = true; + labelAuthor.Font = new Font("华文行楷", 18F, FontStyle.Regular, GraphicsUnit.Point); + labelAuthor.Location = new Point(222, 176); + labelAuthor.Margin = new Padding(4, 0, 4, 0); + labelAuthor.Name = "labelAuthor"; + labelAuthor.Size = new Size(132, 25); + labelAuthor.TabIndex = 3; + labelAuthor.Text = "李传玖开发"; + // + // labelEdition + // + labelEdition.AutoSize = true; + labelEdition.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point); + labelEdition.Location = new Point(186, 206); + labelEdition.Margin = new Padding(4, 0, 4, 0); + labelEdition.Name = "labelEdition"; + labelEdition.Size = new Size(77, 12); + labelEdition.TabIndex = 4; +<<<<<<< HEAD + labelEdition.Text = "版本号:1.2.3"; +======= + labelEdition.Text = "版本号:1.0.1"; +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + // + // labelCopyright + // + labelCopyright.AutoSize = true; + labelCopyright.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point); + labelCopyright.Location = new Point(336, 206); + labelCopyright.Margin = new Padding(4, 0, 4, 0); + labelCopyright.Name = "labelCopyright"; + labelCopyright.Size = new Size(41, 12); + labelCopyright.TabIndex = 5; + labelCopyright.Text = "李传玖"; + // + // pictureBoxCopyright + // + pictureBoxCopyright.Image = (Image)resources.GetObject("pictureBoxCopyright.Image"); + pictureBoxCopyright.Location = new Point(321, 206); + pictureBoxCopyright.Name = "pictureBoxCopyright"; + pictureBoxCopyright.Size = new Size(12, 12); + pictureBoxCopyright.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxCopyright.TabIndex = 6; + pictureBoxCopyright.TabStop = false; + // + // pictureBoxIcon + // + pictureBoxIcon.Cursor = Cursors.Hand; + pictureBoxIcon.Image = (Image)resources.GetObject("pictureBoxIcon.Image"); + pictureBoxIcon.Location = new Point(-1, 116); + pictureBoxIcon.Margin = new Padding(4, 3, 4, 3); + pictureBoxIcon.Name = "pictureBoxIcon"; + pictureBoxIcon.Size = new Size(69, 50); + pictureBoxIcon.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxIcon.TabIndex = 1; + pictureBoxIcon.TabStop = false; + // + // pictureBoxLogo + // + pictureBoxLogo.Cursor = Cursors.Hand; + pictureBoxLogo.Image = (Image)resources.GetObject("pictureBoxLogo.Image"); + pictureBoxLogo.Location = new Point(-1, 1); + pictureBoxLogo.Margin = new Padding(4, 3, 4, 3); + pictureBoxLogo.Name = "pictureBoxLogo"; + pictureBoxLogo.Size = new Size(519, 104); + pictureBoxLogo.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxLogo.TabIndex = 0; + pictureBoxLogo.TabStop = false; + pictureBoxLogo.Click += pictureBoxLogo_Click; + // + // linkLabelSponsor + // + linkLabelSponsor.AutoSize = true; + linkLabelSponsor.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point); + linkLabelSponsor.Location = new Point(247, 228); + linkLabelSponsor.Name = "linkLabelSponsor"; + linkLabelSponsor.Size = new Size(53, 12); + linkLabelSponsor.TabIndex = 7; + linkLabelSponsor.TabStop = true; + linkLabelSponsor.Text = "赞助开发"; + linkLabelSponsor.LinkClicked += linkLabelSponsor_LinkClicked; + // + // VersionInformationForm + // + AutoScaleDimensions = new SizeF(7F, 12F); + AutoScaleMode = AutoScaleMode.Font; +<<<<<<< HEAD + AutoSize = true; +======= +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + ClientSize = new Size(518, 246); + Controls.Add(linkLabelSponsor); + Controls.Add(pictureBoxCopyright); + Controls.Add(labelCopyright); + Controls.Add(labelEdition); + Controls.Add(labelAuthor); + Controls.Add(linkLabelURLHome); + Controls.Add(pictureBoxIcon); + Controls.Add(pictureBoxLogo); + Font = new Font("宋体", 9F, FontStyle.Bold | FontStyle.Italic, GraphicsUnit.Point); + FormBorderStyle = FormBorderStyle.FixedSingle; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "VersionInformationForm"; + StartPosition = FormStartPosition.CenterScreen; + Text = "关于我们"; + ((System.ComponentModel.ISupportInitialize)pictureBoxCopyright).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxIcon).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLogo).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private PictureBox pictureBoxLogo; + private PictureBox pictureBoxIcon; + private LinkLabel linkLabelURLHome; + private Label labelAuthor; + private System.ComponentModel.BackgroundWorker backgroundWorker1; + private System.ComponentModel.BackgroundWorker backgroundWorker2; + private Label labelEdition; + private System.ComponentModel.BackgroundWorker backgroundWorker3; + private Label labelCopyright; + private System.ComponentModel.BackgroundWorker backgroundWorker4; + private PictureBox pictureBoxCopyright; + private LinkLabel linkLabelSponsor; + } +} \ No newline at end of file diff --git a/AudioVisualizer/VersionInformationForm.cs b/AudioVisualizer/VersionInformationForm.cs new file mode 100644 index 0000000..2aad5d3 --- /dev/null +++ b/AudioVisualizer/VersionInformationForm.cs @@ -0,0 +1,19 @@ +namespace AudioWallpaper { + public partial class VersionInformationForm : Form { + public VersionInformationForm() { + InitializeComponent(); + } + + private void pictureBoxLogo_Click(object sender, EventArgs e) { + System.Diagnostics.Process.Start("explorer.exe", "https://www.itziyuanwang.top/"); + } + + private void linkLabelURLHome_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { + System.Diagnostics.Process.Start("explorer.exe", "https://www.itziyuanwang.top/"); + } + + private void linkLabelSponsor_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { + System.Diagnostics.Process.Start("explorer.exe", "https://www.itziyuanwang.top/supportOur.php"); + } + } +} diff --git a/AudioVisualizer/VersionInformationForm.cs.orig b/AudioVisualizer/VersionInformationForm.cs.orig new file mode 100644 index 0000000..53fdfd6 --- /dev/null +++ b/AudioVisualizer/VersionInformationForm.cs.orig @@ -0,0 +1,26 @@ +<<<<<<< HEAD +namespace AudioWallpaper { +======= +using System; +using System.Windows.Forms; + +namespace AudioVisualizer { +>>>>>>> 5cb18e9cc33bf9825472ca3181da76afddd9de36 + public partial class VersionInformationForm : Form { + public VersionInformationForm() { + InitializeComponent(); + } + + private void pictureBoxLogo_Click(object sender, EventArgs e) { + System.Diagnostics.Process.Start("explorer.exe", "https://www.itziyuanwang.top/"); + } + + private void linkLabelURLHome_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { + System.Diagnostics.Process.Start("explorer.exe", "https://www.itziyuanwang.top/"); + } + + private void linkLabelSponsor_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { + System.Diagnostics.Process.Start("explorer.exe", "https://www.itziyuanwang.top/supportOur.php"); + } + } +} diff --git a/AudioVisualizer/VersionInformationForm.resx b/AudioVisualizer/VersionInformationForm.resx new file mode 100644 index 0000000..501fd53 --- /dev/null +++ b/AudioVisualizer/VersionInformationForm.resx @@ -0,0 +1,1853 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 191, 17 + + + 365, 17 + + + 539, 17 + + + + + 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 + SFlzAAAOxAAADsQBlSsOGwAAE3VJREFUeJzt3XuUJFV9B/Dvr+dR1cuywspDke3qXRAwAYnyxihgICcY + TESRqFE4RwWTg8h2zbKAIu6JSJZ1poZHkJz1eAI+IyBgApiokOhRBBVBMfFgkJ1qYBUFVhZ2u2pmun75 + g1nZR1VPP253V8/9fv7sW/f270xPfbtefS9ARERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERE85F+F0C9ccCq5/epJyNfVOCU7K30U2FQvLR3VVG/ + MQAWuP0runRI4o0AnKY7CT4TTrjnda8qygsGwALmVaIAgkq7/cPA5f/HAscPeIHy/Og5AEs6HYchsLDx + w12AjjhXR55eHE+bGo8hsHDxg12APD9SowOK/CCccI43OiblwnC/CyCzSmPxGdB59n+Vt4eTzm3b9blB + VM/O3l6PM1Yg5QqPABaYRt/+ClxQDdxr2unL04CFiR/qApO1ExdET9gwUfxuu/0BfDYM3HM7Ko5yh6cA + C0hpLLoe6bvvxmZ2fgCoq7x2SPRnKU3nAGAALDAMgAVEFKenvV6oz76+2TGemHQe9vzIXFGUawyAhWXf + tBc3XL34qRbH+T2APTovh/KOAUBpngEDwAoMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhi + DAAiizEAiCzGACCyGAOAyGIMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhiDAAiizEAumzZ + 6i37DdWHj04Uh0Pxi/pI/d4n1y16ot915cX+FS0OIXqPihwlioNRwI8U8sPqhHNLv2uzAQOgCzy/dhIg + dwFwMQso9MU12AQYni3gpYU39CthUHxP/yrtn9JYdIEorgJiAPKHvw8UJwr0D38jAdZNBe5FfSx1QePa + gAYdeP7ze8+MjPwawFCLXYMwcMc6ff+sdf1aXdjT86NHARzQ6TiZ41fi+yB6TCt9FPq+alD8oon3p5fw + CMCQciX+6xnR29vs7pcq8f3VSecmo0XlzRoteJvjOjIWMGxEIF/w/GhNGLgHdqEyazEADChXamer6A2d + jCGiXy35sVYD52ZDZeVMIi/u/B05wPOjTWHg7mmkJGIAdMpbueWVKnKDibEEetOyVfFhj487PzcxXp54 + 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 + + + \ No newline at end of file diff --git a/AudioVisualizer/VersionInformationForm.resx.orig b/AudioVisualizer/VersionInformationForm.resx.orig new file mode 100644 index 0000000..b315b4f --- /dev/null +++ b/AudioVisualizer/VersionInformationForm.resx.orig @@ -0,0 +1,1861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 191, 17 + + + 365, 17 + + + 539, 17 + + + + + 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 +<<<<<<< HEAD + vAAADrwBlbxySQAA/7JJREFUeF7snQd4FNfZhVeNDkKdKlRQASFEB9F7M4jeewdRBKKIZpoxHdNM7+De +======= + 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 + QEBAQBoSPwwICAgICAgICAgICNjZkfhhQEBAQEBAQEBAQEDAzo7EDwMCAgICAgICAgICAnZ2JH4YEBAQ + EBAQEBAQEBCwsyPxw4CAgICAgICAgICAgJ0diR8GBAQEBAQEBAQEBATs7Ej8MCAgICAgICAgICAgYGdH + 4ocBAQEBAQEBAQEBAQE7OxI/DAgICAgICAgICAgI2NmR+GFAQEBAQEBAQEBAQMDOjsQPAwICAgICAgIC + AgICdnYkfhgQEBAQEBAQEBAQELCzI/HDgICAgICAgICAgICAnR2JHwYEBAQEBAQEBAQEBOzsSPwwICAg + ICAgICAgICBg58aX1f4fDZnC7kulPPkAAAAASUVORK5CYII= + + + + + AAABAAEAAAAAAAEAIADDEwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAlw + SFlzAAAOxAAADsQBlSsOGwAAE3VJREFUeJzt3XuUJFV9B/Dvr+dR1cuywspDke3qXRAwAYnyxihgICcY + TESRqFE4RwWTg8h2zbKAIu6JSJZ1poZHkJz1eAI+IyBgApiokOhRBBVBMfFgkJ1qYBUFVhZ2u2pmun75 + g1nZR1VPP253V8/9fv7sW/f270xPfbtefS9ARERERERERERERERERERERERERERERERERERERERERERE + RERERERERERERERERERERERERERERERERERERERE85F+F0C9ccCq5/epJyNfVOCU7K30U2FQvLR3VVG/ + MQAWuP0runRI4o0AnKY7CT4TTrjnda8qygsGwALmVaIAgkq7/cPA5f/HAscPeIHy/Og5AEs6HYchsLDx + w12AjjhXR55eHE+bGo8hsHDxg12APD9SowOK/CCccI43OiblwnC/CyCzSmPxGdB59n+Vt4eTzm3b9blB + VM/O3l6PM1Yg5QqPABaYRt/+ClxQDdxr2unL04CFiR/qApO1ExdET9gwUfxuu/0BfDYM3HM7Ko5yh6cA + C0hpLLoe6bvvxmZ2fgCoq7x2SPRnKU3nAGAALDAMgAVEFKenvV6oz76+2TGemHQe9vzIXFGUawyAhWXf + tBc3XL34qRbH+T2APTovh/KOAUBpngEDwAoMACKLMQCILMYAILIYA4DIYgwAIosxAIgsxgAgshgDgMhi + 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 + + + \ No newline at end of file diff --git a/AudioVisualizer/VideoWallpaperWindow.Designer.cs b/AudioVisualizer/VideoWallpaperWindow.Designer.cs new file mode 100644 index 0000000..fdb958e --- /dev/null +++ b/AudioVisualizer/VideoWallpaperWindow.Designer.cs @@ -0,0 +1,61 @@ + +namespace AudioWallpaper { + partial class VideoWallpaperWindow { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + videoView1 = new LibVLCSharp.WinForms.VideoView(); + ((System.ComponentModel.ISupportInitialize)videoView1).BeginInit(); + SuspendLayout(); + // + // videoView1 + // + videoView1.BackColor = Color.Black; + videoView1.Dock = DockStyle.Fill; + videoView1.Location = new Point(0, 0); + videoView1.MediaPlayer = null; + videoView1.Name = "videoView1"; + videoView1.Size = new Size(800, 450); + videoView1.TabIndex = 0; + videoView1.Text = "videoView1"; + // + // VideoWallpaperWindow + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(videoView1); + FormBorderStyle = FormBorderStyle.None; + Name = "VideoWallpaperWindow"; + Text = "VideoWallpaperWindow"; + FormClosing += VideoWallpaperWindow_FormClosing; + ((System.ComponentModel.ISupportInitialize)videoView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + + private LibVLCSharp.WinForms.VideoView videoView1; + } +} \ No newline at end of file diff --git a/AudioVisualizer/VideoWallpaperWindow.cs b/AudioVisualizer/VideoWallpaperWindow.cs new file mode 100644 index 0000000..16cb34d --- /dev/null +++ b/AudioVisualizer/VideoWallpaperWindow.cs @@ -0,0 +1,157 @@ + +using AudioWallpaper.Entity; +using LibVLCSharp.Shared; + +namespace AudioWallpaper { + public partial class VideoWallpaperWindow : Form { + private IntPtr programIntPtr = IntPtr.Zero; + + private LibVLC? libVLC = new LibVLC(); + private MediaPlayer? mediaPlayer; + private Media? media; + private VideoWallpaperConfigObject videoWallpaperConfig; + private AppBarManager appBarManager; + public delegate void FullScreenDetected(bool status); + public event FullScreenDetected FullScreenDetectedEvent; + + public VideoWallpaperWindow(VideoWallpaperConfigObject videoWallpaperConfigObject) { + videoWallpaperConfig = videoWallpaperConfigObject; + appBarManager = new AppBarManager(Handle); + InitializeComponent(); + Init(); + Win32.SetParent(Handle, programIntPtr); + PlayerWallPaper(); + } + protected override void WndProc(ref Message m) { + if (appBarManager != null && m.Msg == appBarManager.uCallbackMessage) { + switch ((int)m.WParam) { + case AppBarManager.ABN_FULLSCREENAPP: + bool isFullScreen = m.LParam != IntPtr.Zero; + if (isFullScreen) { + SetFrom.FullScreenWindowCount++; + } else { + SetFrom.FullScreenWindowCount--; + } + + ChangeVideoPlayerStatus(SetFrom.FullScreenWindowCount <= 0); + + //通知其它窗体停止渲染 + FullScreenDetectedEvent(SetFrom.FullScreenWindowCount <= 0); + break; + + } + } + base.WndProc(ref m); + } + public void DisposeAppBarManager() { + appBarManager.Dispose(); + } + public void PlayerWallPaper() { + if (mediaPlayer == null && libVLC != null) { + mediaPlayer = new MediaPlayer(libVLC); + videoView1.MediaPlayer = mediaPlayer; + mediaPlayer.EndReached += MediaPlayer_EndReached; + } + + try { + mediaPlayer.SetRate((float)videoWallpaperConfig.Rate / 10f); + mediaPlayer.Volume = videoWallpaperConfig.Volume; + media = new Media(libVLC, new Uri(videoWallpaperConfig.Url)); + + mediaPlayer.Play(media); + } catch (Exception e) { + Console.WriteLine(e.StackTrace); + } + GC.Collect(); + } + + /// + /// 监听视频播放结束事件,重复播放 + /// + /// + /// + private void MediaPlayer_EndReached(object? sender, EventArgs e) { + if (media != null && mediaPlayer != null) { + ThreadPool.QueueUserWorkItem((p) => { mediaPlayer.Play(media); GC.Collect(); }); + } + } + public void ReShow(int x, int y, int width, int height) { + SetBounds(x, y, width, height); + } + public void ReShow(VideoWallpaperConfigObject videoWallpaperConfigObject) { + if (videoWallpaperConfig.Url != null && videoWallpaperConfig.Url.Equals(videoWallpaperConfigObject.Url) && media != null && mediaPlayer != null) { + + mediaPlayer.SetRate((float)videoWallpaperConfigObject.Rate / 10f); + mediaPlayer.Volume = videoWallpaperConfigObject.Volume; + videoWallpaperConfig = videoWallpaperConfigObject; + return; + } + videoWallpaperConfig = videoWallpaperConfigObject; + PlayerWallPaper(); + + } + + /// + /// 窗体被关闭时,关闭视频播放相关 + /// + /// + /// + private void VideoWallpaperWindow_FormClosing(object sender, FormClosingEventArgs e) { + VideoDispose(); + } + public void VideoDispose() { + if (mediaPlayer != null) { + mediaPlayer.EndReached -= MediaPlayer_EndReached; + mediaPlayer.Stop(); + mediaPlayer.Dispose(); + mediaPlayer = null; + } + if (media != null) { + media.Dispose(); + media = null; + } + if (libVLC != null) { + libVLC.Dispose(); + libVLC = null; + } + } + public void ChangeVideoPlayerStatus(bool status) { + if (!videoWallpaperConfig.AutoStopWallPaper) { + if (mediaPlayer != null) { + mediaPlayer.SetPause(false); + + } + return; + } + if (mediaPlayer != null) { + mediaPlayer.SetPause(!status); + } + } + public void Init() { + // 通过类名查找一个窗口,返回窗口句柄。 + programIntPtr = Win32.FindWindow("Progman", null); + + // 窗口句柄有效 + if (programIntPtr != IntPtr.Zero) { + + IntPtr result = IntPtr.Zero; + + // 向 Program Manager 窗口发送 0x52c 的一个消息,超时设置为0x3e8(1秒)。 + Win32.SendMessageTimeout(programIntPtr, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result); + + // 遍历顶级窗口 + Win32.EnumWindows((hwnd, lParam) => { + // 找到包含 SHELLDLL_DefView 这个窗口句柄的 WorkerW + if (Win32.FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero) { + // 找到当前 WorkerW 窗口的,后一个 WorkerW 窗口。 + IntPtr tempHwnd = Win32.FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null); + Win32.ShowWindow(tempHwnd, 0); + } + return true; + }, IntPtr.Zero); + } + } + + + } +} diff --git a/AudioVisualizer/VideoWallpaperWindow.resx b/AudioVisualizer/VideoWallpaperWindow.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/AudioVisualizer/VideoWallpaperWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AudioVisualizer/Win32.cs b/AudioVisualizer/Win32.cs new file mode 100644 index 0000000..83c70de --- /dev/null +++ b/AudioVisualizer/Win32.cs @@ -0,0 +1,45 @@ +using System.Runtime.InteropServices; + +namespace AudioWallpaper { + public static class Win32 { + [DllImport("user32.dll")] + public static extern IntPtr FindWindow(string className, string winName); + + [DllImport("user32.dll")] + public static extern IntPtr SendMessageTimeout(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam, uint fuFlage, uint timeout, IntPtr result); + + [DllImport("user32.dll")] + public static extern bool EnumWindows(EnumWindowsProc proc, IntPtr lParam); + public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam); + + [DllImport("user32.dll")] + public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string winName); + + [DllImport("user32.dll")] + public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow); + + [DllImport("user32.dll")] + public static extern IntPtr SetParent(IntPtr hwnd, IntPtr parentHwnd); + [DllImport("shell32.dll")] + public static extern uint SHAppBarMessage(uint dwMessage, ref APPBARDATA pData); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern uint RegisterWindowMessage(string lpString); + [StructLayout(LayoutKind.Sequential)] + public struct APPBARDATA { + public int cbSize; + public IntPtr hWnd; + public uint uCallbackMessage; + public uint uEdge; + public RECT rc; + public int lParam; + } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT { + public int left; + public int top; + public int right; + public int bottom; + } + } +} diff --git a/AudioVisualizer/app.manifest b/AudioVisualizer/app.manifest new file mode 100644 index 0000000..84ca03a --- /dev/null +++ b/AudioVisualizer/app.manifest @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + + diff --git a/AudioVisualizer/bin/Debug/AudioVisualizer.1.0.0.nupkg b/AudioVisualizer/bin/Debug/AudioVisualizer.1.0.0.nupkg new file mode 100644 index 0000000..db66a7e Binary files /dev/null and b/AudioVisualizer/bin/Debug/AudioVisualizer.1.0.0.nupkg differ diff --git a/AudioVisualizer/bin/Debug/AudioWallpaperManager.1.2.1.nupkg b/AudioVisualizer/bin/Debug/AudioWallpaperManager.1.2.1.nupkg new file mode 100644 index 0000000..8ee1ffe Binary files /dev/null and b/AudioVisualizer/bin/Debug/AudioWallpaperManager.1.2.1.nupkg differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.deps.json b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.deps.json new file mode 100644 index 0000000..eb59eaf --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.deps.json @@ -0,0 +1,323 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "AudioWallpaper/1.2.1": { + "dependencies": { + "LibAudioVisualizer": "1.0.0", + "LibVLCSharp.WinForms": "3.8.2", + "NAudio": "2.2.1", + "System.Management": "8.0.0", + "VideoLAN.LibVLC.Windows": "3.0.20" + }, + "runtime": { + "AudioWallpaper.dll": {} + } + }, + "FftSharp/1.1.6": { + "runtime": { + "lib/net5.0/FftSharp.dll": { + "assemblyVersion": "1.1.6.0", + "fileVersion": "1.1.6.0" + } + } + }, + "LibVLCSharp/3.8.2": { + "runtime": { + "lib/net6.0/LibVLCSharp.dll": { + "assemblyVersion": "3.8.2.0", + "fileVersion": "3.8.2.0" + } + } + }, + "LibVLCSharp.WinForms/3.8.2": { + "dependencies": { + "LibVLCSharp": "3.8.2" + }, + "runtime": { + "lib/net6.0-windows7.0/LibVLCSharp.WinForms.dll": { + "assemblyVersion": "3.8.2.0", + "fileVersion": "3.8.2.0" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": {}, + "Microsoft.Win32.Registry/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "NAudio/2.2.1": { + "dependencies": { + "NAudio.Asio": "2.2.1", + "NAudio.Core": "2.2.1", + "NAudio.Midi": "2.2.1", + "NAudio.Wasapi": "2.2.1", + "NAudio.WinForms": "2.2.1", + "NAudio.WinMM": "2.2.1" + }, + "runtime": { + "lib/net6.0-windows7.0/NAudio.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Asio/2.2.1": { + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Asio.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Core/2.2.1": { + "runtime": { + "lib/netstandard2.0/NAudio.Core.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Midi/2.2.1": { + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Midi.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Wasapi/2.2.1": { + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Wasapi.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.WinForms/2.2.1": { + "dependencies": { + "NAudio.WinMM": "2.2.1" + }, + "runtime": { + "lib/netcoreapp3.1/NAudio.WinForms.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.WinMM/2.2.1": { + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.WinMM.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "System.CodeDom/8.0.0": { + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Management/8.0.0": { + "dependencies": { + "System.CodeDom": "8.0.0" + }, + "runtime": { + "lib/net6.0/System.Management.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Management.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Security.AccessControl/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "System.Security.Principal.Windows/4.7.0": {}, + "VideoLAN.LibVLC.Windows/3.0.20": {}, + "LibAudioVisualizer/1.0.0": { + "dependencies": { + "FftSharp": "1.1.6", + "LibDynamics": "1.0.0" + }, + "runtime": { + "LibAudioVisualizer.dll": {} + } + }, + "LibDynamics/1.0.0": { + "runtime": { + "LibDynamics.dll": {} + } + } + } + }, + "libraries": { + "AudioWallpaper/1.2.1": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "FftSharp/1.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dGUkHaYB2huawqtMWOsqtqspYHVFIux70LDjI/2I08ZkYZ5nLS3NP9AbWxrI+tdw6oLPs8Q/dv8CJzpmoAvj/w==", + "path": "fftsharp/1.1.6", + "hashPath": "fftsharp.1.1.6.nupkg.sha512" + }, + "LibVLCSharp/3.8.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P61Pkc+2GgX9PGJmm0MTVYKh0zPbak25rkyb5MU8Vq7x/VgFV/0h3L2bP7H4Oz5sfmm03H8T010cqEKQVA4Jew==", + "path": "libvlcsharp/3.8.2", + "hashPath": "libvlcsharp.3.8.2.nupkg.sha512" + }, + "LibVLCSharp.WinForms/3.8.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3wL7lthadR9MvpmSBTjY7WIlnwWRrFS2YpnFaaSnOzT3NZJngujlfuvfrf+1ge7uUE3CL/6Il6P4eN9fNNa0SA==", + "path": "libvlcsharp.winforms/3.8.2", + "hashPath": "libvlcsharp.winforms.3.8.2.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "path": "microsoft.netcore.platforms/3.1.0", + "hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", + "path": "microsoft.win32.registry/4.7.0", + "hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512" + }, + "NAudio/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==", + "path": "naudio/2.2.1", + "hashPath": "naudio.2.2.1.nupkg.sha512" + }, + "NAudio.Asio/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==", + "path": "naudio.asio/2.2.1", + "hashPath": "naudio.asio.2.2.1.nupkg.sha512" + }, + "NAudio.Core/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==", + "path": "naudio.core/2.2.1", + "hashPath": "naudio.core.2.2.1.nupkg.sha512" + }, + "NAudio.Midi/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==", + "path": "naudio.midi/2.2.1", + "hashPath": "naudio.midi.2.2.1.nupkg.sha512" + }, + "NAudio.Wasapi/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==", + "path": "naudio.wasapi/2.2.1", + "hashPath": "naudio.wasapi.2.2.1.nupkg.sha512" + }, + "NAudio.WinForms/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DlDkewY1myY0A+3NrYRJD+MZhZV0yy1mNF6dckB27IQ9XCs/My5Ip8BZcoSHOsaPSe2GAjvoaDnk6N9w8xTv7w==", + "path": "naudio.winforms/2.2.1", + "hashPath": "naudio.winforms.2.2.1.nupkg.sha512" + }, + "NAudio.WinMM/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==", + "path": "naudio.winmm/2.2.1", + "hashPath": "naudio.winmm.2.2.1.nupkg.sha512" + }, + "System.CodeDom/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==", + "path": "system.codedom/8.0.0", + "hashPath": "system.codedom.8.0.0.nupkg.sha512" + }, + "System.Management/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", + "path": "system.management/8.0.0", + "hashPath": "system.management.8.0.0.nupkg.sha512" + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "path": "system.security.accesscontrol/4.7.0", + "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "path": "system.security.principal.windows/4.7.0", + "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512" + }, + "VideoLAN.LibVLC.Windows/3.0.20": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ahujCn2kTPJSLEpwXu2BHIyv9Ke/iahd367hFwMMHSP9UkSOYC5QekOGFrSxKz22yZP67arcfCgNgDIcV31DpQ==", + "path": "videolan.libvlc.windows/3.0.20", + "hashPath": "videolan.libvlc.windows.3.0.20.nupkg.sha512" + }, + "LibAudioVisualizer/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "LibDynamics/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.dll b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.dll new file mode 100644 index 0000000..564f802 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.exe b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.exe new file mode 100644 index 0000000..de80cba Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.exe differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.pdb b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.pdb new file mode 100644 index 0000000..bb8c38c Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.pdb differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.runtimeconfig.json b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.runtimeconfig.json new file mode 100644 index 0000000..f9988b2 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaper.runtimeconfig.json @@ -0,0 +1,15 @@ +{ + "runtimeOptions": { + "tfm": "net6.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "6.0.0" + }, + { + "name": "Microsoft.WindowsDesktop.App", + "version": "6.0.0" + } + ] + } +} \ No newline at end of file diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.deps.json b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.deps.json new file mode 100644 index 0000000..0d6fd52 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.deps.json @@ -0,0 +1,336 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "AudioWallpaperManager/1.2.1": { + "dependencies": { + "AudioWallpaper": "1.2.1" + }, + "runtime": { + "AudioWallpaperManager.dll": {} + } + }, + "FftSharp/1.1.6": { + "runtime": { + "lib/net5.0/FftSharp.dll": { + "assemblyVersion": "1.1.6.0", + "fileVersion": "1.1.6.0" + } + } + }, + "LibVLCSharp/3.8.2": { + "runtime": { + "lib/net6.0/LibVLCSharp.dll": { + "assemblyVersion": "3.8.2.0", + "fileVersion": "3.8.2.0" + } + } + }, + "LibVLCSharp.WinForms/3.8.2": { + "dependencies": { + "LibVLCSharp": "3.8.2" + }, + "runtime": { + "lib/net6.0-windows7.0/LibVLCSharp.WinForms.dll": { + "assemblyVersion": "3.8.2.0", + "fileVersion": "3.8.2.0" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": {}, + "Microsoft.Win32.Registry/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "NAudio/2.2.1": { + "dependencies": { + "NAudio.Asio": "2.2.1", + "NAudio.Core": "2.2.1", + "NAudio.Midi": "2.2.1", + "NAudio.Wasapi": "2.2.1", + "NAudio.WinForms": "2.2.1", + "NAudio.WinMM": "2.2.1" + }, + "runtime": { + "lib/net6.0-windows7.0/NAudio.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Asio/2.2.1": { + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Asio.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Core/2.2.1": { + "runtime": { + "lib/netstandard2.0/NAudio.Core.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Midi/2.2.1": { + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Midi.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Wasapi/2.2.1": { + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Wasapi.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.WinForms/2.2.1": { + "dependencies": { + "NAudio.WinMM": "2.2.1" + }, + "runtime": { + "lib/netcoreapp3.1/NAudio.WinForms.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.WinMM/2.2.1": { + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.WinMM.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "System.CodeDom/8.0.0": { + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Management/8.0.0": { + "dependencies": { + "System.CodeDom": "8.0.0" + }, + "runtime": { + "lib/net6.0/System.Management.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Management.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Security.AccessControl/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "System.Security.Principal.Windows/4.7.0": {}, + "VideoLAN.LibVLC.Windows/3.0.20": {}, + "AudioWallpaper/1.2.1": { + "dependencies": { + "LibAudioVisualizer": "1.0.0", + "LibVLCSharp.WinForms": "3.8.2", + "NAudio": "2.2.1", + "System.Management": "8.0.0", + "VideoLAN.LibVLC.Windows": "3.0.20" + }, + "runtime": { + "AudioWallpaper.dll": {} + } + }, + "LibAudioVisualizer/1.0.0": { + "dependencies": { + "FftSharp": "1.1.6", + "LibDynamics": "1.0.0" + }, + "runtime": { + "LibAudioVisualizer.dll": {} + } + }, + "LibDynamics/1.0.0": { + "runtime": { + "LibDynamics.dll": {} + } + } + } + }, + "libraries": { + "AudioWallpaperManager/1.2.1": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "FftSharp/1.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dGUkHaYB2huawqtMWOsqtqspYHVFIux70LDjI/2I08ZkYZ5nLS3NP9AbWxrI+tdw6oLPs8Q/dv8CJzpmoAvj/w==", + "path": "fftsharp/1.1.6", + "hashPath": "fftsharp.1.1.6.nupkg.sha512" + }, + "LibVLCSharp/3.8.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P61Pkc+2GgX9PGJmm0MTVYKh0zPbak25rkyb5MU8Vq7x/VgFV/0h3L2bP7H4Oz5sfmm03H8T010cqEKQVA4Jew==", + "path": "libvlcsharp/3.8.2", + "hashPath": "libvlcsharp.3.8.2.nupkg.sha512" + }, + "LibVLCSharp.WinForms/3.8.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3wL7lthadR9MvpmSBTjY7WIlnwWRrFS2YpnFaaSnOzT3NZJngujlfuvfrf+1ge7uUE3CL/6Il6P4eN9fNNa0SA==", + "path": "libvlcsharp.winforms/3.8.2", + "hashPath": "libvlcsharp.winforms.3.8.2.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "path": "microsoft.netcore.platforms/3.1.0", + "hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", + "path": "microsoft.win32.registry/4.7.0", + "hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512" + }, + "NAudio/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==", + "path": "naudio/2.2.1", + "hashPath": "naudio.2.2.1.nupkg.sha512" + }, + "NAudio.Asio/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==", + "path": "naudio.asio/2.2.1", + "hashPath": "naudio.asio.2.2.1.nupkg.sha512" + }, + "NAudio.Core/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==", + "path": "naudio.core/2.2.1", + "hashPath": "naudio.core.2.2.1.nupkg.sha512" + }, + "NAudio.Midi/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==", + "path": "naudio.midi/2.2.1", + "hashPath": "naudio.midi.2.2.1.nupkg.sha512" + }, + "NAudio.Wasapi/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==", + "path": "naudio.wasapi/2.2.1", + "hashPath": "naudio.wasapi.2.2.1.nupkg.sha512" + }, + "NAudio.WinForms/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DlDkewY1myY0A+3NrYRJD+MZhZV0yy1mNF6dckB27IQ9XCs/My5Ip8BZcoSHOsaPSe2GAjvoaDnk6N9w8xTv7w==", + "path": "naudio.winforms/2.2.1", + "hashPath": "naudio.winforms.2.2.1.nupkg.sha512" + }, + "NAudio.WinMM/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==", + "path": "naudio.winmm/2.2.1", + "hashPath": "naudio.winmm.2.2.1.nupkg.sha512" + }, + "System.CodeDom/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==", + "path": "system.codedom/8.0.0", + "hashPath": "system.codedom.8.0.0.nupkg.sha512" + }, + "System.Management/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", + "path": "system.management/8.0.0", + "hashPath": "system.management.8.0.0.nupkg.sha512" + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "path": "system.security.accesscontrol/4.7.0", + "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "path": "system.security.principal.windows/4.7.0", + "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512" + }, + "VideoLAN.LibVLC.Windows/3.0.20": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ahujCn2kTPJSLEpwXu2BHIyv9Ke/iahd367hFwMMHSP9UkSOYC5QekOGFrSxKz22yZP67arcfCgNgDIcV31DpQ==", + "path": "videolan.libvlc.windows/3.0.20", + "hashPath": "videolan.libvlc.windows.3.0.20.nupkg.sha512" + }, + "AudioWallpaper/1.2.1": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "LibAudioVisualizer/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "LibDynamics/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.dll b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.dll new file mode 100644 index 0000000..82961bd Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.exe b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.exe new file mode 100644 index 0000000..5b10c43 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.exe differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.pdb b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.pdb new file mode 100644 index 0000000..ee8f54b Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.pdb differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.runtimeconfig.json b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.runtimeconfig.json new file mode 100644 index 0000000..f9988b2 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/AudioWallpaperManager.runtimeconfig.json @@ -0,0 +1,15 @@ +{ + "runtimeOptions": { + "tfm": "net6.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "6.0.0" + }, + { + "name": "Microsoft.WindowsDesktop.App", + "version": "6.0.0" + } + ] + } +} \ No newline at end of file diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/FftSharp.dll b/AudioVisualizer/bin/Debug/net6.0-windows/FftSharp.dll new file mode 100644 index 0000000..36b2c88 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/FftSharp.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/LibAudioVisualizer.dll b/AudioVisualizer/bin/Debug/net6.0-windows/LibAudioVisualizer.dll new file mode 100644 index 0000000..7005d9f Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/LibAudioVisualizer.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/LibAudioVisualizer.pdb b/AudioVisualizer/bin/Debug/net6.0-windows/LibAudioVisualizer.pdb new file mode 100644 index 0000000..5c400d4 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/LibAudioVisualizer.pdb differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/LibDynamics.dll b/AudioVisualizer/bin/Debug/net6.0-windows/LibDynamics.dll new file mode 100644 index 0000000..d16459c Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/LibDynamics.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/LibDynamics.pdb b/AudioVisualizer/bin/Debug/net6.0-windows/LibDynamics.pdb new file mode 100644 index 0000000..38626c5 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/LibDynamics.pdb differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/LibVLCSharp.WinForms.dll b/AudioVisualizer/bin/Debug/net6.0-windows/LibVLCSharp.WinForms.dll new file mode 100644 index 0000000..1f1014a Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/LibVLCSharp.WinForms.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/LibVLCSharp.dll b/AudioVisualizer/bin/Debug/net6.0-windows/LibVLCSharp.dll new file mode 100644 index 0000000..5673c7a Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/LibVLCSharp.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Asio.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Asio.dll new file mode 100644 index 0000000..761ec14 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Asio.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Core.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Core.dll new file mode 100644 index 0000000..254cd2c Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Core.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Midi.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Midi.dll new file mode 100644 index 0000000..c5dcc05 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Midi.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Wasapi.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Wasapi.dll new file mode 100644 index 0000000..a28f8ca Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.Wasapi.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.WinForms.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.WinForms.dll new file mode 100644 index 0000000..0f71af9 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.WinForms.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.WinMM.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.WinMM.dll new file mode 100644 index 0000000..62668f7 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.WinMM.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.dll b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.dll new file mode 100644 index 0000000..cd615ef Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/NAudio.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/System.CodeDom.dll b/AudioVisualizer/bin/Debug/net6.0-windows/System.CodeDom.dll new file mode 100644 index 0000000..f47bd8c Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/System.CodeDom.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/System.Management.dll b/AudioVisualizer/bin/Debug/net6.0-windows/System.Management.dll new file mode 100644 index 0000000..e787d8c Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/System.Management.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/config.ini b/AudioVisualizer/bin/Debug/net6.0-windows/config.ini new file mode 100644 index 0000000..4168998 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/config.ini @@ -0,0 +1,66 @@ +[\\.\DISPLAY1_DEFAULTCONFIGURATION] +BACKIMGORNOT=TRUE +NUMBEROFCOLORS=256 +SMOOTHSTRIPE=TRUE +DEFAULTOFFSET=0.4 +ROTUNDITY=TRUE +ISSHOW=TRUE +STRIPESPACING=15 +STRIPE=TRUE +BACKGROUNDIMAGEPATH=C:\USERS\ADMINISTRATOR\DOWNLOADS\2023092515484127868.JPG +USEDEFAULTCOLORORNOT=TRUE +DEFAULTRADICAL=2 +APPLYWINDOWFUNC=BLACKMAN +DEFAULTSTOPCOLOR=SILVER +BACKGROUNDCOLOR=BLACK +FRAME=TRUE +AUTOSTOPWALLPAPER=FALSE +MONOCHROMEORNOT=FALSE +SETTINGFORSCREENNAME=\\.\DISPLAY1 +WAVYLINE=FALSE +ISUSINGUNIFIEDCONFIGURATION=FALSE +SMOOTHROTUNDITY=TRUE +DEFAULTCOLOR=BLACK +ROTUNDITYSPACING=3 +DEFAULTFOURIERVARIATION=512 + +[\\.\DISPLAY1_VIDEOWALLPAPERCONFIG] +VIDEORATE=10 +ISSHOW=FALSE +VIDEOURL=C:\USERS\ADMINISTRATOR\VIDEOS\2023-09-25 14-37-02.MP4 +AUTOSTOPWALLPAPER=FALSE +VIDEOVOLUME=100 + +[\\.\DISPLAY5_DEFAULTCONFIGURATION] +ISSHOW=TRUE +DEFAULTCOLOR=BLUE +MONOCHROMEORNOT=FALSE +STRIPESPACING=3 +WAVYLINE=TRUE +APPLYWINDOWFUNC=BARTLETT +BACKGROUNDCOLOR=BLACK +AUTOSTOPWALLPAPER=FALSE +BACKGROUNDIMAGEPATH +BACKIMGORNOT=FALSE +DEFAULTRADICAL=2 +STRIPE=TRUE +DEFAULTOFFSET=0.4 +DEFAULTFOURIERVARIATION=512 +ISUSINGUNIFIEDCONFIGURATION=FALSE +FRAME=TRUE +SMOOTHSTRIPE=TRUE +USEDEFAULTCOLORORNOT=TRUE +ROTUNDITYSPACING=3 +NUMBEROFCOLORS=256 +SMOOTHROTUNDITY=TRUE +DEFAULTSTOPCOLOR=RED +ROTUNDITY=TRUE +SETTINGFORSCREENNAME=\\.\DISPLAY5 + +[\\.\DISPLAY5_VIDEOWALLPAPERCONFIG] +ISSHOW=False +AUTOSTOPWALLPAPER=False +VIDEOURL=C:\USERS\ADMINISTRATOR\VIDEOS\《打黑》4K.MKV +VIDEORATE=10 +VIDEOVOLUME=100 + diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa new file mode 100644 index 0000000..63aee4d Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlc.dll b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlc.dll new file mode 100644 index 0000000..8f77033 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlc.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlc.lib b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlc.lib new file mode 100644 index 0000000..72b41d7 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlc.lib differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlccore.dll b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlccore.dll new file mode 100644 index 0000000..1f7f1c3 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlccore.dll differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlccore.lib b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlccore.lib new file mode 100644 index 0000000..14b7aaa Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/libvlccore.lib differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/extensions/VLSub.luac b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/extensions/VLSub.luac new file mode 100644 index 0000000..fdd8b4e Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/extensions/VLSub.luac differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/main.css b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/main.css new file mode 100644 index 0000000..aebe6ce --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/main.css @@ -0,0 +1,260 @@ +root { + display: block; +} +body{ +} +#mainContainer{ + text-align: center; + width: 800px; +} +#controlContainer{ + width: 800px; +} +#libraryContainer{ + width: 800px; + margin-top: 2px; +} +#libraryTree{ + height: 300px; + overflow: auto; + white-space: nowrap; + text-align: left; +} +#viewContainer{ + width: 800px; +} +#mediaViewer{ + min-height: 500px; + background-color:#222; +} +#player{ + top:0px; + height: 500px; + width: 500px; + background-color:#222; +} +#seekSlider{ + width: 98%; + margin-left:5px; +} +#volumeSlider{ + width: 100px; + display: inline-block; +} +#currentVolume{ + display: inline-block; +} +#mediaTitle{ + position: absolute; + top: 0px; + left: 10px; + width: 600px; + text-align: center; + padding: 5px; + overflow: auto; +} +#currentTime{ + margin-top:-40px; + float: left; + text-align: left; +} + +#totalTime{ + margin-top:-40px; + float: right; + text-align: right; +} + +#controlTable{ + position:relative; + height: 150px; +} +#controlButtons{ + position: absolute; + top: 80px; + left: 10px; + padding: 0; + margin: 0; + text-align: left; +} + +.buttonszone{ + position:absolute; + width: 20px; + margin-left:-20px; + vertical-align:top; + padding:0px; + font-size:0px; + line-height:0px; +} + +#buttonszone1 { + top: 200px; +} + +#buttonszone2 { + top: 20px; +} + +.buttonszone li{ + float:left; + clear:left; + font-size:0px; +} + +.buttonszone li span{ + float:left +} + +.buttonszone_active { + margin-top: 0px; + width: 120px; + margin-left:-122px; + font-size:10px; + line-height:16px; +} + +.buttonszone_active li { + width:120px; +} + + +#volumesliderzone{ + position: absolute; + top: 105px; + left: 410px; + width: 210px; +} + +#volumeSlider{ + width: 208px; +} +#libraryTree ul li a { + border:none; +} +#artszone{ + position: absolute; + top: 0px; + right: 10px; + width: 150px; + height: 150px; + vertical-align: top; +} + +#seekContainer{ + position:absolute; + left: 5px; + top: 55px; + width: 79%; + vertical-align: bottom; +} + +.button48{ + width: 48px; + height: 48px; + margin: 5px 0px 5px 2px; + background: none; + border: none; + display: inline-block; + list-style: none; + float:left; + cursor: pointer; + background-image: url("../images/buttons.png"); + background-repeat: no-repeat; +} +.button48:hover{ + filter: alpha(opacity:0.5); + -ms-filter: "alpha(opacity=50)"; + -khtml-opacity: 0.50; + -moz-opacity: 0.5; + filter: alpha(opacity=50); + opacity: 0.5; +} + +.button{ + cursor: pointer; + display: inline-block; +} +#buttonOpen{ + background-position: 0px 0px; +} +#buttonStop{ + background-position: -576px 0px; +} +.playing { + background-position: -336px 0px; +} +.paused { + background-position: -384px 0px; +} +#buttonPrev{ + background-position: -144px 0px; +} +#buttonNext{ + background-position: -288px 0px; +} +#buttonFull{ + background-position: -192px 0px; +} +#buttonSout{ + background-position: -624px 0px; +} +#buttonEQ{ + background-position: -48px 0px; +} +#window_browse ol{ + list-style-type: none; +} +#window_browse ol li{ + list-style-type: none; + float: left; + padding: 5px; +} +.system_icon{ + width:80px; + text-align:center; + vertical-align:top; + display: inline-block; + cursor: pointer; + padding: 2px; + border: 1px solid #823D0A; + margin: 2px; + height: 92px; + background-color: #E1E1E1; + overflow: hidden; +} +#window_create_stream table tr td{ + font-size: 11px; +} + +#window_equalizer div div{ + text-align: center; + font-size: 11px; + padding: 0px; +} + +#window_equalizer { + height:80px !important ; +} + +.eqBand{ + margin-bottom: 10px; + margin-top: 10px; + height: 400px; + font-size: 1.5em; +} +.footer{ + margin-top: 30px; + text-align: center; + font-size: 11px; +} + +div.centered{ + margin-left: auto; + margin-right: auto; +} + +.hidden{ + visibility: hidden; + display: none; +} diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/mobile.css b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/mobile.css new file mode 100644 index 0000000..6b42c1e --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/mobile.css @@ -0,0 +1,188 @@ +root { + display: block; +} +#content{ + +} +body{ + font: 11pt Helvetica, Arial, sans-serif; + background-color:#EEE; + margin: 0px; +} + +#libraryTree{ + height: 300px; + overflow:scroll; + white-space: nowrap; + text-align: left; +} + +#mediaViewer{ + min-height: 500px; +} +#meta { + position:relative; + width:100%; +} +#seekSlider{ + width: 100%; +} + +#volumeSlider{ + width: 100%; + display: inline-block; +} +#currentVolume{ + display: inline-block; +} +#mediaTitle{ + text-align:center; + width:100%; + margin-top:5px; +} +#currentTime{ + float: left; + text-align: left; +} +#totalTime{ + float: right; + text-align: right; +} +#play_controls, #controls{ + margin-top:30px; + width:95%; + margin-left:auto; + margin-right:auto; +} + +#controlTable{ + position:relative; + height: 150px; +} + +#buttonszone li{ + float: left; +} + +#art{ + top:0px; + width:150px; + height:150px; + margin:0 auto; + box-sizing:border-box; + -webkit-box-sizing:border-box; +} + +.ui-slider-range{ + background-color:#FFB200; + background:#FFB200 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; +} + + +#buttons{ + --button-scale: 1.2; + margin:0 auto; + position: relative; + width: calc(288px * var(--button-scale)); +} +.button48{ + width: calc(48px * var(--button-scale)); + height: calc(48px * var(--button-scale)); + margin: 5px 0px 5px 0px; + background: none; + border: none; + display: inline-block; + cursor: pointer; + background-image: url("../images/buttons.png"); + background-size: calc(672px * var(--button-scale)); + background-repeat: no-repeat; +} + +.button{ + cursor: pointer; + display: inline-block; +} +#buttonOpen{ + background-position: 0px 0px; +} +#buttonStop{ + background-position: calc(-576px * var(--button-scale)) 0px; +} +#buttonRewd{ + background-position: calc(-528px * var(--button-scale)) 0px; +} +#buttonFwrd{ + background-position: calc(-96px * var(--button-scale)) 0px; +} +.playing { + background-position: calc(-336px * var(--button-scale)) 0px; +} +.paused { + background-position: calc(-384px * var(--button-scale)) 0px; +} +#buttonPrev{ + background-position: calc(-144px * var(--button-scale)) 0px; +} +#buttonNext{ + background-position: calc(-288px * var(--button-scale)) 0px; +} +#buttonFull{ + background-position: calc(-192px * var(--button-scale)) 0px; +} +#buttonSout{ + background-position: calc(-624px * var(--button-scale)) 0px; +} +#buttonEQ{ + background-position: calc(-48px * var(--button-scale)) 0px; +} +#window_browse ol{ + list-style-type: none; +} +#window_browse ol li{ + list-style-type: none; + float: left; + padding: 5px; +} +.system_icon{ + width:80px; + text-align:center; + vertical-align:top; + display: inline-block; + cursor: pointer; + padding: 2px; + border: 1px solid #823D0A; + margin: 2px; + height: 92px; + background-color: #E1E1E1; + overflow: hidden; +} +#window_create_stream table tr td{ + font-size: 11px; +} + +#window_equalizer div div{ + text-align: center; + font-size: 11px; + padding: 0px; +} +.eqBand{ + margin-bottom: 10px; + margin-top: 10px; + height: 400px; + font-size: 1.5em; +} +.footer{ + margin-top: 30px; + text-align: center; + font-size: 11px; +} + +div.centered{ + margin-left: auto; + margin-right: auto; +} + +.hidden{ + visibility: hidden; + display: none; +} diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000..23e5db8 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000..a5f651e Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000..2eace21 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000..f8483d0 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 0000000..2e97279 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..e7d01fa Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000..d2783ca Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000..5a0a5d8 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 0000000..0d8cfed Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_222222_256x240.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..6cb03be Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_222222_256x240.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000..fdf7b1e Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000..dc2f36b Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000..0b7f9d7 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..547a2b9 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/jquery-ui-1.8.13.custom.css b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/jquery-ui-1.8.13.custom.css new file mode 100644 index 0000000..f3e2b50 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/css/ui-lightness/jquery-ui-1.8.13.custom.css @@ -0,0 +1,581 @@ +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } + +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +.ui-selecting { background: #FECA40; } +.ui-selected { background: #F39814; color: white; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; + /* http://bugs.jqueryui.com/ticket/7233 + - Resizable: resizable handles fail to work in IE if transparent and content overlaps + */ + background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=); +} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.13 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/custom.lua b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/custom.lua new file mode 100644 index 0000000..509d415 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/custom.lua @@ -0,0 +1,19 @@ +-- make xgettext fetch strings from html code +function gettext(text) print(vlc.gettext._(text)) end + +local _G = _G + +local dialogs = setmetatable({}, { +__index = function(self, name) + -- Cache the dialogs + return rawget(self, name) or + rawget(rawset(self, name, process(http_dir.."/dialogs/"..name)), name) +end}) + +_G.dialogs = function(...) + for i=1, select("#",...) do + dialogs[(select(i,...))]() + end +end + +_G.vlm = vlc.vlm() diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/batch_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/batch_window.html new file mode 100644 index 0000000..e402d1f --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/batch_window.html @@ -0,0 +1,32 @@ + +
"> + +
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/browse_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/browse_window.html new file mode 100644 index 0000000..c66ac49 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/browse_window.html @@ -0,0 +1,44 @@ + + +
"> +
+
    +
  1. +
+
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/create_stream.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/create_stream.html new file mode 100644 index 0000000..1eb077f --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/create_stream.html @@ -0,0 +1,394 @@ + +
"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + +
+ + + + + + + +
+ + + +   + +
+ + + +   +
+ + + + + + + + + + + + + +
+
+
+ +   
+ + + +
" opendialog="window_browse">
+
" >
+
+ +
+ + diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/equalizer_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/equalizer_window.html new file mode 100644 index 0000000..a81bb13 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/equalizer_window.html @@ -0,0 +1,54 @@ + +
"> +
+
0dB
+
+
+
+
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/error_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/error_window.html new file mode 100644 index 0000000..2237bab --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/error_window.html @@ -0,0 +1,19 @@ + +
"> +
+
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/mosaic_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/mosaic_window.html new file mode 100644 index 0000000..a93c0b6 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/mosaic_window.html @@ -0,0 +1,146 @@ + + +
"> + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + + + + +
+
+

+ + + + + + + + + + +

+
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/offset_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/offset_window.html new file mode 100644 index 0000000..05a0fb3 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/offset_window.html @@ -0,0 +1,79 @@ + +
"> +
+
">
+
1x
+
+
+
">
+
0s
+
+
+
">
+
0s
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/stream_config_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/stream_config_window.html new file mode 100644 index 0000000..12737aa --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/stream_config_window.html @@ -0,0 +1,40 @@ + +
"> + + + + + + + + + + + + + + + + + +
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/stream_window.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/stream_window.html new file mode 100644 index 0000000..86ff218 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/dialogs/stream_window.html @@ -0,0 +1,99 @@ + + +
"> +
" opendialog="window_create_stream">
+
" opendialog="window_create_mosaiac">
+
">
+
">
+
">
+
+ +
+ +
+
"> + + + + + + + + + + + + + + + + + +
+
diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/favicon.ico b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/favicon.ico new file mode 100644 index 0000000..a7d6288 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/favicon.ico differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Audio-48.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Audio-48.png new file mode 100644 index 0000000..a32e6aa Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Audio-48.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Back-48.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Back-48.png new file mode 100644 index 0000000..0363d84 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Back-48.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Folder-48.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Folder-48.png new file mode 100644 index 0000000..59fe638 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Folder-48.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Other-48.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Other-48.png new file mode 100644 index 0000000..83fae77 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Other-48.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Video-48.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Video-48.png new file mode 100644 index 0000000..8a2b82d Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/Video-48.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/buttons.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/buttons.png new file mode 100644 index 0000000..7dee3a5 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/buttons.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/speaker-32.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/speaker-32.png new file mode 100644 index 0000000..5a7fc13 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/speaker-32.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/vlc-48.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/vlc-48.png new file mode 100644 index 0000000..327b538 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/vlc-48.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/vlc16x16.png b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/vlc16x16.png new file mode 100644 index 0000000..aec7160 Binary files /dev/null and b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/images/vlc16x16.png differ diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/index.html b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/index.html new file mode 100644 index 0000000..ed1d839 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/index.html @@ -0,0 +1,313 @@ + + + + + <?vlc gettext("VLC media player - Web Interface") ?> + + + + + + + + + + + + + + + +
+
+
+
+
    +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
+
    +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
+
+
volume
+
50%
+
+
+ Album Art +
+
+
+
">
+
00:00:00
+
00:00:00
+
+
+
+
+
    +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
  • ">
  • +
+
+
+
+
+
+


+
+
+
+ +
+
+
"> +

+ +

+

+ +

+
+
"> +

+ Main Controls will operate the stream instead of the main interface.") ?> + Manage Streams") ?> + "> +

+

+ Media Viewer window will display the stream.") ?> + Main Controls.") ?> +

+

+ Library will be the subject of the stream.") ?> +

+

+ Open Stream button again.") ?> +

+

+ +

+
+ + + diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/common.js b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/common.js new file mode 100644 index 0000000..d766699 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/common.js @@ -0,0 +1,93 @@ +var intv = 0; +var ccmd = ""; +var video_types = [ + "asf", "avi", "bik", "bin", "divx", "drc", "dv", "f4v", "flv", "gxf", "iso", + "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov", + "mp2", "mp4", "mpeg", "mpeg1", + "mpeg2", "mpeg4", "mpg", "mts", "mtv", "mxf", "mxg", "nuv", + "ogg", "ogm", "ogv", "ogx", "ps", + "rec", "rm", "rmvb", "rpl", "thp", "ts", "txd", "vob", "wmv", "xesc" ]; +var audio_types = [ + "3ga", "a52", "aac", "ac3", "ape", "awb", "dts", "flac", "it", + "m4a", "m4p", "mka", "mlp", "mod", "mp1", "mp2", "mp3", + "oga", "ogg", "oma", "s3m", "spx", "thd", "tta", + "wav", "wma", "wv", "xm" +]; +var playlist_types = [ + "asx", "b4s", "cue", "ifo", "m3u", "m3u8", "pls", "ram", "rar", + "sdp", "vlc", "xspf", "zip", "conf" +]; + +var stream_server = window.location.hostname; + +function format_time(s) { + var hours = Math.floor(s / 3600); + var minutes = Math.floor((s / 60) % 60); + var seconds = Math.floor(s % 60); + hours = hours < 10 ? "0" + hours : hours; + minutes = minutes < 10 ? "0" + minutes : minutes; + seconds = seconds < 10 ? "0" + seconds : seconds; + return hours + ":" + minutes + ":" + seconds; +} + +function toFloat(text) { + return parseFloat(text.replace(',', '.')); +} + +function setIntv() { + if (intv > 0) { + intv++; + setTimeout(setIntv, 500); + } else { + intv = 0; + } + if (intv > 5) { + var nt = 0; + switch (ccmd) { + case 'prev': + nt = Math.max(0, $('#seekSlider').slider('value') - 10); + break; + case 'next': + nt = Math.max(0, $('#seekSlider').slider('value') + 10); + break; + } + switch (current_que) { + case 'main': + sendCommand({ + 'command': 'seek', + 'val': Math.round((nt / 100) * $('#seekSlider').attr('totalLength')), + plreload: false + }); + break; + case 'stream': + sendVLMCmd('control Current seek ' + nt); + break; + } + } +} + +function isMobile() { + var a = navigator.userAgent || navigator.vendor || window.opera; + if (/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) { + return true; + } + return false; +} + +function createElementLi(name, type, dir, ext) { + var icon = "Other-48.png"; + if( type == "dir" && name == '..' ) + icon = "Back-48.png"; + else if( type == 'dir' ) + icon = "Folder-48.png"; + else if( $.inArray(ext, video_types) != -1 ) + icon = "Video-48.png"; + else if( $.inArray(ext, audio_types) != -1 ) + icon = "Audio-48.png"; + else if( $.inArray(ext, playlist_types) != -1 ) + // TODO: Playlist-48.png + icon = "Other-48.png"; + var open = type == "dir" ? "opendir='" + dir + "'" : (type == "file" ? "openfile='" + dir + "'" : "opendev='" + dir + "'"); + var str = "
  • " + name + "
    " + name + "
  • "; + return str; +} diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/controllers.js b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/controllers.js new file mode 100644 index 0000000..c7bbdb6 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/controllers.js @@ -0,0 +1,532 @@ +var currentArt = null; +var current_que = 'main'; +var current_playlist_id = -1; +var previous_playlist_id = -1; +var seek_sec = 0; + +function updateArt(url) { + $('#albumArt').fadeOut(500, function () { + $(this).addClass('hidden').removeAttr('height').removeAttr('width').attr('src', url); + }); +} + +function updateStatus() { + $.ajax({ + url: 'requests/status.xml', + success: function (data, status, jqXHR) { + if (current_que == 'main') { + $('.dynamic').empty(); + $('#mediaTitle').append($('[name="filename"]', data).text()); + $('#totalTime').append(format_time($('length', data).text())); + $('#currentTime').append(format_time($('time', data).text())); + if (!$('#seekSlider').data('clicked')) { + $('#seekSlider').slider({ + value: toFloat($('position', data).text()) * 100 + }); + } + $('#currentVolume').append(Math.round($('volume', data).text() / 2.56) + '%'); + /* Don't interfere with the user's action */ + if (!$('#volumeSlider').data('clicked')) { + $('#volumeSlider').slider({ + value: ($('volume', data).text() / 5.12) + }); + } + $('#rateSlider').slider({ + value: ($('rate', data).text()) + }); + $('#currentRate').append(Math.round($('rate', data).text() * 100) / 100 + 'x'); + $('#audioSlider').slider({ + value: ($('audiodelay', data).text()) + }); + $('#currentAudioDelay').append(Math.round($('audiodelay', data).text() * 100) / 100 + 's'); + $('#subtitleSlider').slider({ + value: ($('subtitledelay', data).text()) + }); + $('#currentSubtitleDelay').append(Math.round($('subtitledelay', data).text() * 100) / 100 + 's'); + $('#seekSlider').attr('totalLength', $('length', data).text()); + $('#buttonPlay').attr('state', $('state', data).text()).attr('mrl', $('[name="filename"]', data).text()); + if ($('state', data).text() == 'playing') { + $('#buttonPlay').removeClass('paused').addClass('playing'); + } else { + $('#buttonPlay').removeClass('playing').addClass('paused'); + } + if ($('random', data).text() == 'true') { + $('#buttonShuffle').removeClass('ui-state-default').addClass('ui-state-active'); + } else { + $('#buttonShuffle').addClass('ui-state-default').removeClass('ui-state-active'); + } + if ($('loop', data).text() == 'true') { + $('#buttonLoop').removeClass('ui-state-default').addClass('ui-state-active'); + } else { + $('#buttonLoop').addClass('ui-state-default').removeClass('ui-state-active'); + } + if ($('repeat', data).text() == 'true') { + $('#buttonRepeat').removeClass('ui-state-default').addClass('ui-state-active'); + } else { + $('#buttonRepeat').addClass('ui-state-default').removeClass('ui-state-active'); + } + + if ($('[name="artwork_url"]', data).text() != currentArt && $('[name="artwork_url"]', data).text() != "") { + var tmp = new Date(); + currentArt = $('[name="artwork_url"]', data).text(); + updateArt('/art?' + tmp.getTime()); + } else if ($('[name="artwork_url"]', data).text() == "" && currentArt != 'images/vlc-48.png') { + currentArt = 'images/vlc-48.png'; + updateArt(currentArt); + } + + current_playlist_id = parseInt($('currentplid', data).text()); + if (previous_playlist_id != current_playlist_id) { + updatePlayList(); + previous_playlist_id = current_playlist_id; + } + + seek_sec = parseInt($('seek_sec', data).text()); + + if (pollStatus) { + setTimeout(updateStatus, 1000); + } + + } + $('band', data).each(function () { + var id = $(this).attr('id'); + var value = $(this).text() ? $(this).text() : 0; + var freq = ["60 Hz","170 Hz", "310 Hz", "600 Hz", "1 kHz","3 kHz", "6 kHz", "12 kHz" , "14 kHz" , "16 kHz" ]; + if (!$('#eq_container' + id).length) { + $('#window_equalizer').append('
    ' + value + 'dB
    ' + freq[id] + '
    '); + $('#eq' + id).slider({ + min: -20, + max: 20, + step: 0.1, + range: "min", + value: value, + animate: true, + orientation: "vertical", + stop: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + sendCommand({ + command: 'equalizer', + val: ui.value, + band: $(this).attr('id').substr(2) + }) + }, + slide: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + } + }); + } else { + $('#eq' + id).slider({ + value: value + }); + $('#eq' + id + '_txt').empty().append(Math.round(value * 100) / 100 + 'dB'); + } + }); + $('#preamp').slider('value', $('preamp', data).text()); + $('#preamp_txt').empty().append(Math.round($('preamp', data).text() * 100) / 100 + 'dB'); + }, + error: function (jqXHR, status, error) { + setTimeout(updateStatus, 500); + } + }); +} + +function updatePlayList(force_refresh) { + if (force_refresh) { + //refresh playlist.. + $('#libraryTree').jstree('refresh', -1); + } else { + //iterate through playlist.. + var match = false; + $('.jstree-leaf').each(function(){ + var id = $(this).attr('id'); + if (id != null && id.substr(0,5) == 'plid_') { + if ( id.substr(5) == current_playlist_id ) { + $(this).addClass('ui-state-highlight'); + $(this).attr('current', 'current'); + this.scrollIntoView(true); + match = true; + } else { + $(this).removeClass('ui-state-highlight'); + $(this).removeAttr('current'); + } + if ($(this).children('a').size() > 0) { + $($(this).children('a')[0]).removeClass('ui-state-active'); + } + } + }); + //local title wasn't found - refresh playlist.. + if (!match) updatePlayList(true); + } +} + +function sendCommand(params, append) { + if (current_que == 'stream') { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + if (append != undefined) { + eval(append); + } + updateStatus(); + } + }); + } else { + if (params.plreload === false) { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + if (append != undefined) { + eval(append); + } + } + }); + } else { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + if (append != undefined) { + eval(append); + } + } + }); + } + } +} + +function browse(dir) { + dir = dir == undefined ? 'file://~' : dir; + $.ajax({ + url: 'requests/browse.xml', + data: 'uri=' + encodeURIComponent(dir), + success: function (data, status, jqXHR) { + var tgt = browse_target.indexOf('__') == -1 ? browse_target : browse_target.substr(0, browse_target.indexOf('__')); + $('#browse_elements').empty(); + $('element', data).each(function () { + var ext = $(this).attr('name').substr($(this).attr('name').lastIndexOf('.') + 1).toLowerCase(); + if ($(this).attr('type') == 'dir' || $.inArray(ext, video_types) != -1 || $.inArray(ext, audio_types) != -1 || $.inArray(ext, playlist_types) != -1) { + $('#browse_elements').append(createElementLi($(this).attr('name'), $(this).attr('type'), $(this).attr('uri'), ext)); + } + }); + $('[opendir]').dblclick(function () { + browse($(this).attr('opendir')); + }); + $('[openfile]').dblclick(function () { + switch (tgt) { + case '#stream_input': + $(browse_target).val($(this).attr('openfile')); + break; + case '#mosaic_open': + $('li', browse_target).remove(); + $(browse_target).append(this); + $(this).css({ + 'margin-left': -40, + 'margin-top': -46, + 'float': 'left' + }); + break; + case '#mobile': + break; + default: + sendCommand('command=in_play&input=' + encodeURIComponent($(this).attr('openfile'))); + updatePlayList(true); + break; + } + $('#window_browse').dialog('close'); + }); + $('[opendir]').click(function () { + switch (tgt) { + case '#mobile': + browse($(this).attr('opendir')); + break; + default: + break; + } + }); + $('[openfile]').click(function () { + switch (tgt) { + case '#mobile': + sendCommand('command=in_play&input=' + encodeURIComponent($(this).attr('openfile')), "window.location='mobile.html'"); + break; + default: + break; + } + }); + switch (tgt) { + case '#mobile': + break; + default: + $('[selectable]').selectable(); + break; + } + }, + error: function (jqXHR, status, error) { + setTimeout('browse("' + dir + '")', 1041); + } + }); +} + +function updateStreams() { + $.ajax({ + url: 'requests/vlm.xml', + success: function (data, status, jqXHR) { + $('#stream_info').accordion("destroy"); + $('#stream_info').empty(); + $('broadcast', data).each(function () { + var stream_div = $('#stream_status_').clone(); + var name = $(this).attr('name'); + var loop = $(this).attr('loop') == 'yes'; + var playing = $('instance', $(this)).attr('state') == 'playing'; + var file = $('input', $(this)).text(); + var output = $('output', $(this)).text(); + var time = isNaN(Math.round($('instance', $(this)).attr('time') / 1000000)) ? 0 : Math.round($('instance', $(this)).attr('time') / 1000000); + var length = isNaN(Math.round($('instance', $(this)).attr('length') / 1000000)) ? 0 : Math.round($('instance', $(this)).attr('length') / 1000000); + $('[id]', stream_div).each(function () { + $(this).attr('id', $(this).attr('id') + name); + }); + $(stream_div).attr('id', $(stream_div).attr('id') + name); + $('#stream_title_' + name, stream_div).append(name); + $('#stream_file_' + name, stream_div).append(file); + $('#stream_pos_' + name, stream_div).slider({ + value: 0, + range: "min", + min: 0, + slide: function (event, ui) { + $("#stream_current_time_" + name, stream_div).empty(); + $("#stream_current_time_" + name, stream_div).append(format_time(ui.value)); + $("#stream_total_time_" + name, stream_div).empty(); + $("#stream_total_time_" + name, stream_div).append(format_time($('#stream_pos_' + name, stream_div).slider('option', 'max'))); + sendVLMCmd('control ' + name + ' seek ' + Math.round(ui.value / $('#stream_pos_' + name, stream_div).slider('option', 'max') * 100)); + }, + change: function (event, ui) { + $("#stream_current_time_" + name, stream_div).empty(); + $("#stream_current_time_" + name, stream_div).append(format_time(ui.value)); + $("#stream_total_time_" + name, stream_div).empty(); + $("#stream_total_time_" + name, stream_div).append(format_time($('#stream_pos_' + name, stream_div).slider('option', 'max'))); + } + }); + $('#button_stream_stop_' + name, stream_div).click(function () { + sendVLMCmd('control ' + name + ' stop'); + return false; + }); + $('#button_stream_play_' + name, stream_div).click(function () { + if ($('span', this).hasClass('ui-icon-pause')) { + sendVLMCmd('control ' + name + ' pause'); + } else { + sendVLMCmd('control ' + name + ' play'); + } + }); + $('#button_stream_loop_' + name, stream_div).click(function () { + if (loop) { + sendVLMCmd('setup ' + name + ' unloop'); + } else { + sendVLMCmd('setup ' + name + ' loop'); + } + }); + $('#button_stream_delete_' + name, stream_div).click(function () { + sendVLMCmd('del ' + name); + }); + $('#stream_pos_' + name, stream_div).slider({ + max: length, + value: time + }); + if (playing) { + $('span', $('#button_stream_play_' + name, stream_div)).removeClass('ui-icon-play'); + $('span', $('#button_stream_play_' + name, stream_div)).addClass('ui-icon-pause'); + } + if (loop) { + $('#button_stream_loop_' + name, stream_div).addClass('ui-state-active'); + } + $(stream_div).css({ + 'visibility': '', + 'display': '' + }); + $('#stream_info').append(stream_div); + + }); + $('.button').hover( + + function () { + $(this).addClass('ui-state-hover'); + }, function () { + $(this).removeClass('ui-state-hover'); + }); + $('#stream_info').accordion({ + header: "h3", + collapsible: true, + autoHeight: true + }); + if (current_que == 'stream') { + $('.dynamic').empty(); + $('#mediaTitle').append($('[name="Current"] input', data).text()); + $('#totalTime').append(format_time(isNaN($('[name="Current"] instance', data).attr('length')) ? 0 : $('[name="Current"] instance', data).attr('length') / 1000000)); + $('#currentTime').append(format_time(isNaN($('[name="Current"] instance', data).attr('time')) ? 0 : $('[name="Current"] instance', data).attr('time') / 1000000)); + $('#seekSlider').slider({ + value: (($('[name="Current"] instance', data).attr('time') / 1000000) / ($('[name="Current"] instance', data).attr('length') / 1000000) * 100) + }); + $('#seekSlider').attr('totalLength', $('[name="Current"] instance', data).attr('length') / 1000000); + $('#buttonPlay').attr('state', $('[name="Current"] instance', data).length > 0 ? $('[name="Current"] instance', data).attr('state') : 'stopped'); + if ($('[name="Current"] instance', data).attr('state') == 'playing') { + $('#buttonPlay').removeClass('paused'); + $('#buttonPlay').addClass('playing'); + } else { + $('#buttonPlay').removeClass('playing'); + $('#buttonPlay').addClass('paused'); + } + setTimeout(updateStreams, 1000); + } + } + }); +} + +function updateEQ() { + $.ajax({ + url: 'requests/status.xml', + success: function (data, status, jqXHR) { + $('band', data).each(function () { + var freq = ["60 Hz","170 Hz", "310 Hz", "600 Hz", "1 kHz","3 kHz", "6 kHz", "12 kHz" , "14 kHz" , "16 kHz" ]; + var id = $(this).attr('id'); + var value = $(this).text() ? $(this).text() : 0; + if (!$('#eq_container' + id).length) { + $('#window_equalizer').append('
    ' + value + 'dB
    ' + freq[id] + '
    '); + $('#eq' + id).slider({ + min: -20, + max: 20, + step: 0.1, + range: "min", + value: value, + animate: true, + orientation: "vertical", + stop: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + sendEQCmd({ + command: 'equalizer', + val: ui.value, + band: $(this).attr('id').substr(2) + }) + }, + slide: function (event, ui) { + $('#' + $(this).attr('id') + '_txt').empty().append(ui.value + 'dB'); + } + }); + } else { + $('#eq' + id).slider({ + value: value + }); + $('#eq' + id + '_txt').empty().append(Math.round(value * 100) / 100 + 'dB'); + } + }); + $('#preamp').slider('value', $('preamp', data).text()); + $('#preamp_txt').empty().append(Math.round($('preamp', data).text() * 100) / 100 + 'dB'); + } + }) +} + +function sendVLMCmd(command, append) { + var commands = command.split(';'); + if (commands.length > 1) { + sendBatchVLMCmd(command, append); + } else { + if (current_que == 'main') { + $.ajax({ + url: 'requests/vlm_cmd.xml', + data: 'command=' + encodeURIComponent(command), + success: function (data, status, jqXHR) { + if ($('error', data).text()) { + $('#error_container').append('
    ' + $('error', data).text() + '
    '); + $('#window_error').dialog('open'); + } + if (append != undefined) { + eval(append); + } + updateStreams(); + } + }); + } else { + $.ajax({ + url: 'requests/vlm_cmd.xml', + data: 'command=' + encodeURIComponent(command), + success: function (data, status, jqXHR) { + if ($('error', data).text()) { + $('#error_container').append('
    ' + $('error', data).text() + '
    '); + $('#window_error').dialog('open'); + } + updateStreams(); + } + }); + } + } +} + +function sendBatchVLMCmd(command, append) { + var commands = command.split(';'); + $.ajax({ + url: 'requests/vlm_cmd.xml', + data: 'command=' + encodeURIComponent(commands.shift()), + success: function (data, status, jqXHR) { + if ($('error', data).text()) { + $('#error_container').append('
    ' + $('error', data).text() + '
    '); + $('#window_error').dialog('open'); + } + sendVLMCmd(commands.join(';'), append); + } + }); +} + +function sendEQCmd(params) { + $.ajax({ + url: 'requests/status.xml', + data: params, + success: function (data, status, jqXHR) { + updateEQ(); + } + }); +} + +$(function () { + $('#albumArt').load(function () { + var width = $(this).width(); + var height = $(this).height(); + var max = Math.max(width, height); + if (max > 150) { + var ratio = 150 / max; + width = Math.floor(width * ratio); + height = Math.floor(height * ratio); + } + $(this).attr('width', width).attr('height', height).css('margin-left', Math.floor((150 - width) / 2)).css('margin-top', Math.floor((150 - height) / 2)).removeClass('hidden').fadeIn(); + }); + $('#libraryTree').jstree({ + "xml_data": { + "ajax": { + "url": "requests/playlist_jstree.xml" + }, + "xsl": "nest" + }, + "themeroller": { + "item_leaf": "ui-icon-video" + }, + "core": { + "initially_open": ["plid_1", "plid_2", "plid_3"] + }, + "plugins": ["xml_data", "ui", "themeroller"] + }).bind("loaded.jstree", function (event, data) { + $('[current]', '[id^="plid_"]').each(function () { + $(this).addClass('ui-state-highlight'); + current_playlist_id = $(this).attr('id').substr(5); + }); + }).bind("refresh.jstree", function (event, data) { + $('[current]', '[id^="plid_"]').each(function () { + $(this).addClass('ui-state-highlight'); + current_playlist_id = $(this).attr('id').substr(5); + }); + }).delegate("#plid_0 li.jstree-leaf a", "click", function (event, data) { + event.preventDefault(); + current_playlist_id = $(this).parent().attr('id').substr(5); + sendCommand('command=pl_play&id=' + current_playlist_id); + }); + updateStatus(); + updateStreams(); + updateEQ(); +}); diff --git a/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/jquery.jstree.js b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/jquery.jstree.js new file mode 100644 index 0000000..a47e949 --- /dev/null +++ b/AudioVisualizer/bin/Debug/net6.0-windows/libvlc/win-x64/lua/http/js/jquery.jstree.js @@ -0,0 +1,4544 @@ +/* + * jsTree 1.0-rc3 + * http://jstree.com/ + * + * Copyright (c) 2010 Ivan Bozhanov (vakata.com) + * + * Licensed same as jquery - under the terms of either the MIT License or the GPL Version 2 License + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * $Date: 2011-02-09 01:17:14 +0200 (ср, 09 февр 2011) $ + * $Revision: 236 $ + */ + +/*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */ +/*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false*/ + +"use strict"; + +// top wrapper to prevent multiple inclusion (is this OK?) +(function () { if(jQuery && jQuery.jstree) { return; } + var is_ie6 = false, is_ie7 = false, is_ff2 = false; + +/* + * jsTree core + */ +(function ($) { + // Common functions not related to jsTree + // decided to move them to a `vakata` "namespace" + $.vakata = {}; + // CSS related functions + $.vakata.css = { + get_css : function(rule_name, delete_flag, sheet) { + rule_name = rule_name.toLowerCase(); + var css_rules = sheet.cssRules || sheet.rules, + j = 0; + do { + if(css_rules.length && j > css_rules.length + 5) { return false; } + if(css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) { + if(delete_flag === true) { + if(sheet.removeRule) { sheet.removeRule(j); } + if(sheet.deleteRule) { sheet.deleteRule(j); } + return true; + } + else { return css_rules[j]; } + } + } + while (css_rules[++j]); + return false; + }, + add_css : function(rule_name, sheet) { + if($.jstree.css.get_css(rule_name, false, sheet)) { return false; } + if(sheet.insertRule) { sheet.insertRule(rule_name + ' { }', 0); } else { sheet.addRule(rule_name, null, 0); } + return $.vakata.css.get_css(rule_name); + }, + remove_css : function(rule_name, sheet) { + return $.vakata.css.get_css(rule_name, true, sheet); + }, + add_sheet : function(opts) { + var tmp = false, is_new = true; + if(opts.str) { + if(opts.title) { tmp = $("style[id='" + opts.title + "-stylesheet']")[0]; } + if(tmp) { is_new = false; } + else { + tmp = document.createElement("style"); + tmp.setAttribute('type',"text/css"); + if(opts.title) { tmp.setAttribute("id", opts.title + "-stylesheet"); } + } + if(tmp.styleSheet) { + if(is_new) { + document.getElementsByTagName("head")[0].appendChild(tmp); + tmp.styleSheet.cssText = opts.str; + } + else { + tmp.styleSheet.cssText = tmp.styleSheet.cssText + " " + opts.str; + } + } + else { + tmp.appendChild(document.createTextNode(opts.str)); + document.getElementsByTagName("head")[0].appendChild(tmp); + } + return tmp.sheet || tmp.styleSheet; + } + if(opts.url) { + if(document.createStyleSheet) { + try { tmp = document.createStyleSheet(opts.url); } catch (e) { } + } + else { + tmp = document.createElement('link'); + tmp.rel = 'stylesheet'; + tmp.type = 'text/css'; + tmp.media = "all"; + tmp.href = opts.url; + document.getElementsByTagName("head")[0].appendChild(tmp); + return tmp.styleSheet; + } + } + } + }; + + // private variables + var instances = [], // instance array (used by $.jstree.reference/create/focused) + focused_instance = -1, // the index in the instance array of the currently focused instance + plugins = {}, // list of included plugins + prepared_move = {}; // for the move_node function + + // jQuery plugin wrapper (thanks to jquery UI widget function) + $.fn.jstree = function (settings) { + var isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node") + args = Array.prototype.slice.call(arguments, 1), + returnValue = this; + + // if a method call execute the method on all selected instances + if(isMethodCall) { + if(settings.substring(0, 1) == '_') { return returnValue; } + this.each(function() { + var instance = instances[$.data(this, "jstree-instance-id")], + methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instance, args) : instance; + if(typeof methodValue !== "undefined" && (settings.indexOf("is_") === 0 || (methodValue !== true && methodValue !== false))) { returnValue = methodValue; return false; } + }); + } + else { + this.each(function() { + // extend settings and allow for multiple hashes and $.data + var instance_id = $.data(this, "jstree-instance-id"), + a = [], + b = settings ? $.extend({}, true, settings) : {}, + c = $(this), + s = false, + t = []; + a = a.concat(args); + if(c.data("jstree")) { a.push(c.data("jstree")); } + b = a.length ? $.extend.apply(null, [true, b].concat(a)) : b; + + // if an instance already exists, destroy it first + if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); } + // push a new empty object to the instances array + instance_id = parseInt(instances.push({}),10) - 1; + // store the jstree instance id to the container element + $.data(this, "jstree-instance-id", instance_id); + // clean up all plugins + b.plugins = $.isArray(b.plugins) ? b.plugins : $.jstree.defaults.plugins.slice(); + b.plugins.unshift("core"); + // only unique plugins + b.plugins = b.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(","); + + // extend defaults with passed data + s = $.extend(true, {}, $.jstree.defaults, b); + s.plugins = b.plugins; + $.each(plugins, function (i, val) { + if($.inArray(i, s.plugins) === -1) { s[i] = null; delete s[i]; } + else { t.push(i); } + }); + s.plugins = t; + + // push the new object to the instances array (at the same time set the default classes to the container) and init + instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" + instance_id), s); + // init all activated plugins for this instance + $.each(instances[instance_id]._get_settings().plugins, function (i, val) { instances[instance_id].data[val] = {}; }); + $.each(instances[instance_id]._get_settings().plugins, function (i, val) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } }); + // initialize the instance + setTimeout(function() { instances[instance_id].init(); }, 0); + }); + } + // return the jquery selection (or if it was a method call that returned a value - the returned value) + return returnValue; + }; + // object to store exposed functions and objects + $.jstree = { + defaults : { + plugins : [] + }, + _focused : function () { return instances[focused_instance] || null; }, + _reference : function (needle) { + // get by instance id + if(instances[needle]) { return instances[needle]; } + // get by DOM (if still no luck - return null + var o = $(needle); + if(!o.length && typeof needle === "string") { o = $("#" + needle); } + if(!o.length) { return null; } + return instances[o.closest(".jstree").data("jstree-instance-id")] || null; + }, + _instance : function (index, container, settings) { + // for plugins to store data in + this.data = { core : {} }; + this.get_settings = function () { return $.extend(true, {}, settings); }; + this._get_settings = function () { return settings; }; + this.get_index = function () { return index; }; + this.get_container = function () { return container; }; + this.get_container_ul = function () { return container.children("ul:eq(0)"); }; + this._set_settings = function (s) { + settings = $.extend(true, {}, settings, s); + }; + }, + _fn : { }, + plugin : function (pname, pdata) { + pdata = $.extend({}, { + __init : $.noop, + __destroy : $.noop, + _fn : {}, + defaults : false + }, pdata); + plugins[pname] = pdata; + + $.jstree.defaults[pname] = pdata.defaults; + $.each(pdata._fn, function (i, val) { + val.plugin = pname; + val.old = $.jstree._fn[i]; + $.jstree._fn[i] = function () { + var rslt, + func = val, + args = Array.prototype.slice.call(arguments), + evnt = new $.Event("before.jstree"), + rlbk = false; + + if(this.data.core.locked === true && i !== "unlock" && i !== "is_locked") { return; } + + // Check if function belongs to the included plugins of this instance + do { + if(func && func.plugin && $.inArray(func.plugin, this._get_settings().plugins) !== -1) { break; } + func = func.old; + } while(func); + if(!func) { return; } + + // context and function to trigger events, then finally call the function + if(i.indexOf("_") === 0) { + rslt = func.apply(this, args); + } + else { + rslt = this.get_container().triggerHandler(evnt, { "func" : i, "inst" : this, "args" : args, "plugin" : func.plugin }); + if(rslt === false) { return; } + if(typeof rslt !== "undefined") { args = rslt; } + + rslt = func.apply( + $.extend({}, this, { + __callback : function (data) { + this.get_container().triggerHandler( i + '.jstree', { "inst" : this, "args" : args, "rslt" : data, "rlbk" : rlbk }); + }, + __rollback : function () { + rlbk = this.get_rollback(); + return rlbk; + }, + __call_old : function (replace_arguments) { + return func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments, 1) : args ) ); + } + }), args); + } + + // return the result + return rslt; + }; + $.jstree._fn[i].old = val.old; + $.jstree._fn[i].plugin = pname; + }); + }, + rollback : function (rb) { + if(rb) { + if(!$.isArray(rb)) { rb = [ rb ]; } + $.each(rb, function (i, val) { + instances[val.i].set_rollback(val.h, val.d); + }); + } + } + }; + // set the prototype for all instances + $.jstree._fn = $.jstree._instance.prototype = {}; + + // load the css when DOM is ready + $(function() { + // code is copied from jQuery ($.browser is deprecated + there is a bug in IE) + var u = navigator.userAgent.toLowerCase(), + v = (u.match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], + css_string = '' + + '.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' + + '.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } ' + + '.jstree-rtl li { margin-left:0; margin-right:18px; } ' + + '.jstree > ul > li { margin-left:0px; } ' + + '.jstree-rtl > ul > li { margin-right:0px; } ' + + '.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' + + '.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' + + '.jstree a:focus { outline: none; } ' + + '.jstree a > ins { height:16px; width:16px; } ' + + '.jstree a > .jstree-icon { margin-right:3px; } ' + + '.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' + + 'li.jstree-open > ul { display:block; } ' + + 'li.jstree-closed > ul { display:none; } '; + // Correct IE 6 (does not support the > CSS selector) + if(/msie/.test(u) && parseInt(v, 10) == 6) { + is_ie6 = true; + + // fix image flicker and lack of caching + try { + document.execCommand("BackgroundImageCache", false, true); + } catch (err) { } + + css_string += '' + + '.jstree li { height:18px; margin-left:0; margin-right:0; } ' + + '.jstree li li { margin-left:18px; } ' + + '.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' + + 'li.jstree-open ul { display:block; } ' + + 'li.jstree-closed ul { display:none !important; } ' + + '.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' + + '.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' + + '.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } '; + } + // Correct IE 7 (shifts anchor nodes onhover) + if(/msie/.test(u) && parseInt(v, 10) == 7) { + is_ie7 = true; + css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } '; + } + // correct ff2 lack of display:inline-block + if(!/compatible/.test(u) && /mozilla/.test(u) && parseFloat(v, 10) < 1.9) { + is_ff2 = true; + css_string += '' + + '.jstree ins { display:-moz-inline-box; } ' + + '.jstree li { line-height:12px; } ' + // WHY?? + '.jstree a { display:-moz-inline-box; } ' + + '.jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } '; + /* this shouldn't be here as it is theme specific */ + } + // the default stylesheet + $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); + }); + + // core functions (open, close, create, update, delete) + $.jstree.plugin("core", { + __init : function () { + this.data.core.locked = false; + this.data.core.to_open = this.get_settings().core.initially_open; + this.data.core.to_load = this.get_settings().core.initially_load; + }, + defaults : { + html_titles : false, + animation : 500, + initially_open : [], + initially_load : [], + open_parents : true, + notify_plugins : true, + rtl : false, + load_open : false, + strings : { + loading : "Loading ...", + new_node : "New node", + multiple_selection : "Multiple selection" + } + }, + _fn : { + init : function () { + this.set_focus(); + if(this._get_settings().core.rtl) { + this.get_container().addClass("jstree-rtl").css("direction", "rtl"); + } + this.get_container().html(""); + this.data.core.li_height = this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18; + + this.get_container() + .delegate("li > ins", "click.jstree", $.proxy(function (event) { + var trgt = $(event.target); + if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); } + }, this)) + .bind("mousedown.jstree", $.proxy(function () { + this.set_focus(); // This used to be setTimeout(set_focus,0) - why? + }, this)) + .bind("dblclick.jstree", function (event) { + var sel; + if(document.selection && document.selection.empty) { document.selection.empty(); } + else { + if(window.getSelection) { + sel = window.getSelection(); + try { + sel.removeAllRanges(); + sel.collapse(); + } catch (err) { } + } + } + }); + if(this._get_settings().core.notify_plugins) { + this.get_container() + .bind("load_node.jstree", $.proxy(function (e, data) { + var o = this._get_node(data.rslt.obj), + t = this; + if(o === -1) { o = this.get_container_ul(); } + if(!o.length) { return; } + o.find("li").each(function () { + var th = $(this); + if(th.data("jstree")) { + $.each(th.data("jstree"), function (plugin, values) { + if(t.data[plugin] && $.isFunction(t["_" + plugin + "_notify"])) { + t["_" + plugin + "_notify"].call(t, th, values); + } + }); + } + }); + }, this)); + } + if(this._get_settings().core.load_open) { + this.get_container() + .bind("load_node.jstree", $.proxy(function (e, data) { + var o = this._get_node(data.rslt.obj), + t = this; + if(o === -1) { o = this.get_container_ul(); } + if(!o.length) { return; } + o.find("li.jstree-open:not(:has(ul))").each(function () { + t.load_node(this, $.noop, $.noop); + }); + }, this)); + } + this.__callback(); + this.load_node(-1, function () { this.loaded(); this.reload_nodes(); }); + }, + destroy : function () { + var i, + n = this.get_index(), + s = this._get_settings(), + _this = this; + + $.each(s.plugins, function (i, val) { + try { plugins[val].__destroy.apply(_this); } catch(err) { } + }); + this.__callback(); + // set focus to another instance if this one is focused + if(this.is_focused()) { + for(i in instances) { + if(instances.hasOwnProperty(i) && i != n) { + instances[i].set_focus(); + break; + } + } + } + // if no other instance found + if(n === focused_instance) { focused_instance = -1; } + // remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events + this.get_container() + .unbind(".jstree") + .undelegate(".jstree") + .removeData("jstree-instance-id") + .find("[class^='jstree']") + .andSelf() + .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); }); + $(document) + .unbind(".jstree-" + n) + .undelegate(".jstree-" + n); + // remove the actual data + instances[n] = null; + delete instances[n]; + }, + + _core_notify : function (n, data) { + if(data.opened) { + this.open_node(n, false, true); + } + }, + + lock : function () { + this.data.core.locked = true; + this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7"); + this.__callback({}); + }, + unlock : function () { + this.data.core.locked = false; + this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1"); + this.__callback({}); + }, + is_locked : function () { return this.data.core.locked; }, + save_opened : function () { + var _this = this; + this.data.core.to_open = []; + this.get_container_ul().find("li.jstree-open").each(function () { + if(this.id) { _this.data.core.to_open.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); } + }); + this.__callback(_this.data.core.to_open); + }, + save_loaded : function () { }, + reload_nodes : function (is_callback) { + var _this = this, + done = true, + current = [], + remaining = []; + if(!is_callback) { + this.data.core.reopen = false; + this.data.core.refreshing = true; + this.data.core.to_open = $.map($.makeArray(this.data.core.to_open), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); + this.data.core.to_load = $.map($.makeArray(this.data.core.to_load), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); + if(this.data.core.to_open.length) { + this.data.core.to_load = this.data.core.to_load.concat(this.data.core.to_open); + } + } + if(this.data.core.to_load.length) { + $.each(this.data.core.to_load, function (i, val) { + if(val == "#") { return true; } + if($(val).length) { current.push(val); } + else { remaining.push(val); } + }); + if(current.length) { + this.data.core.to_load = remaining; + $.each(current, function (i, val) { + if(!_this._is_loaded(val)) { + _this.load_node(val, function () { _this.reload_nodes(true); }, function () { _this.reload_nodes(true); }); + done = false; + } + }); + } + } + if(this.data.core.to_open.length) { + $.each(this.data.core.to_open, function (i, val) { + _this.open_node(val, false, true); + }); + } + if(done) { + // TODO: find a more elegant approach to synchronizing returning requests + if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); } + this.data.core.reopen = setTimeout(function () { _this.__callback({}, _this); }, 50); + this.data.core.refreshing = false; + this.reopen(); + } + }, + reopen : function () { + var _this = this; + if(this.data.core.to_open.length) { + $.each(this.data.core.to_open, function (i, val) { + _this.open_node(val, false, true); + }); + } + this.__callback({}); + }, + refresh : function (obj) { + var _this = this; + this.save_opened(); + if(!obj) { obj = -1; } + obj = this._get_node(obj); + if(!obj) { obj = -1; } + if(obj !== -1) { obj.children("UL").remove(); } + else { this.get_container_ul().empty(); } + this.load_node(obj, function () { _this.__callback({ "obj" : obj}); _this.reload_nodes(); }); + }, + // Dummy function to fire after the first load (so that there is a jstree.loaded event) + loaded : function () { + this.__callback(); + }, + // deal with focus + set_focus : function () { + if(this.is_focused()) { return; } + var f = $.jstree._focused(); + if(f) { f.unset_focus(); } + + this.get_container().addClass("jstree-focused"); + focused_instance = this.get_index(); + this.__callback(); + }, + is_focused : function () { + return focused_instance == this.get_index(); + }, + unset_focus : function () { + if(this.is_focused()) { + this.get_container().removeClass("jstree-focused"); + focused_instance = -1; + } + this.__callback(); + }, + + // traverse + _get_node : function (obj) { + var $obj = $(obj, this.get_container()); + if($obj.is(".jstree") || obj == -1) { return -1; } + $obj = $obj.closest("li", this.get_container()); + return $obj.length ? $obj : false; + }, + _get_next : function (obj, strict) { + obj = this._get_node(obj); + if(obj === -1) { return this.get_container().find("> ul > li:first-child"); } + if(!obj.length) { return false; } + if(strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; } + + if(obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); } + else if(obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); } + else { return obj.parentsUntil(".jstree","li").next("li").eq(0); } + }, + _get_prev : function (obj, strict) { + obj = this._get_node(obj); + if(obj === -1) { return this.get_container().find("> ul > li:last-child"); } + if(!obj.length) { return false; } + if(strict) { return (obj.prevAll("li").length > 0) ? obj.prevAll("li:eq(0)") : false; } + + if(obj.prev("li").length) { + obj = obj.prev("li").eq(0); + while(obj.hasClass("jstree-open")) { obj = obj.children("ul:eq(0)").children("li:last"); } + return obj; + } + else { var o = obj.parentsUntil(".jstree","li:eq(0)"); return o.length ? o : false; } + }, + _get_parent : function (obj) { + obj = this._get_node(obj); + if(obj == -1 || !obj.length) { return false; } + var o = obj.parentsUntil(".jstree", "li:eq(0)"); + return o.length ? o : -1; + }, + _get_children : function (obj) { + obj = this._get_node(obj); + if(obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); } + if(!obj.length) { return false; } + return obj.children("ul:eq(0)").children("li"); + }, + get_path : function (obj, id_mode) { + var p = [], + _this = this; + obj = this._get_node(obj); + if(obj === -1 || !obj || !obj.length) { return false; } + obj.parentsUntil(".jstree", "li").each(function () { + p.push( id_mode ? this.id : _this.get_text(this) ); + }); + p.reverse(); + p.push( id_mode ? obj.attr("id") : this.get_text(obj) ); + return p; + }, + + // string functions + _get_string : function (key) { + return this._get_settings().core.strings[key] || key; + }, + + is_open : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-open"); }, + is_closed : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-closed"); }, + is_leaf : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-leaf"); }, + correct_state : function (obj) { + obj = this._get_node(obj); + if(!obj || obj === -1) { return false; } + obj.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove(); + this.__callback({ "obj" : obj }); + }, + // open/close + open_node : function (obj, callback, skip_animation) { + obj = this._get_node(obj); + if(!obj.length) { return false; } + if(!obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; } + var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation, + t = this; + if(!this._is_loaded(obj)) { + obj.children("a").addClass("jstree-loading"); + this.load_node(obj, function () { t.open_node(obj, callback, skip_animation); }, callback); + } + else { + if(this._get_settings().core.open_parents) { + obj.parentsUntil(".jstree",".jstree-closed").each(function () { + t.open_node(this, false, true); + }); + } + if(s) { obj.children("ul").css("display","none"); } + obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading"); + if(s) { obj.children("ul").stop(true, true).slideDown(s, function () { this.style.display = ""; t.after_open(obj); }); } + else { t.after_open(obj); } + this.__callback({ "obj" : obj }); + if(callback) { callback.call(); } + } + }, + after_open : function (obj) { this.__callback({ "obj" : obj }); }, + close_node : function (obj, skip_animation) { + obj = this._get_node(obj); + var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation, + t = this; + if(!obj.length || !obj.hasClass("jstree-open")) { return false; } + if(s) { obj.children("ul").attr("style","display:block !important"); } + obj.removeClass("jstree-open").addClass("jstree-closed"); + if(s) { obj.children("ul").stop(true, true).slideUp(s, function () { this.style.display = ""; t.after_close(obj); }); } + else { t.after_close(obj); } + this.__callback({ "obj" : obj }); + }, + after_close : function (obj) { this.__callback({ "obj" : obj }); }, + toggle_node : function (obj) { + obj = this._get_node(obj); + if(obj.hasClass("jstree-closed")) { return this.open_node(obj); } + if(obj.hasClass("jstree-open")) { return this.close_node(obj); } + }, + open_all : function (obj, do_animation, original_obj) { + obj = obj ? this._get_node(obj) : -1; + if(!obj || obj === -1) { obj = this.get_container_ul(); } + if(original_obj) { + obj = obj.find("li.jstree-closed"); + } + else { + original_obj = obj; + if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").andSelf(); } + else { obj = obj.find("li.jstree-closed"); } + } + var _this = this; + obj.each(function () { + var __this = this; + if(!_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__this, do_animation, original_obj); }, !do_animation); } + else { _this.open_node(this, false, !do_animation); } + }); + // so that callback is fired AFTER all nodes are open + if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" : original_obj }); } + }, + close_all : function (obj, do_animation) { + var _this = this; + obj = obj ? this._get_node(obj) : this.get_container(); + if(!obj || obj === -1) { obj = this.get_container_ul(); } + obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this, !do_animation); }); + this.__callback({ "obj" : obj }); + }, + clean_node : function (obj) { + obj = obj && obj != -1 ? $(obj) : this.get_container_ul(); + obj = obj.is("li") ? obj.find("li").andSelf() : obj.find("li"); + obj.removeClass("jstree-last") + .filter("li:last-child").addClass("jstree-last").end() + .filter(":has(li)") + .not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed"); + obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove(); + this.__callback({ "obj" : obj }); + }, + // rollback + get_rollback : function () { + this.__callback(); + return { i : this.get_index(), h : this.get_container().children("ul").clone(true), d : this.data }; + }, + set_rollback : function (html, data) { + this.get_container().empty().append(html); + this.data = data; + this.__callback(); + }, + // Dummy functions to be overwritten by any datastore plugin included + load_node : function (obj, s_call, e_call) { this.__callback({ "obj" : obj }); }, + _is_loaded : function (obj) { return true; }, + + // Basic operations: create + create_node : function (obj, position, js, callback, is_loaded) { + obj = this._get_node(obj); + position = typeof position === "undefined" ? "last" : position; + var d = $("
  • "), + s = this._get_settings().core, + tmp; + + if(obj !== -1 && !obj.length) { return false; } + if(!is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(obj, position, js, callback, true); }); return false; } + + this.__rollback(); + + if(typeof js === "string") { js = { "data" : js }; } + if(!js) { js = {}; } + if(js.attr) { d.attr(js.attr); } + if(js.metadata) { d.data(js.metadata); } + if(js.state) { d.addClass("jstree-" + js.state); } + if(!js.data) { js.data = this._get_string("new_node"); } + if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); } + $.each(js.data, function (i, m) { + tmp = $(""); + if($.isFunction(m)) { m = m.call(this, js); } + if(typeof m == "string") { tmp.attr('href','#')[ s.html_titles ? "html" : "text" ](m); } + else { + if(!m.attr) { m.attr = {}; } + if(!m.attr.href) { m.attr.href = '#'; } + tmp.attr(m.attr)[ s.html_titles ? "html" : "text" ](m.title); + if(m.language) { tmp.addClass(m.language); } + } + tmp.prepend(" "); + if(m.icon) { + if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); } + else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); } + } + d.append(tmp); + }); + d.prepend(" "); + if(obj === -1) { + obj = this.get_container(); + if(position === "before") { position = "first"; } + if(position === "after") { position = "last"; } + } + switch(position) { + case "before": obj.before(d); tmp = this._get_parent(obj); break; + case "after" : obj.after(d); tmp = this._get_parent(obj); break; + case "inside": + case "first" : + if(!obj.children("ul").length) { obj.append("