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"
|
<Application x:Class="WinPlaza.App"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:WinPlaza"
|
xmlns:local="clr-namespace:WinPlaza"
|
||||||
StartupUri="MainWindow.xaml">
|
StartupUri="MainWindow.xaml">
|
||||||
<Application.Resources>
|
<Application.Resources>
|
||||||
|
</Application.Resources>
|
||||||
</Application.Resources>
|
|
||||||
</Application>
|
</Application>
|
||||||
|
|
|
@ -5,60 +5,63 @@
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:WinPlaza"
|
xmlns:local="clr-namespace:WinPlaza"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="Nightwave.Net" Height="200" Width="480" Background="#FFF0F0F0" ResizeMode="CanMinimize">
|
Title="Nightwave.Net" Height="200" Width="480" Background="#FFF0F0F0" ResizeMode="CanMinimize" Deactivated="Window_Deactivated" Activated="Window_Activated" UseLayoutRounding="True">
|
||||||
<Grid>
|
<Grid ClipToBounds="True">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition/>
|
<RowDefinition/>
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="140*"/>
|
<ColumnDefinition Width="140*"/>
|
||||||
<ColumnDefinition Width="155*"/>
|
<ColumnDefinition Width="155*"/>
|
||||||
<ColumnDefinition Width="155*"/>
|
<ColumnDefinition Width="155*"/>
|
||||||
<ColumnDefinition Width="10*"/>
|
<ColumnDefinition Width="10*"/>
|
||||||
<ColumnDefinition Width="0*"/>
|
<ColumnDefinition Width="0*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Image x:Name="art" Margin="0,0,0,0" Grid.Column="0" />
|
<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="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="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"/>
|
<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"/>
|
<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="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="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="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="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="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"/>
|
<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">
|
<DockPanel Grid.ColumnSpan="5" Margin="0,0,0,0" Grid.Row="1">
|
||||||
<StatusBar Margin="0,0,0,0" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" BorderBrush="#FFDFDFDF" BorderThickness="1">
|
<StatusBar x:Name="statusBar" Margin="0,0,0,-2" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" BorderBrush="#FFDFDFDF" BorderThickness="1" Height="28" VerticalContentAlignment="Bottom">
|
||||||
<StatusBarItem>
|
<StatusBarItem HorizontalAlignment="Left">
|
||||||
<TextBlock x:Name="sbListeners" Text="420 listeners"/>
|
<StackPanel Orientation="Horizontal">
|
||||||
</StatusBarItem>
|
<TextBlock x:Name="sbListeners" Text="420 listeners"/>
|
||||||
<Separator/>
|
<Separator Width="1" Margin="4,2"/>
|
||||||
<StatusBarItem>
|
<ToggleButton x:Name="btPlayPause" Content="⏯" VerticalContentAlignment="Center" Checked="BtPlayPause_Click" Unchecked="BtPlayPause_Click" Margin="0,0,4,0" Height="{Binding Width, RelativeSource={RelativeSource Self}}"/>
|
||||||
<ToggleButton x:Name="btPlayPause" Content="⏯" VerticalContentAlignment="Center" Checked="BtPlayPause_Click" Unchecked="BtPlayPause_Click"/>
|
<TextBlock x:Name="sbStatus" Text="Idle.."/>
|
||||||
</StatusBarItem>
|
</StackPanel>
|
||||||
<StatusBarItem>
|
</StatusBarItem>
|
||||||
<TextBlock x:Name="sbStatus" Text="Idle.."/>
|
<StatusBarItem HorizontalAlignment="Right">
|
||||||
</StatusBarItem>
|
<StackPanel Orientation="Horizontal">
|
||||||
<StatusBarItem HorizontalAlignment="Right" HorizontalContentAlignment="Right">
|
<TextBlock x:Name="sbListeningTimers" Text="00:00 (00:00)" Visibility="Hidden"/>
|
||||||
<TextBlock x:Name="sbListeningTimers" Text="00:00 (00:00)" Visibility="Hidden"/>
|
<Button x:Name="sbMute" Content="🔊" Click="SbMute_Click"/>
|
||||||
</StatusBarItem>
|
<Separator Width="6" Background="{x:Null}" Foreground="{x:Null}"/>
|
||||||
</StatusBar>
|
<Slider x:Name="sbVol" Maximum="100" Minimum="0" Value="100" SmallChange="1" LargeChange="5" Width="80" ValueChanged="SbVol_ValueChanged" MouseWheel="SbVol_MouseWheel"/>
|
||||||
</DockPanel>
|
</StackPanel>
|
||||||
<Canvas x:Name="chLeftCvs" Margin="10,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" RenderTransformOrigin="0.5,0.5" Grid.Column="1">
|
</StatusBarItem>
|
||||||
<Canvas.RenderTransform>
|
</StatusBar>
|
||||||
<TransformGroup>
|
</DockPanel>
|
||||||
<ScaleTransform ScaleY="1" ScaleX="-1"/>
|
<Canvas x:Name="chLeftCvs" Margin="10,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" RenderTransformOrigin="0.5,0.5" Grid.Column="1">
|
||||||
<SkewTransform AngleY="0" AngleX="0"/>
|
<Canvas.RenderTransform>
|
||||||
<RotateTransform Angle="0"/>
|
<TransformGroup>
|
||||||
<TranslateTransform/>
|
<ScaleTransform ScaleY="1" ScaleX="-1"/>
|
||||||
</TransformGroup>
|
<SkewTransform AngleY="0" AngleX="0"/>
|
||||||
</Canvas.RenderTransform>
|
<RotateTransform Angle="0"/>
|
||||||
<Rectangle x:Name="chLeft" Width="125" Height="10" HorizontalAlignment="Left" Fill="#FF003C49"/>
|
<TranslateTransform/>
|
||||||
</Canvas>
|
</TransformGroup>
|
||||||
<Canvas x:Name="chRightCvs" Margin="0,0,0,2" Height="10" VerticalAlignment="Bottom" Background="#FFDDDDDD" Grid.Column="2">
|
</Canvas.RenderTransform>
|
||||||
<Rectangle x:Name="chRight" Width="125" Height="10" Fill="#FF003C49"/>
|
<Rectangle x:Name="chLeft" Width="125" Height="10" HorizontalAlignment="Left" Fill="#FF003C49"/>
|
||||||
</Canvas>
|
</Canvas>
|
||||||
</Grid>
|
<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>
|
</Window>
|
||||||
|
|
|
@ -9,54 +9,72 @@ using ManagedBass;
|
||||||
|
|
||||||
namespace WinPlaza {
|
namespace WinPlaza {
|
||||||
public partial class MainWindow : Window {
|
public partial class MainWindow : Window {
|
||||||
|
#region StateVars
|
||||||
static readonly object BufferLock=new object();
|
static readonly object BufferLock=new object();
|
||||||
private int BuffCh;
|
private int BuffCh;
|
||||||
private int BufferReqs;
|
private int BufferReqs;
|
||||||
string LastArtwork="";
|
private int MuteVol=-1;
|
||||||
Nightwave plaza=new Nightwave();
|
private int GfxWidthStep=-1;
|
||||||
Timer tRefresh;
|
private string LastArtwork="";
|
||||||
Timer tAudio;
|
private Nightwave plaza=new Nightwave();
|
||||||
Timer tGfx;
|
private Timer tRefresh;
|
||||||
bool AudioInit=false;
|
private Timer tAudio;
|
||||||
public MainWindow() {
|
private Timer tGfx;
|
||||||
InitializeComponent();
|
private bool AudioInit=false;
|
||||||
tRefresh = new Timer(300) { AutoReset = true };
|
#endregion
|
||||||
tRefresh.Elapsed += EvtRefresh;
|
#region Delegates
|
||||||
tRefresh.Start();
|
private delegate void dgtNoParam();
|
||||||
if(!Bass.Init())
|
private delegate void dgtBool(bool b);
|
||||||
sbStatus.Text = "Unable to initialise audio subsystem";
|
private delegate void dgtStr(string s);
|
||||||
else
|
#endregion
|
||||||
AudioInit = true;
|
#region CrossThreadCalls
|
||||||
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 void Leveller() {
|
private void Leveller() {
|
||||||
int pxT=(32768/(int)chLeftCvs.ActualWidth);
|
if(GfxWidthStep<0)
|
||||||
int left=Bass.ChannelGetLevelLeft(BuffCh);
|
GfxWidthStep = 32768 / (int)chLeftCvs.ActualWidth;
|
||||||
int right=Bass.ChannelGetLevelRight(BuffCh);
|
chLeft.Width = Bass.ChannelGetLevelLeft(BuffCh) / GfxWidthStep;
|
||||||
chLeft.Width = (left / pxT);
|
chRight.Width = Bass.ChannelGetLevelRight(BuffCh) / GfxWidthStep;
|
||||||
chRight.Width = (right / pxT);
|
|
||||||
}
|
}
|
||||||
private void EvtAudio(object sender, ElapsedEventArgs e) =>
|
private void SetStatus(string msg) =>
|
||||||
_ = Dispatcher.BeginInvoke(new dgtNoParam(dgtAud));
|
Dispatcher.BeginInvoke(new dgtStr(_Status), msg);
|
||||||
|
private void SetTitle(string msg) =>
|
||||||
~MainWindow() {
|
Dispatcher.BeginInvoke(new dgtStr(_Title), msg);
|
||||||
if(AudioInit)
|
private async void dgtRefresh(bool Force = false) {
|
||||||
_ = Bass.Free();
|
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 dgtAud() {
|
||||||
private void SetStatus(string msg) => Dispatcher.BeginInvoke(new dgtStr(_Status), msg);
|
long progress = Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.Buffer)
|
||||||
private void _Title(string s) => Title = s;
|
* 100 / Bass.StreamGetFilePosition(BuffCh, FileStreamPosition.End);
|
||||||
private void SetTitle(string msg) => Dispatcher.BeginInvoke(new dgtStr(_Title), msg);
|
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(() => {
|
private void LoadUri(string uri) => Task.Factory.StartNew(() => {
|
||||||
int r;
|
int r;
|
||||||
lock(BufferLock)
|
lock(BufferLock)
|
||||||
|
@ -77,70 +95,6 @@ namespace WinPlaza {
|
||||||
else
|
else
|
||||||
tAudio.Start();
|
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 PlazaLoad() => LoadUri("https://radio.plaza.one/ogg");
|
||||||
private void PlazaStop() {
|
private void PlazaStop() {
|
||||||
tGfx.Stop();
|
tGfx.Stop();
|
||||||
|
@ -154,7 +108,24 @@ namespace WinPlaza {
|
||||||
SetTitle("Nightwave.Net");
|
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) {
|
private void BtPlayPause_Click(object sender, RoutedEventArgs e) {
|
||||||
if(!AudioInit)
|
if(!AudioInit)
|
||||||
return;
|
return;
|
||||||
|
@ -163,5 +134,57 @@ namespace WinPlaza {
|
||||||
else
|
else
|
||||||
_ = Dispatcher.BeginInvoke(new dgtNoParam(PlazaStop));
|
_ = 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>
|
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||||
<WebPage>index.html</WebPage>
|
<WebPage>index.html</WebPage>
|
||||||
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
|
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
|
||||||
<ApplicationRevision>2</ApplicationRevision>
|
<ApplicationRevision>4</ApplicationRevision>
|
||||||
<ApplicationVersion>1.1.0.%2a</ApplicationVersion>
|
<ApplicationVersion>1.3.0.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationIcon>Resources\mmsys_109.ico</ApplicationIcon>
|
<ApplicationIcon>Resources\app.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ManifestCertificateThumbprint>56AE8D286B533A344BB2F6F2F383B107F823DF22</ManifestCertificateThumbprint>
|
<ManifestCertificateThumbprint>56AE8D286B533A344BB2F6F2F383B107F823DF22</ManifestCertificateThumbprint>
|
||||||
|
@ -73,11 +73,14 @@
|
||||||
<GenerateManifests>true</GenerateManifests>
|
<GenerateManifests>true</GenerateManifests>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SignManifests>true</SignManifests>
|
<SignManifests>false</SignManifests>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<StartupObject>WinPlaza.App</StartupObject>
|
<StartupObject>WinPlaza.App</StartupObject>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ManagedBass, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ManagedBass, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ManagedBass.2.0.4\lib\net45\ManagedBass.dll</HintPath>
|
<HintPath>..\packages\ManagedBass.2.0.4\lib\net45\ManagedBass.dll</HintPath>
|
||||||
|
@ -126,20 +129,12 @@
|
||||||
<Compile Include="Properties\AssemblyInfo.cs">
|
<Compile Include="Properties\AssemblyInfo.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\Settings.Designer.cs">
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<None Include="app.manifest" />
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
@ -157,37 +152,10 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Resources\mmsys_99.ico" />
|
<EmbeddedResource Include="Resources\app.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Resources\mmsys_101.ico" />
|
<EmbeddedResource Include="Resources\usr.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" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
|
<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>
|