Пример #1
0
        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;
        }