Microsoft .NET Framework 3.5 に含まれる Windows Presentation Foundation (WPF) を使うと,ちょっとしたアプリケーションを簡単に作ることができます。
WPF にはあらかじめ多数のコンポーネントが用意されていて,その中に「MediaElement」という Windows Media Player のようなものがあります。
「MediaElement」を利用すると,URI を指定するだけでアプリケーション内で動画を再生することが出来るのですが,早送りを行おうとしてハマりました。
MSDN の説明を見ると SpeedRatio プロパティで再生スピードを制御するようで,"2.0" を設定すると倍速になりますが,その後で "1.0" を設定しても再生スピードが元に戻りません。
いろいろと試した結果,MediaElement の Clock プロパティを使って希望する制御を行えました。
URI を指定して再生する場合は,以下の様に MediaClock オブジェクトを生成して Clock プロパティに設定し,再生を開始します。
void PlayVideo(Uri uri) { mediaElement.Clock = new MediaTimeline(uri).CreateClock(); mediaElement.Clock.Controller.Begin(); }
再生の一時停止や再開などは,以下のメソッドを使用します。
// 一時停止 mediaElement.Clock.Controller.Pause(); // 再生再開 mediaElement.Clock.Controller.Resume(); // 停止 mediaElement.Clock.Controller.Stop();
問題となった再生スピードの設定は次のようにして変更でき,なんどプロパティ値を変更しても正しく反映されました。
mediaElement.Clock.Controller.SpeedRatio = 3.0;
WPF,まだまだ分からないことだらけですが,使いこなせたら何かと便利そうです。