示例#1
0
        /*
         * public void AudioPlayer_ResetPlayStreamPosition()
         * {
         *  m_PlayStream.Position = m_StreamRiffHeaderEndPos;
         *  m_PlayStream.Seek(m_StreamRiffHeaderEndPos, SeekOrigin.Begin);
         * }*/

        #region Event / Callbacks

        private void OnAudioPlaybackFinished(object sender, AudioPlayer.AudioPlaybackFinishEventArgs e)
        {
            if (!TheDispatcher.CheckAccess())
            {
                TheDispatcher.BeginInvoke(DispatcherPriority.Normal,
                                          (Action <object, AudioPlayer.AudioPlaybackFinishEventArgs>)OnAudioPlaybackFinished_,
                                          sender, e);
                return;
            }
#if DEBUG
            Debugger.Break();
#endif
        }
示例#2
0
        private void OnAudioPlaybackFinished_(object sender, AudioPlayer.AudioPlaybackFinishEventArgs e)
        {
            bool gotoNext = State.Audio.EndOffsetOfPlayStream == State.Audio.DataLength &&
                            (IsAutoPlay || m_PlayAutoAdvance) &&
                            !IsSelectionSet &&
                            m_UrakawaSession.DocumentProject != null;

            //Logger.Log("AudioPaneViewModel.OnAudioPlaybackFinished", Category.Debug, Priority.Medium);

            if (State.Audio.HasContent)
            {
                SetPlayHeadTimeBypassAutoPlay(State.Audio.EndOffsetOfPlayStream);

                //updateWaveFormPlayHead(time);
            }

            if (gotoNext)
            {
                OnAudioPlaybackFinished_RefreshStatus();

                Tuple <TreeNode, TreeNode> treeNodeSelection = m_UrakawaSession.GetTreeNodeSelection();

                TreeNode nextNode = treeNodeSelection.Item1.GetNextSiblingWithManagedAudio();

next:
                if (nextNode != null)
                {
                    if (Settings.Default.Audio_EnableSkippability && m_UrakawaSession.isTreeNodeSkippable(nextNode))
                    {
                        nextNode = nextNode.GetNextSiblingWithManagedAudio();
                        goto next;
                    }

                    if (IsWaveFormLoading)
                    {
                        if (View != null)
                        {
                            View.CancelWaveFormLoad(true);
                        }
                    }

                    //Logger.Log("-- PublishEvent [TreeNodeSelectedEvent] AudioPaneViewModel.OnAudioPlaybackFinished", Category.Debug, Priority.Medium);

                    //EventAggregator.GetEvent<TreeNodeSelectedEvent>().Publish(nextNode);
                    m_UrakawaSession.PerformTreeNodeSelection(nextNode);
                }
                else
                {
                    m_PlayAutoAdvance = false;

                    if (IsMonitoringAlways)
                    {
                        CommandStartMonitor.Execute();
                    }
                }
            }
            else
            {
                m_PlayAutoAdvance = false;

                if (m_RecordAfterPlayOverwriteSelection > 0) // && State.Selection.SelectionBeginBytePosition == m_RecordAfterPlayOverwriteSelection)
                {
                    SetRecordAfterPlayOverwriteSelection(-1);
                    m_RecordAfterPlayOverwriteSelection = 1;  // hack
                    CommandStartRecord.Execute();
                    m_RecordAfterPlayOverwriteSelection = -1; // hack
                }
                else
                {
                    OnAudioPlaybackFinished_RefreshStatus();

                    if (IsMonitoringAlways)
                    {
                        CommandStartMonitor.Execute();
                    }
                }
            }
        }