Target | Branch | Status | Recommended Nuget packages version |
---|---|---|---|
Current Release | master |
The AudioAnalyzer UWP extension DLL contains a MF component and companion XAML controls that can provide realtime audio analysis information for visualization and other purposes. The library contains prebuilt controls implementing VU meters, a spectrum analyzer as well as a control that has a custom draw capability. This project is a continuation of the work here and originally here.
To play with a demo app the shows the controls in action, grab this app from the Windows Store.
You can now analyze media files without playing them.
AudioSourceReader class has been added that enables reading audio frames from media file, decompress them if needed and pass on to AudioAnalyzer or use them on their own without the need to play media file. Both video and audio files are supported as long as appropriate codecs are installed.
(click image to play video)
To learn more browse the documentation
Download and install the AudioAnalyzer nuget package. Note this will also add a reference to Win2D to your project.
Install-Package UWPAudioVisualizer
for convenient use add namespace statement to your C# code as:
using AudioVisualizer;
add namespace statement and built in controls to your XAML code as:
<Page
x:Class="App4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:visualizer="using:AudioVisualizer"
mc:Ignorable="d">
<Grid>
<StackPanel>
<visualizer:DiscreteVUBar />
<visualizer:CustomVisualizer />
</StackPanel>
</Grid>
</Page>
First you need to create the analyzer object, that implements IVisualizationSource interface which is basis to retrieve audio data.
To create visualization source you need to create PlaybackSource, you can create this from MediaPlayer or from AudioNode or MediaPlayer. With AudioNode the source will be available immediately however for MediaPlayer it will be created only when MediaPlayer will open source and start playing. When opening a new file a new source will be created - this means that if you use PlaybackSource with MediaPlayer you will need to monitor the SourceChanged event and assign the new source to the controls you are using.
partial class VisualizationPage : Page
{
MediaPlayer _player;
AudioVisualizer.PlaybackSource _source;
public VisualizationPage()
{
_player = new MediaPlayer();
_source = new PlaybackSource.CreateFromMediaPlayer(_player);
_source.SourceChanged += Playback_SourceChanged;
}
private void Playback_SourceChanged(object sender, IVisualizationSource source)
{
vuMeter.Source = source;
spectrumDisplay.Source = source;
playPositionDisplay.Source = source;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
vuMeter.Source = _source.VisualizationSource;
spectrumDisplay.Source = _source.VisualizationSource;
playPositionDisplay.Source = _source.VisualizationSource;
}
}
Once you have a properly initialized IVisualizationSource you get the visualization data by calling GetData(). This method will return VisualizationDataFrame for the current audio being played or null if the current state of stream is stopped or if the analyzer is catching up processing for example due to seek operation. All controls have a source property, once you assign the source to the controls, they will pull and display data automatically.
Please see AudioSourceReader for the sample.