added volume control and mute, fixed per-monitor DPI awareness to actually work (why is this not a default???)

This commit is contained in:
Maff 2019-10-29 13:05:36 +00:00
parent 29caddd0c1
commit 19f18b8072
18 changed files with 281 additions and 539 deletions

View File

@ -1,9 +1,8 @@
<Application x:Class="WinPlaza.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WinPlaza"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WinPlaza"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

View File

@ -5,60 +5,63 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WinPlaza"
mc:Ignorable="d"
Title="Nightwave.Net" Height="200" Width="480" Background="#FFF0F0F0" ResizeMode="CanMinimize">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140*"/>
<ColumnDefinition Width="155*"/>
<ColumnDefinition Width="155*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="0*"/>
</Grid.ColumnDefinitions>
<Image x:Name="art" Margin="0,0,0,0" Grid.Column="0" />
<Label x:Name="lbTitle" Content="リサフランク420 / 現代のコンピュ" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontSize="12" FontWeight="Bold" Grid.ColumnSpan="2" Grid.Column="1"/>
<Label x:Name="lbArtist" Content="MACプラス Macintosh Plus" HorizontalAlignment="Left" Margin="10,32,0,0" VerticalAlignment="Top" FontSize="11" Grid.Column="1"/>
<Label x:Name="lbAlbum" Content="フローラルの専門店 Floral Shoppe" HorizontalAlignment="Left" Margin="10,54,0,0" VerticalAlignment="Top" FontStyle="Italic" FontSize="10" Grid.Column="1" Grid.ColumnSpan="2"/>
<Slider x:Name="slDuration" Margin="10,87,0,0" VerticalAlignment="Top" IsEnabled="False" Grid.ColumnSpan="2" Height="18" Grid.Column="1"/>
<Label x:Name="lbElapsed" Content="00:00" HorizontalAlignment="Left" Margin="10,99,0,0" VerticalAlignment="Top" FontStyle="Italic" FontSize="9" Grid.Column="1"/>
<Label x:Name="lbTime" Content="00:00" Margin="0,99,9.667,0" VerticalAlignment="Top" HorizontalAlignment="Right" FontStyle="Italic" FontSize="9" Grid.Column="2" Grid.ColumnSpan="2"/>
<Label x:Name="lbLike" Content="❤" HorizontalAlignment="Right" Margin="0,36,7.667,0" VerticalAlignment="Top" FontSize="10" Grid.Column="2"/>
<Label x:Name="lbLikeCt" Content="0" HorizontalAlignment="Right" Margin="0,35,9.667,0" VerticalAlignment="Top" Grid.Column="2" Grid.ColumnSpan="2"/>
<Label x:Name="lbDislike" Content="❌" HorizontalAlignment="Right" Margin="0,52,7.667,0" VerticalAlignment="Top" FontSize="10" Grid.Column="2"/>
<Label x:Name="lbDislikeCt" Content="0" HorizontalAlignment="Right" Margin="0,51,9.667,0" VerticalAlignment="Top" Grid.Column="2" Grid.ColumnSpan="2"/>
<DockPanel Grid.ColumnSpan="5" Margin="0,0,-0.333,0" Grid.Row="1">
<StatusBar Margin="0,0,0,0" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" BorderBrush="#FFDFDFDF" BorderThickness="1">
<StatusBarItem>
<TextBlock x:Name="sbListeners" Text="420 listeners"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<ToggleButton x:Name="btPlayPause" Content="⏯" VerticalContentAlignment="Center" Checked="BtPlayPause_Click" Unchecked="BtPlayPause_Click"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock x:Name="sbStatus" Text="Idle.."/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right" HorizontalContentAlignment="Right">
<TextBlock x:Name="sbListeningTimers" Text="00:00 (00:00)" Visibility="Hidden"/>
</StatusBarItem>
</StatusBar>
</DockPanel>
<Canvas x:Name="chLeftCvs" Margin="10,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" RenderTransformOrigin="0.5,0.5" Grid.Column="1">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="-1"/>
<SkewTransform AngleY="0" AngleX="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform/>
</TransformGroup>
</Canvas.RenderTransform>
<Rectangle x:Name="chLeft" Width="125" Height="10" HorizontalAlignment="Left" Fill="#FF003C49"/>
</Canvas>
<Canvas x:Name="chRightCvs" Margin="0,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" Grid.Column="2">
<Rectangle x:Name="chRight" Width="125" Height="10" Fill="#FF003C49"/>
</Canvas>
</Grid>
Title="Nightwave.Net" Height="200" Width="480" Background="#FFF0F0F0" ResizeMode="CanMinimize" Deactivated="Window_Deactivated" Activated="Window_Activated" UseLayoutRounding="True">
<Grid ClipToBounds="True">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140*"/>
<ColumnDefinition Width="155*"/>
<ColumnDefinition Width="155*"/>
<ColumnDefinition Width="10*"/>
<ColumnDefinition Width="0*"/>
</Grid.ColumnDefinitions>
<Image x:Name="art" Margin="0,0,0,0" Grid.Column="0" />
<Label x:Name="lbTitle" Content="リサフランク420 / 現代のコンピュ" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" FontSize="12" FontWeight="Bold" Grid.ColumnSpan="2" Grid.Column="1"/>
<Label x:Name="lbArtist" Content="MACプラス Macintosh Plus" HorizontalAlignment="Left" Margin="10,32,0,0" VerticalAlignment="Top" FontSize="11" Grid.Column="1"/>
<Label x:Name="lbAlbum" Content="フローラルの専門店 Floral Shoppe" HorizontalAlignment="Left" Margin="10,54,0,0" VerticalAlignment="Top" FontStyle="Italic" FontSize="10" Grid.Column="1" Grid.ColumnSpan="2"/>
<Slider x:Name="slDuration" Margin="10,87,0,0" VerticalAlignment="Top" IsEnabled="False" Grid.ColumnSpan="2" Height="18" Grid.Column="1"/>
<Label x:Name="lbElapsed" Content="00:00" HorizontalAlignment="Left" Margin="10,99,0,0" VerticalAlignment="Top" FontStyle="Italic" FontSize="9" Grid.Column="1"/>
<Label x:Name="lbTime" Content="00:00" Margin="0,99,9.667,0" VerticalAlignment="Top" HorizontalAlignment="Right" FontStyle="Italic" FontSize="9" Grid.Column="2" Grid.ColumnSpan="2"/>
<Label x:Name="lbLike" Content="❤" HorizontalAlignment="Right" Margin="0,36,7.667,0" VerticalAlignment="Top" FontSize="10" Grid.Column="2"/>
<Label x:Name="lbLikeCt" Content="0" HorizontalAlignment="Right" Margin="0,35,9.667,0" VerticalAlignment="Top" Grid.Column="2" Grid.ColumnSpan="2"/>
<Label x:Name="lbDislike" Content="❌" HorizontalAlignment="Right" Margin="0,52,7.667,0" VerticalAlignment="Top" FontSize="10" Grid.Column="2"/>
<Label x:Name="lbDislikeCt" Content="0" HorizontalAlignment="Right" Margin="0,51,9.667,0" VerticalAlignment="Top" Grid.Column="2" Grid.ColumnSpan="2"/>
<DockPanel Grid.ColumnSpan="5" Margin="0,0,0,0" Grid.Row="1">
<StatusBar x:Name="statusBar" Margin="0,0,0,-2" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" BorderBrush="#FFDFDFDF" BorderThickness="1" Height="28" VerticalContentAlignment="Bottom">
<StatusBarItem HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="sbListeners" Text="420 listeners"/>
<Separator Width="1" Margin="4,2"/>
<ToggleButton x:Name="btPlayPause" Content="⏯" VerticalContentAlignment="Center" Checked="BtPlayPause_Click" Unchecked="BtPlayPause_Click" Margin="0,0,4,0" Height="{Binding Width, RelativeSource={RelativeSource Self}}"/>
<TextBlock x:Name="sbStatus" Text="Idle.."/>
</StackPanel>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="sbListeningTimers" Text="00:00 (00:00)" Visibility="Hidden"/>
<Button x:Name="sbMute" Content="🔊" Click="SbMute_Click"/>
<Separator Width="6" Background="{x:Null}" Foreground="{x:Null}"/>
<Slider x:Name="sbVol" Maximum="100" Minimum="0" Value="100" SmallChange="1" LargeChange="5" Width="80" ValueChanged="SbVol_ValueChanged" MouseWheel="SbVol_MouseWheel"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
</DockPanel>
<Canvas x:Name="chLeftCvs" Margin="10,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" RenderTransformOrigin="0.5,0.5" Grid.Column="1">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="-1"/>
<SkewTransform AngleY="0" AngleX="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform/>
</TransformGroup>
</Canvas.RenderTransform>
<Rectangle x:Name="chLeft" Width="125" Height="10" HorizontalAlignment="Left" Fill="#FF003C49"/>
</Canvas>
<Canvas x:Name="chRightCvs" Margin="0,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" Grid.Column="2">
<Rectangle x:Name="chRight" Width="125" Height="10" Fill="#FF003C49"/>
</Canvas>
</Grid>
</Window>

View File

@ -9,54 +9,72 @@ using ManagedBass;
namespace WinPlaza {
public partial class MainWindow : Window {
#region StateVars
static readonly object BufferLock=new object();
private int BuffCh;
private int BufferReqs;
string LastArtwork="";
Nightwave plaza=new Nightwave();
Timer tRefresh;
Timer tAudio;
Timer tGfx;
bool AudioInit=false;
public MainWindow() {
InitializeComponent();
tRefresh = new Timer(300) { AutoReset = true };
tRefresh.Elapsed += EvtRefresh;
tRefresh.Start();
if(!Bass.Init())
sbStatus.Text = "Unable to initialise audio subsystem";
else
AudioInit = true;
if(!AudioInit)
return;
tAudio = new Timer(50);
tAudio.Elapsed += EvtAudio;
tGfx = new Timer(18) { AutoReset = true };
tGfx.Elapsed += EvtRender;
Bass.NetPlaylist = 1;
Bass.NetPreBuffer = 0;
}
private void EvtRender(object sender, ElapsedEventArgs e) => Dispatcher.BeginInvoke(new dgtNoParam(Leveller));
private int MuteVol=-1;
private int GfxWidthStep=-1;
private string LastArtwork="";
private Nightwave plaza=new Nightwave();
private Timer tRefresh;
private Timer tAudio;
private Timer tGfx;
private bool AudioInit=false;
#endregion
#region Delegates
private delegate void dgtNoParam();
private delegate void dgtBool(bool b);
private delegate void dgtStr(string s);
#endregion
#region CrossThreadCalls
private void Leveller() {
int pxT=(32768/(int)chLeftCvs.ActualWidth);
int left=Bass.ChannelGetLevelLeft(BuffCh);
int right=Bass.ChannelGetLevelRight(BuffCh);
chLeft.Width = (left / pxT);
chRight.Width = (right / pxT);
if(GfxWidthStep<0)
GfxWidthStep = 32768 / (int)chLeftCvs.ActualWidth;
chLeft.Width = Bass.ChannelGetLevelLeft(BuffCh) / GfxWidthStep;
chRight.Width = Bass.ChannelGetLevelRight(BuffCh) / GfxWidthStep;
}
private void EvtAudio(object sender, ElapsedEventArgs e) =>
_ = Dispatcher.BeginInvoke(new dgtNoParam(dgtAud));
~MainWindow() {
if(AudioInit)
_ = Bass.Free();
private void SetStatus(string msg) =>
Dispatcher.BeginInvoke(new dgtStr(_Status), msg);
private void SetTitle(string msg) =>
Dispatcher.BeginInvoke(new dgtStr(_Title), msg);
private async void dgtRefresh(bool Force = false) {
Nightwave.Status s=await plaza.Broadcast(Force);
slDuration.Value = s.CalculatedElapsed;
sbListeners.Text = $"{s.Listeners} listeners";
lbLikeCt.Content = s.Likes;
lbDislikeCt.Content = s.Dislikes;
lbElapsed.Content = $"{(s.CalculatedElapsed / 60).ToString("D")}:{(s.CalculatedElapsed % 60).ToString("D2")}";
if(LastArtwork != s.ArtworkUri||Force) {
lbArtist.Content = s.Artist;
lbTitle.Content = s.Title;
lbAlbum.Content = s.Album;
if(btPlayPause.IsChecked == true)
SetTitle($"▶ {s.Title} - {s.Artist}");
slDuration.Maximum = s.Duration;
lbTime.Content = $"{(s.Duration / 60).ToString("D")}:{(s.Duration % 60).ToString("D2")}";
if(LastArtwork != s.ArtworkUri)
art.Source = new BitmapImage(new Uri(s.ArtworkUri));
LastArtwork = s.ArtworkUri;
}
}
private void _Status(string s) => sbStatus.Text = s;
private void SetStatus(string msg) => Dispatcher.BeginInvoke(new dgtStr(_Status), msg);
private void _Title(string s) => Title = s;
private void SetTitle(string msg) => Dispatcher.BeginInvoke(new dgtStr(_Title), msg);
private void dgtAud() {
long progress = Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.Buffer)
* 100 / Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.End);
if(progress > 75 || Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.Connected) == 0) {
tAudio.Stop();
SetStatus("Playing");
SetTitle($"▶ {lbTitle.Content} - {lbArtist.Content}");
tGfx.Start();
_ = Bass.ChannelSetSync(BuffCh, SyncFlags.MetadataReceived, 0, MetaSync);
_ = Bass.ChannelSetSync(BuffCh, SyncFlags.OggChange, 0, MetaSync);
_ = Bass.ChannelSetSync(BuffCh, SyncFlags.End, 0, EndSync);
_ = Bass.ChannelPlay(BuffCh);
} else
SetStatus($"Buffering... {progress}%");
}
#endregion
#region PlaybackControllers
private void LoadUri(string uri) => Task.Factory.StartNew(() => {
int r;
lock(BufferLock)
@ -77,70 +95,6 @@ namespace WinPlaza {
else
tAudio.Start();
});
private void StatusProc(IntPtr buf, int len, IntPtr usr) {
if(buf != IntPtr.Zero && len == 0 && usr.ToInt32() == BufferReqs)
SetStatus(Marshal.PtrToStringAnsi(buf));
}
private void EndSync(int hdl, int ch, int dat, IntPtr usr) {
SetStatus("Idle..");
SetTitle("Nightwave.Net");
}
private void MetaSync(int hdl, int ch, int dat, IntPtr usr) => Dispatcher.BeginInvoke(new dgtBool(dgtRefresh), true);
private void EvtRefresh(object sender, ElapsedEventArgs e) =>
_ = Dispatcher.BeginInvoke(new dgtBool(dgtRefresh), false);
private delegate void dgtNoParam();
private delegate void dgtBool(bool b);
private delegate void dgtStr(string s);
private async void dgtRefresh(bool Force = false) {
Nightwave.Status s=await plaza.Broadcast(Force);
slDuration.Value = s.CalculatedElapsed;
sbListeners.Text = $"{s.Listeners} listeners";
lbLikeCt.Content = s.Likes;
lbDislikeCt.Content = s.Dislikes;
lbElapsed.Content = $"{(s.CalculatedElapsed / 60).ToString("D")}:{(s.CalculatedElapsed % 60).ToString("D2")}";
if(LastArtwork != s.ArtworkUri) {
lbArtist.Content = s.Artist;
lbTitle.Content = s.Title;
lbAlbum.Content = s.Album;
if(btPlayPause.IsChecked == true)
SetTitle($"▶ {s.Title} - {s.Artist}");
slDuration.Maximum = s.Duration;
lbTime.Content = $"{(s.Duration / 60).ToString("D")}:{(s.Duration % 60).ToString("D2")}";
art.Source = new BitmapImage(new Uri(s.ArtworkUri));
LastArtwork = s.ArtworkUri;
}
}
private void dgtAud() {
long progress = Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.Buffer)
* 100 / Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.End);
if(progress > 75 || Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.Connected) == 0) {
tAudio.Stop();
sbStatus.Text = "Playing";
SetTitle($"▶ {lbTitle.Content} - {lbArtist.Content}");
tGfx.Start();
/*
IntPtr icy = Bass.ChannelGetTags(BuffCh, TagType.ICY);
if(icy == IntPtr.Zero)
icy = Bass.ChannelGetTags(BuffCh, TagType.HTTP);
if(icy != IntPtr.Zero) {
foreach(string tag in Extensions.ExtractMultiStringAnsi(icy)) {
string icymeta = string.Empty;
if(tag.StartsWith("icy-name:"))
icymeta += $"ICY Name: {tag.Substring(9)}";
if(tag.StartsWith("icy-url:"))
icymeta += $"ICY Url: {tag.Substring(8)}";
//IcyMeta = icymeta;
}
}*/
_ = Bass.ChannelSetSync(BuffCh, SyncFlags.MetadataReceived, 0, MetaSync);
_ = Bass.ChannelSetSync(BuffCh, SyncFlags.OggChange, 0, MetaSync);
_ = Bass.ChannelSetSync(BuffCh, SyncFlags.End, 0, EndSync);
_ = Bass.ChannelPlay(BuffCh);
} else
sbStatus.Text = $"Buffering... {progress}%";
}
private void PlazaLoad() => LoadUri("https://radio.plaza.one/ogg");
private void PlazaStop() {
tGfx.Stop();
@ -154,7 +108,24 @@ namespace WinPlaza {
SetTitle("Nightwave.Net");
}
}
#endregion
#region EventHandlers
private void EndSync(int hdl, int ch, int dat, IntPtr usr) {
SetStatus("Idle..");
SetTitle("Nightwave.Net");
}
private void MetaSync(int hdl, int ch, int dat, IntPtr usr) =>
Dispatcher.BeginInvoke(new dgtBool(dgtRefresh), true);
private void StatusProc(IntPtr buf, int len, IntPtr usr) {
if(buf != IntPtr.Zero && len == 0 && usr.ToInt32() == BufferReqs)
SetStatus(Marshal.PtrToStringAnsi(buf));
}
private void EvtRefresh(object sender, ElapsedEventArgs e) =>
_ = Dispatcher.BeginInvoke(new dgtBool(dgtRefresh), false);
private void EvtAudio(object sender, ElapsedEventArgs e) =>
_ = Dispatcher.BeginInvoke(new dgtNoParam(dgtAud));
private void EvtRender(object sender, ElapsedEventArgs e) =>
Dispatcher.BeginInvoke(new dgtNoParam(Leveller));
private void BtPlayPause_Click(object sender, RoutedEventArgs e) {
if(!AudioInit)
return;
@ -163,5 +134,57 @@ namespace WinPlaza {
else
_ = Dispatcher.BeginInvoke(new dgtNoParam(PlazaStop));
}
private void SbMute_Click(object sender, RoutedEventArgs e) {
if(MuteVol<0) {
MuteVol = Bass.GlobalStreamVolume;
Bass.GlobalStreamVolume = 0;
sbMute.Content = "🔇";
} else {
Bass.GlobalStreamVolume = MuteVol;
MuteVol = -1;
sbMute.Content = "🔊";
}
}
private void SbVol_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e) {
sbVol.Value += e.Delta / 25;
e.Handled = true;
}
private void SbVol_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) =>
Bass.GlobalStreamVolume = (int)sbVol.Value * 100;
private void Window_Deactivated(object sender, EventArgs e) {
if(tGfx.Enabled)
tGfx.Interval = 1000.0 / 25.0;
}
private void Window_Activated(object sender, EventArgs e) {
if(tGfx.Enabled)
tGfx.Interval = 1000.0 / 60.0;
}
#endregion
#region GUIMethods
public MainWindow() {
InitializeComponent();
tRefresh = new Timer(300) { AutoReset = true };
tRefresh.Elapsed += EvtRefresh;
tRefresh.Start();
if(!Bass.Init())
sbStatus.Text = "Unable to initialise audio subsystem";
else
AudioInit = true;
if(!AudioInit)
return;
tAudio = new Timer(50);
tAudio.Elapsed += EvtAudio;
tGfx = new Timer(16) { AutoReset = true };
tGfx.Elapsed += EvtRender;
Bass.NetPlaylist = 1;
Bass.NetPreBuffer = 0;
}
~MainWindow() {
if(AudioInit)
_ = Bass.Free();
}
private void _Status(string s) => sbStatus.Text = s;
private void _Title(string s) => Title = s;
#endregion
}
}

View File

@ -1,173 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WinPlaza.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.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() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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("WinPlaza.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon conf_157 {
get {
object obj = ResourceManager.GetObject("conf_157", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mmsys_101 {
get {
object obj = ResourceManager.GetObject("mmsys_101", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mmsys_102 {
get {
object obj = ResourceManager.GetObject("mmsys_102", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mmsys_109 {
get {
object obj = ResourceManager.GetObject("mmsys_109", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mmsys_110 {
get {
object obj = ResourceManager.GetObject("mmsys_110", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mmsys_112 {
get {
object obj = ResourceManager.GetObject("mmsys_112", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mmsys_99 {
get {
object obj = ResourceManager.GetObject("mmsys_99", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon mplayer_10 {
get {
object obj = ResourceManager.GetObject("mplayer_10", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon shell32_40 {
get {
object obj = ResourceManager.GetObject("shell32_40", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon sndvol32_301 {
get {
object obj = ResourceManager.GetObject("sndvol32_301", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon sndvol32_302 {
get {
object obj = ResourceManager.GetObject("sndvol32_302", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
}
}

View File

@ -1,154 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="conf_157" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\conf_157.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mmsys_101" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mmsys_101.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mmsys_102" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mmsys_102.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mmsys_109" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mmsys_109.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mmsys_110" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mmsys_110.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mmsys_112" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mmsys_112.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mmsys_99" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mmsys_99.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mplayer_10" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mplayer_10.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="shell32_40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\shell32_40.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="sndvol32_301" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\sndvol32_301.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="sndvol32_302" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\sndvol32_302.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -31,8 +31,8 @@
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>index.html</WebPage>
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
<ApplicationRevision>2</ApplicationRevision>
<ApplicationVersion>1.1.0.%2a</ApplicationVersion>
<ApplicationRevision>4</ApplicationRevision>
<ApplicationVersion>1.3.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
@ -61,7 +61,7 @@
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Resources\mmsys_109.ico</ApplicationIcon>
<ApplicationIcon>Resources\app.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>56AE8D286B533A344BB2F6F2F383B107F823DF22</ManifestCertificateThumbprint>
@ -73,11 +73,14 @@
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup>
<StartupObject>WinPlaza.App</StartupObject>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="ManagedBass, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ManagedBass.2.0.4\lib\net45\ManagedBass.dll</HintPath>
@ -126,20 +129,12 @@
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="app.manifest" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
@ -157,37 +152,10 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Resources\mmsys_99.ico" />
<EmbeddedResource Include="Resources\app.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mmsys_101.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mmsys_102.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mmsys_109.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mmsys_110.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mmsys_112.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mplayer_10.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\conf_157.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\shell32_40.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\sndvol32_301.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\sndvol32_302.ico" />
<EmbeddedResource Include="Resources\usr.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">

76
WinPlaza/app.manifest Normal file
View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>