added some visualisations and layout adjustments
This commit is contained in:
parent
693a78e5fd
commit
29caddd0c1
|
@ -6,34 +6,59 @@
|
|||
xmlns:local="clr-namespace:WinPlaza"
|
||||
mc:Ignorable="d"
|
||||
Title="Nightwave.Net" Height="200" Width="480" Background="#FFF0F0F0" ResizeMode="CanMinimize">
|
||||
<Grid>
|
||||
<Image x:Name="art" HorizontalAlignment="Left" Margin="10,10,0,36" Width="140" />
|
||||
<Label x:Name="lbTitle" Content="リサフランク420 / 現代のコンピュ" HorizontalAlignment="Left" Margin="155,10,0,0" VerticalAlignment="Top" FontSize="14" FontWeight="Bold"/>
|
||||
<Label x:Name="lbArtist" Content="MACプラス Macintosh Plus" HorizontalAlignment="Left" Margin="155,36,0,0" VerticalAlignment="Top"/>
|
||||
<Label x:Name="lbAlbum" Content="フローラルの専門店 Floral Shoppe" HorizontalAlignment="Left" Margin="155,62,0,0" VerticalAlignment="Top" FontStyle="Italic" FontSize="11"/>
|
||||
<Slider x:Name="slDuration" Margin="155,93,10,0" VerticalAlignment="Top" IsEnabled="False"/>
|
||||
<Label x:Name="lbElapsed" Content="00:00" HorizontalAlignment="Left" Margin="155,116,0,0" VerticalAlignment="Top" FontStyle="Italic" FontSize="9"/>
|
||||
<Label x:Name="lbTime" Content="00:00" Margin="0,116,10.6,0" VerticalAlignment="Top" HorizontalAlignment="Right" FontStyle="Italic" FontSize="9"/>
|
||||
<DockPanel>
|
||||
<StatusBar Margin="0,0,0,0" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" BorderBrush="#FFDFDFDF" BorderThickness="1">
|
||||
<StatusBarItem>
|
||||
<TextBlock Name="sbListeners" Text="420 listeners"/>
|
||||
</StatusBarItem>
|
||||
<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 Name="btPlayPause" Content="⏯" VerticalContentAlignment="Center" Checked="BtPlayPause_Click" Unchecked="BtPlayPause_Click"/>
|
||||
<ToggleButton x:Name="btPlayPause" Content="⏯" VerticalContentAlignment="Center" Checked="BtPlayPause_Click" Unchecked="BtPlayPause_Click"/>
|
||||
</StatusBarItem>
|
||||
<StatusBarItem>
|
||||
<TextBlock Name="sbStatus" Text="Idle.."/>
|
||||
<TextBlock x:Name="sbStatus" Text="Idle.."/>
|
||||
</StatusBarItem>
|
||||
<StatusBarItem HorizontalAlignment="Right" HorizontalContentAlignment="Right">
|
||||
<TextBlock Name="sbListeningTimers" Text="00:00 (00:00)" Visibility="Hidden"/>
|
||||
<TextBlock x:Name="sbListeningTimers" Text="00:00 (00:00)" Visibility="Hidden"/>
|
||||
</StatusBarItem>
|
||||
</StatusBar>
|
||||
</DockPanel>
|
||||
<Label x:Name="lbLike" Content="❤" HorizontalAlignment="Right" Margin="0,36,10.667,0" VerticalAlignment="Top" FontSize="10"/>
|
||||
<Label x:Name="lbLikeCt" Content="0" HorizontalAlignment="Right" Margin="0,35,2.667,0" VerticalAlignment="Top"/>
|
||||
<Label x:Name="lbDislike" Content="❌" HorizontalAlignment="Right" Margin="0,60,10.667,0" VerticalAlignment="Top" FontSize="10"/>
|
||||
<Label x:Name="lbDislikeCt" Content="0" HorizontalAlignment="Right" Margin="0,59,2.667,0" VerticalAlignment="Top"/>
|
||||
</Grid>
|
||||
</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>
|
||||
|
|
|
@ -16,11 +16,12 @@ namespace WinPlaza {
|
|||
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.Elapsed += EvtRefresh;
|
||||
tRefresh.Start();
|
||||
if(!Bass.Init())
|
||||
sbStatus.Text = "Unable to initialise audio subsystem";
|
||||
|
@ -29,12 +30,23 @@ namespace WinPlaza {
|
|||
if(!AudioInit)
|
||||
return;
|
||||
tAudio = new Timer(50);
|
||||
tAudio.Elapsed += evtAud;
|
||||
tAudio.Elapsed += EvtAudio;
|
||||
tGfx = new Timer(18) { AutoReset = true };
|
||||
tGfx.Elapsed += EvtRender;
|
||||
Bass.NetPlaylist = 1;
|
||||
Bass.NetPreBuffer = 0;
|
||||
|
||||
}
|
||||
|
||||
private void evtAud(object sender, ElapsedEventArgs e) =>
|
||||
private void EvtRender(object sender, ElapsedEventArgs e) => Dispatcher.BeginInvoke(new dgtNoParam(Leveller));
|
||||
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);
|
||||
}
|
||||
private void EvtAudio(object sender, ElapsedEventArgs e) =>
|
||||
_ = Dispatcher.BeginInvoke(new dgtNoParam(dgtAud));
|
||||
|
||||
~MainWindow() {
|
||||
|
@ -74,7 +86,7 @@ namespace WinPlaza {
|
|||
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) =>
|
||||
private void EvtRefresh(object sender, ElapsedEventArgs e) =>
|
||||
_ = Dispatcher.BeginInvoke(new dgtBool(dgtRefresh), false);
|
||||
private delegate void dgtNoParam();
|
||||
private delegate void dgtBool(bool b);
|
||||
|
@ -106,6 +118,7 @@ namespace WinPlaza {
|
|||
|
||||
sbStatus.Text = "Playing";
|
||||
SetTitle($"▶ {lbTitle.Content} - {lbArtist.Content}");
|
||||
tGfx.Start();
|
||||
/*
|
||||
IntPtr icy = Bass.ChannelGetTags(BuffCh, TagType.ICY);
|
||||
if(icy == IntPtr.Zero)
|
||||
|
@ -130,6 +143,7 @@ namespace WinPlaza {
|
|||
|
||||
private void PlazaLoad() => LoadUri("https://radio.plaza.one/ogg");
|
||||
private void PlazaStop() {
|
||||
tGfx.Stop();
|
||||
lock(BufferLock) {
|
||||
_ = Bass.StreamFree(BufferReqs);
|
||||
_ = Bass.StreamFree(BuffCh);
|
||||
|
|
|
@ -51,7 +51,7 @@ using System.Windows;
|
|||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: AssemblyVersion("1.1.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
||||
[assembly: NeutralResourcesLanguage("en-GB")]
|
||||
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||
<WebPage>index.html</WebPage>
|
||||
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
|
||||
<ApplicationRevision>4</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<ApplicationRevision>2</ApplicationRevision>
|
||||
<ApplicationVersion>1.1.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||
|
@ -57,6 +57,8 @@
|
|||
</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\mmsys_109.ico</ApplicationIcon>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using System;
|
||||
using System.Net.Http;
|
||||
using Newtonsoft.Json;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace libplaza {
|
||||
internal class PlazaApi {
|
||||
|
@ -59,21 +59,23 @@ namespace libplaza {
|
|||
_hcl.DefaultRequestHeaders.Accept.Add(
|
||||
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
|
||||
}
|
||||
public async Task<Status> Broadcast(bool Force=false) {
|
||||
public async Task<Status> Broadcast(bool Force = false) {
|
||||
_bc.CalculatedElapsed = (int)(DateTimeOffset.Now.ToUnixTimeSeconds() - _bc.ServerTimeOffset - _bc.Since) + _bc.Elapsed;
|
||||
if(!Force && tsLastRefresh+MinRefreshTime >= DateTimeOffset.Now.ToUnixTimeSeconds() && _bc.CalculatedElapsed < _bc.Duration)
|
||||
return _bc;
|
||||
try {
|
||||
Status _=await GetNightwaveAsync();
|
||||
Broadcasting = BroadcastStatus.OnAir;
|
||||
_bc = _;
|
||||
} catch(PlazaInMaintenanceException) {
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
} catch(PlazaUnavailableException) {
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
}
|
||||
tsLastRefresh = DateTimeOffset.Now.ToUnixTimeSeconds();
|
||||
if(!Force && tsLastRefresh + MinRefreshTime >= DateTimeOffset.Now.ToUnixTimeSeconds() && _bc.CalculatedElapsed < _bc.Duration)
|
||||
return _bc;
|
||||
try {
|
||||
Status _=await GetNightwaveAsync();
|
||||
Broadcasting = BroadcastStatus.OnAir;
|
||||
_bc = _;
|
||||
} catch(PlazaInMaintenanceException) {
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
} catch(PlazaUnavailableException) {
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
} catch(Exception) { //TODO make this more reliable?
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
}
|
||||
tsLastRefresh = DateTimeOffset.Now.ToUnixTimeSeconds();
|
||||
return _bc;
|
||||
}
|
||||
|
||||
public async void Update() {
|
||||
|
@ -85,6 +87,8 @@ namespace libplaza {
|
|||
Broadcasting = BroadcastStatus.OffAir;
|
||||
} catch(PlazaUnavailableException) {
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
} catch(Exception) { //TODO make this more reliable?
|
||||
Broadcasting = BroadcastStatus.OffAir;
|
||||
}
|
||||
}
|
||||
public async Task<Status> GetNightwaveAsync() {
|
||||
|
|
Loading…
Reference in New Issue