Exemplo n.º 1
0
 public WasapiCS.CursorLocation GetCursorLocation(WasapiCS.PcmDataUsageType t)
 {
     return(mWasapi.GetPlayCursorPosition(t));
 }
Exemplo n.º 2
0
        void OnBackgroundPlay_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (mBackgroundPlay.CancellationPending)
            {
                // アプリ終了。
                return;
            }

            // 再生中PCMデータ(または一時停止再開時再生予定PCMデータ等)の再生位置情報を画面に表示する。
            WasapiCS.PcmDataUsageType usageType = WasapiCS.PcmDataUsageType.NowPlaying;
            int pcmDataId = mPlaybackController.GetPcmDataId(WasapiCS.PcmDataUsageType.NowPlaying);

            if (pcmDataId < 0)
            {
                pcmDataId = mPlaybackController.GetPcmDataId(WasapiCS.PcmDataUsageType.PauseResumeToPlay);
                usageType = WasapiCS.PcmDataUsageType.PauseResumeToPlay;
            }
            if (pcmDataId < 0)
            {
                pcmDataId = mPlaybackController.GetPcmDataId(WasapiCS.PcmDataUsageType.SpliceNext);
                usageType = WasapiCS.PcmDataUsageType.SpliceNext;
            }

            string playingTimeString = string.Empty;

            if (pcmDataId < 0)
            {
                playingTimeString = PlaybackTime.PLAYING_TIME_UNKNOWN;
            }
            else
            {
                if (mDataGridPlayList.SelectedIndex != pcmDataId)
                {
                    mDataGridPlayList.SelectedIndex = pcmDataId;
                    mDataGridPlayList.ScrollIntoView(pcmDataId);
                }

                var playPos = mPlaybackController.GetCursorLocation(usageType);
                var stat    = mPlaybackController.GetSessionStatus();

                long now = DateTime.Now.Ticks;
                if (now - mLastSliderPositionUpdateTime > SLIDER_UPDATE_TICKS)
                {
                    // スライダー位置の更新。0.5秒に1回
                    mSlider1.Maximum = playPos.TotalFrameNum;
                    if (!mSliderSliding || playPos.TotalFrameNum <= mSlider1.Value)
                    {
                        mSlider1.Value = playPos.PosFrame;
                    }
                    mLastSliderPositionUpdateTime = now;
                }

                playingTimeString = PlaybackTime.CreateDisplayString(
                    (int)(playPos.PosFrame / stat.DeviceSampleRate),
                    (int)(playPos.TotalFrameNum / stat.DeviceSampleRate));
            }

            // 再生時間表示の再描画をできるだけ抑制する。負荷が減る効果がある
            if (playingTimeString != string.Empty && 0 != string.Compare((string)mLabelPlayingTime.Content, playingTimeString))
            {
                mLabelPlayingTime.Content = playingTimeString;
            }
            else
            {
                //System.Console.WriteLine("time disp update skipped");
            }
        }
Exemplo n.º 3
0
 public int GetPcmDataId(WasapiCS.PcmDataUsageType t)
 {
     return(mWasapi.GetPcmDataId(t));
 }