Exemplo n.º 1
0
            internal void Process()
            {
                _mohServer._mohFileSource.BeginPrepareSource(
                    MediaSourceOpenMode.Buffered,
                    ar =>
                {
                    WmaFileSource fileSource = ar.AsyncState as WmaFileSource;

                    try
                    {
                        fileSource.EndPrepareSource(ar);

                        _mohServer._mohPlayer.Start();
                        lock (_mohServer._syncRoot)
                        {
                            _mohServer.UpdateState(MusicOnHoldServerState.Started);
                        }
                        this.SetAsCompleted(null, false);
                    }
                    catch (OperationFailureException ex)
                    {
                        _mohServer.BeginShutDown(
                            sar =>
                        {
                            AcdMusicOnHoldServer mohServer = sar.AsyncState as AcdMusicOnHoldServer;

                            mohServer.EndShutDown(sar);
                        },
                            _mohServer);

                        this.SetAsCompleted(ex, false);
                    }
                },
                    _mohServer._mohFileSource);
            }
Exemplo n.º 2
0
            private void StartMusicOnHoldPlayback(object sender, AudioVideoFlowConfigurationRequestedEventArgs args)
            {
                _mohServer._mohPlayer.AttachFlow(args.Flow);
                _mohServer._mohPlayer.StateChanged += this.OnPlayerStateChanged;

                _mohServer._mohFileSource.BeginPrepareSource(
                    MediaSourceOpenMode.Buffered,
                    ar =>
                {
                    WmaFileSource fileSource = ar.AsyncState as WmaFileSource;

                    try
                    {
                        fileSource.EndPrepareSource(ar);

                        _mohServer._mohPlayer.Start();
                    }
                    catch (OperationFailureException ex)
                    {
                        _mohServer.BeginShutDown(
                            sar =>
                        {
                            AcdMusicOnHoldServer mohServer = sar.AsyncState as AcdMusicOnHoldServer;

                            mohServer.EndShutDown(sar);
                        },
                            _mohServer);

                        this.SetAsCompleted(ex, false);
                    }
                },
                    _mohServer._mohFileSource);
            }
Exemplo n.º 3
0
        public void AttachAndStartPlayer(AudioVideoFlow audioVideoFlow, bool loop)
        {
            // Create a player and attach it to a AudioVideoFlow
            Player player = new Player();

            player.AttachFlow(audioVideoFlow);

            //Subscribe to the player's state changed event, including the play completed event.
            player.StateChanged += delegate(object sender, PlayerStateChangedEventArgs args)
            {
                if (loop && args.TransitionReason == PlayerStateTransitionReason.PlayCompleted)
                {
                    // Restart player as soon as it completes playing the file.
                    ((Player)sender).Start();
                }
            };

            //Load the file into memory
            WmaFileSource source = new WmaFileSource("music.wma");

            source.BeginPrepareSource(MediaSourceOpenMode.Buffered, source_PrepareSourceCompleted, source);
            _waitForPrepareSourceCompleted.WaitOne();

            player.SetSource(source);

            //Start playing the file
            player.Start();
        }
Exemplo n.º 4
0
        private void source_PrepareSourceCompleted(IAsyncResult result)
        {
            WmaFileSource source = (WmaFileSource)result.AsyncState;

            source.EndPrepareSource(result);

            _waitForPrepareSourceCompleted.Set();
        }
Exemplo n.º 5
0
 internal AcdMusicOnHoldServer(AcdAgentMatchMaker matchMaker, string mohFilePath, AcdLogger logger)
 {
     _matchMaker    = matchMaker;
     _mohFilePath   = mohFilePath;
     _logger        = logger;
     _mohFileSource = new WmaFileSource(mohFilePath);
     _mohPlayer     = new Player();
     _mohPlayer.SetMode(PlayerMode.Manual);
     _mohPlayer.SetSource(_mohFileSource);
     this.UpdateState(MusicOnHoldServerState.Created);
 }
 private void CreatePlayer()
 {
     var source = new WmaFileSource("music.wma");
     source.EndPrepareSource(source.BeginPrepareSource(MediaSourceOpenMode.Buffered, null, null));
     _player = new Player();
     _player.SetSource(source);
     
     _player.SetMode(PlayerMode.Manual);
     _player.StateChanged += player_StateChanged;
     _player.Start();
 }
Exemplo n.º 7
0
        private void CreatePlayer()
        {
            var source = new WmaFileSource("music.wma");

            source.EndPrepareSource(source.BeginPrepareSource(MediaSourceOpenMode.Buffered, null, null));
            _player = new Player();
            _player.SetSource(source);

            _player.SetMode(PlayerMode.Manual);
            _player.StateChanged += player_StateChanged;
            _player.Start();
        }
Exemplo n.º 8
0
        void Flow_StateChanged(object sender, MediaFlowStateChangedEventArgs e)
        {
            Log("Flow_StateChanged PreviousState=" + e.PreviousState + " State=" + e.State);

            AudioVideoFlow avFlow = (AudioVideoFlow)sender;

            if (avFlow.State == MediaFlowState.Active)
            {
                Player player = new Player();
                player.StateChanged += new EventHandler <PlayerStateChangedEventArgs>(player_StateChanged);
                player.AttachFlow(avFlow);

                WmaFileSource src = new WmaFileSource(_FileName);
                src.BeginPrepareSource(MediaSourceOpenMode.Buffered,
                                       ar =>
                {
                    try
                    {
                        src.EndPrepareSource(ar);

                        player.SetSource(src);

                        // For some reason, PlayerMode.Automatic does not loop audio
                        player.SetMode(PlayerMode.Manual);
                        player.Start();

                        Log("Playing \"" + _FileName + "\"");
                    }
                    catch (Exception ex)
                    {
                        Log(ex.ToString());
                    }
                },
                                       null);
            }
            else if (avFlow.State == MediaFlowState.Terminated)
            {
                if (avFlow.Player != null)
                {
                    if (avFlow.Player.Source != null)
                    {
                        avFlow.Player.Source.Close();
                    }

                    avFlow.Player.DetachFlow(avFlow);
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Plays a WMA file using the specified Audio Video Flow.
        /// </summary>
        /// <param name="flowToPlayUsing">
        /// The flow to use when playing the file.
        /// </param>
        /// <param name="fileToPlay">
        /// The path to the wma file to be played.
        /// </param>
        private void PlayWmaFileAudio(AudioVideoFlow flowToPlayUsing, string fileToPlay)
        {
            // Set the media source that the player will use.
            WmaFileSource wmaSource = new WmaFileSource(fileToPlay);

            MediaSourceAndAvFlowContainer sourceAndFlowContainer = new MediaSourceAndAvFlowContainer(
                wmaSource, flowToPlayUsing);

            try
            {
                wmaSource.BeginPrepareSource(MediaSourceOpenMode.Unbuffered,
                                             WmaSourcePreparationCompleted,
                                             sourceAndFlowContainer);
            }
            catch (ArgumentOutOfRangeException argOOREx)
            {
                // TODO (Left to the reader): Write actual handling code for the
                // occurrence.
                Console.WriteLine("An ArgumentOutOfRangeException occured when preparing the media source: "
                                  + "{0}", argOOREx.ToString());
            }
        }
Exemplo n.º 10
0
        protected override void StartupCore()
        {
            try
            {
                m_mohFileSource = new WmaFileSource(m_mohFilePath);
                m_mohPlayer     = new Player();
                m_mohPlayer.SetMode(PlayerMode.Manual);
                m_mohPlayer.SetSource(m_mohFileSource);

                m_mohPlayer.StateChanged += this.OnPlayerStateChanged;

                m_mohFileSource.BeginPrepareSource(
                    MediaSourceOpenMode.Buffered,
                    ar =>
                {
                    try
                    {
                        m_mohFileSource.EndPrepareSource(ar);
                        m_mohPlayer.Start();
                        this.CompleteStartup(null);
                    }
                    catch (InvalidOperationException ioe)
                    {
                        this.CompleteStartup(ioe);
                    }
                    catch (OperationFailureException rte)
                    {
                        this.CompleteStartup(rte);
                    }
                },
                    null);
            }
            catch (InvalidOperationException ioe)
            {
                this.CompleteStartup(ioe);
            }
        }
Exemplo n.º 11
0
        void Flow_StateChanged(object sender, MediaFlowStateChangedEventArgs e)
        {
            Log("Flow_StateChanged PreviousState=" + e.PreviousState + " State=" + e.State);

            AudioVideoFlow avFlow = (AudioVideoFlow)sender;

            if (avFlow.State == MediaFlowState.Active)
            {
                Player player = new Player();
                player.StateChanged += new EventHandler<PlayerStateChangedEventArgs>(player_StateChanged);
                player.AttachFlow(avFlow);

                WmaFileSource src = new WmaFileSource(_FileName);
                src.BeginPrepareSource(MediaSourceOpenMode.Buffered,
                    ar=>
                    {
                        try
                        {
                            src.EndPrepareSource(ar);

                            player.SetSource(src);

                            // For some reason, PlayerMode.Automatic does not loop audio
                            player.SetMode(PlayerMode.Manual);
                            player.Start();

                            Log("Playing \"" + _FileName + "\"");
                        }
                        catch (Exception ex)
                        {
                            Log(ex.ToString());
                        }
                    },
                    null);
            }
            else if (avFlow.State == MediaFlowState.Terminated)
            {
                if (avFlow.Player != null)
                {
                    if (avFlow.Player.Source != null)
                    {
                        avFlow.Player.Source.Close();
                    }

                    avFlow.Player.DetachFlow(avFlow);
                }
            }
        }
Exemplo n.º 12
0
        public void Run()
        {
            // Create AudioVideoFlow
            AudioVideoFlowHelper audioVideoFlowHelper = new AudioVideoFlowHelper();

            _audioVideoFlow = audioVideoFlowHelper.CreateAudioVideoFlow(
                null,
                audioVideoFlow_StateChanged);

            // Create a player and attach it to a AudioVideoFlow
            Player player = new Player();

            player.AttachFlow(_audioVideoFlow);

            //Subscribe to the player's state changed event, including the play completed event.
            player.StateChanged += new EventHandler <PlayerStateChangedEventArgs>(player_StateChanged);

            //Load the file into memory
            WmaFileSource source = new WmaFileSource("music.wma");

            source.BeginPrepareSource(MediaSourceOpenMode.Buffered, source_PrepareSourceCompleted, source);
            _waitForPrepareSourceCompleted.WaitOne();

            //in automatic mode, player will start playing only when the flow is in the active state.
            //in manual mode, player will start playing immediately.
            player.SetMode(PlayerMode.Automatic);

            player.SetSource(source);

            //Start playing the file
            player.Start();
            Console.WriteLine("Start playing for 10 seconds");

            //Allow the player to play for 10 seconds by waiting for 10 seconds
            Thread.Sleep(10000);

            //Pauses player
            player.Pause();
            Console.WriteLine("Pausing for 5 seconds");

            //Wait 5 seconds
            Thread.Sleep(5000);

            //Change playback speed to half of the regular speed
            player.PlaybackSpeed = PlaybackSpeed.Half;
            Console.WriteLine("Playback speed change to half of the regular speed");

            //Resume playing from where we paused the player at previously
            player.Start();
            Console.WriteLine("Resume playing for 10 seconds");

            Thread.Sleep(10000);

            //Stop the player and reset position to the beginning
            player.Stop();
            Console.WriteLine("Stopping the player");

            // Source must be closed after it is no longer needed, otherwise memory will not be released even after garbage collection.
            source.Close();

            //player must be detached from the flow, otherwise if the player is rooted, it will keep the flow in memory.
            player.DetachFlow(_audioVideoFlow);

            // Shutdown the platform
            ShutdownPlatform();

            //Wait for shutdown to occur.
            _waitForShutdownEventCompleted.WaitOne();
        }