added some visualisations and layout adjustments

This commit is contained in:
Maff 2019-10-29 01:03:05 +00:00
parent 693a78e5fd
commit 29caddd0c1
5 changed files with 89 additions and 44 deletions

View File

@ -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>

View File

@ -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);

View File

@ -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")]

View File

@ -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>

View File

@ -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() {