added volume control and mute, fixed per-monitor DPI awareness to actually work (why is this not a default???)
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
@ -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">
|
||||
|
|
|
@ -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>
|