public WasapiCS.CursorLocation GetCursorLocation(WasapiCS.PcmDataUsageType t) { return(mWasapi.GetPlayCursorPosition(t)); }
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"); } }
public int GetPcmDataId(WasapiCS.PcmDataUsageType t) { return(mWasapi.GetPcmDataId(t)); }