Skip to content

Commit

Permalink
Added status text with buffered duration.
Browse files Browse the repository at this point in the history
  • Loading branch information
LAGonauta committed Jul 2, 2018
1 parent 1756526 commit a376fd3
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 38 deletions.
81 changes: 45 additions & 36 deletions ASIORecAndPlay/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,41 +7,50 @@
mc:Ignorable="d"
Title="ASIO Rec and Play" Height="300" Width="300" MinWidth="300" MinHeight="300"
Closing="Window_Closing">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<GroupBox HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,0,0,5" Header="Channel configuration">
<ComboBox x:Name="comboChannelConfig">
<ComboBoxItem Content="2"/>
<ComboBoxItem Content="4" IsEnabled="False"/>
<ComboBoxItem Content="5.1" IsSelected="True"/>
<ComboBoxItem Content="7.1"/>
</ComboBox>
</GroupBox>
<Button x:Name="buttonBegin" Content="Begin" HorizontalAlignment="Center" VerticalAlignment="Top" Width="75" Click="OnButtonBeginClick" Margin="0,0,0,4"/>
<Grid HorizontalAlignment="Center" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GroupBox Header="Recording device" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="0">
<StackPanel Grid.Column="0" Margin="0,0,2,0">
<ComboBox x:Name="comboAsioRecordDevices" HorizontalAlignment="Center" VerticalAlignment="Center" Width="120" Margin="0,0,0,5"/>
<Button x:Name="buttonRecCP" Content="Control Panel" Click="OnButtonCPClick" IsEnabled="False" Margin="0,0,0,5"/>
<GroupBox Header="Available Channels">
<StackPanel x:Name="stackRecChannels"/>
</GroupBox>
</StackPanel>
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Name="status_text" />
</StatusBarItem>
</StatusBar>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<GroupBox HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,0,0,5" Header="Channel configuration">
<ComboBox x:Name="comboChannelConfig">
<ComboBoxItem Content="2"/>
<ComboBoxItem Content="4" IsEnabled="False"/>
<ComboBoxItem Content="5.1" IsSelected="True"/>
<ComboBoxItem Content="7.1"/>
</ComboBox>
</GroupBox>
<GroupBox Header="Playback device" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="1">
<StackPanel Margin="2,0,0,0">
<ComboBox x:Name="comboAsioPlayDevices" HorizontalAlignment="Center" VerticalAlignment="Center" Width="120" Margin="0,0,0,5"/>
<Button x:Name="buttonPlayCP" Content="Control Panel" Click="OnButtonCPClick" IsEnabled="False" Margin="0,0,0,5"/>
<GroupBox Header="Available Channels">
<StackPanel x:Name="stackPlayChannels"/>
</GroupBox>
</StackPanel>
</GroupBox>
</Grid>
</StackPanel>
</ScrollViewer>
<Button x:Name="buttonBegin" Content="Begin" HorizontalAlignment="Center" VerticalAlignment="Top" Width="75" Click="OnButtonBeginClick" Margin="0,0,0,4"/>
<Grid HorizontalAlignment="Center" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GroupBox Header="Recording device" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="0">
<StackPanel Grid.Column="0" Margin="0,0,2,0">
<ComboBox x:Name="comboAsioRecordDevices" HorizontalAlignment="Center" VerticalAlignment="Center" Width="120" Margin="0,0,0,5"/>
<Button x:Name="buttonRecCP" Content="Control Panel" Click="OnButtonCPClick" IsEnabled="False" Margin="0,0,0,5"/>
<GroupBox Header="Available Channels">
<StackPanel x:Name="stackRecChannels"/>
</GroupBox>
</StackPanel>
</GroupBox>
<GroupBox Header="Playback device" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="1">
<StackPanel Margin="2,0,0,0">
<ComboBox x:Name="comboAsioPlayDevices" HorizontalAlignment="Center" VerticalAlignment="Center" Width="120" Margin="0,0,0,5"/>
<Button x:Name="buttonPlayCP" Content="Control Panel" Click="OnButtonCPClick" IsEnabled="False" Margin="0,0,0,5"/>
<GroupBox Header="Available Channels">
<StackPanel x:Name="stackPlayChannels"/>
</GroupBox>
</StackPanel>
</GroupBox>
</Grid>
</StackPanel>
</ScrollViewer>
</DockPanel>


</Window>
28 changes: 26 additions & 2 deletions ASIORecAndPlay/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
using NAudio.Wave;
using System.Diagnostics;
using System.Windows.Controls;
using System.Threading;

namespace ASIORecAndPlay
{
Expand All @@ -39,6 +40,20 @@ public partial class MainWindow : Window

System.Windows.Forms.NotifyIcon tray_icon;

public delegate void UpdateStatusTextCallback(string message);

private void DispatchStatusText(object buffer)
{
string message = "Buffered time: " + ((BufferedWaveProvider)buffer).BufferedDuration.TotalMilliseconds.ToString() + " ms.";
status_text.Dispatcher.Invoke(new UpdateStatusTextCallback(this.UpdateText),
new object[] { message });
}

private void UpdateText(string message)
{
status_text.Text = message;
}

public MainWindow()
{
InitializeComponent();
Expand Down Expand Up @@ -107,6 +122,7 @@ private void OnButtonCPClick(object sender, RoutedEventArgs e)
}
}

Timer status_text_timer;
private void OnButtonBeginClick(object sender, RoutedEventArgs e)
{
if (!running)
Expand Down Expand Up @@ -151,7 +167,7 @@ private void OnButtonBeginClick(object sender, RoutedEventArgs e)
channels = 2;
}
comboChannelConfig.IsEnabled = false;

var format = NAudio.Wave.WaveFormat.CreateIeeeFloatWaveFormat(48000, channels);
buffer = new NAudio.Wave.BufferedWaveProvider(format);

Expand All @@ -164,6 +180,8 @@ private void OnButtonBeginClick(object sender, RoutedEventArgs e)
asio_play.Play();

buttonBegin.Content = "Stop";

status_text_timer = new Timer(new TimerCallback(this.DispatchStatusText), buffer, 0, 1000);
}
else
{
Expand All @@ -174,6 +192,9 @@ private void OnButtonBeginClick(object sender, RoutedEventArgs e)
}
else
{
status_text_timer.Dispose();
status_text.Dispatcher.Invoke(new UpdateStatusTextCallback(this.UpdateText),
new object[] { "Stopped." });
Stop();
}
}
Expand All @@ -182,6 +203,10 @@ private void Stop()
{
if (running)
{
status_text_timer.Dispose();
status_text.Dispatcher.Invoke(new UpdateStatusTextCallback(this.UpdateText),
new object[] { "Stopped." });

asio_play.Stop();
asio_play.Dispose();
asio_play = null;
Expand Down Expand Up @@ -259,7 +284,6 @@ void OnAudioAvailable(object sender, AsioAudioAvailableEventArgs e)
}

buffer.AddSamples(byte_samples, 0, e.SamplesPerBuffer * channels * sizeof(float));
//Trace.WriteLine(buffer.BufferedDuration);
}
}
}

0 comments on commit a376fd3

Please sign in to comment.