public async Task PlaybackSource_MediaPlayer() { var testFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///TestContent/test_signal.mp3")); var player = new MediaPlayer(); var playerSource = PlaybackSource.CreateFromMediaPlayer(player); List <IVisualizationSource> sources = new List <IVisualizationSource>(); ManualResetEventSlim ev = new ManualResetEventSlim(); playerSource.SourceChanged += new TypedEventHandler <object, IVisualizationSource>( (sender, source) => { sources.Add(source); ev.Set(); } ); player.Source = MediaSource.CreateFromStorageFile(testFile); player.Play(); if (Task.Run(() => { ev.Wait(); }).Wait(1000)) { Assert.IsTrue(sources.Count == 1); Assert.IsNotNull(sources[0]); Assert.IsInstanceOfType(sources[0], typeof(AudioVisualizer.MediaAnalyzer)); } else { Assert.Fail("Timeout when waiting for the source creation"); } }
public MediaPlayerPage() { this.InitializeComponent(); _player = new MediaPlayer(); _player.MediaOpened += Player_MediaOpened; _player.PlaybackSession.PositionChanged += Player_PositionChanged; _playbackSource = PlaybackSource.CreateFromMediaPlayer(_player); _playbackSource.SourceChanged += PlaybackSource_Changed; _source = (SourceConverter)Resources["source"]; _analogSource = (SourceConverter)Resources["analogSource"]; _spectrumSource = (SourceConverter)Resources["spectrumSource"]; _source.RmsRiseTime = TimeSpan.FromMilliseconds(50); _source.RmsFallTime = TimeSpan.FromMilliseconds(50); _source.PeakRiseTime = TimeSpan.FromMilliseconds(50); _source.PeakFallTime = TimeSpan.FromMilliseconds(1000); _analogSource.RmsRiseTime = TimeSpan.FromMilliseconds(500); _analogSource.RmsFallTime = TimeSpan.FromMilliseconds(500); _analogSource.AnalyzerTypes = AnalyzerType.RMS; _spectrumSource.SpectrumRiseTime = TimeSpan.FromMilliseconds(100); _spectrumSource.SpectrumFallTime = TimeSpan.FromMilliseconds(200); _spectrumSource.FrequencyCount = 50; _spectrumSource.MinFrequency = 20.0f; _spectrumSource.MaxFrequency = 20000.0f; _spectrumSource.FrequencyScale = ScaleType.Logarithmic; _spectrumSource.AnalyzerTypes = AnalyzerType.Spectrum; // Create bar steps with 1db steps from -86db to +6 const int fromDb = -86; const int toDb = 6; MeterBarLevel[] levels = new MeterBarLevel[toDb - fromDb]; Color fromColor = Colors.Yellow; Color toColor = Colors.Red; float redStep = (float)toColor.R - (float)fromColor.R; float greenStep = (float)toColor.G - (float)fromColor.G; float blueStep = (float)toColor.B - (float)fromColor.B; for (int i = 0; i < levels.Count(); i++) { float ratio = (float)i / (float)levels.Count(); levels[i].Color = Color.FromArgb(255, (byte)((redStep * ratio) + fromColor.R), (byte)((greenStep * ratio) + fromColor.G), (byte)((blueStep * ratio) + fromColor.B)); levels[i].Level = i + fromDb; } bar0.Levels = levels; bar1.Levels = levels; barspectrum.ElementFactory = this; barspectrum.ElementShadowBlurRadius = 5; barspectrum.ElementShadowOffset = new Vector3(2, 2, -10); barspectrum.ElementShadowColor = Colors.LightGreen; }