やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

MediaPlayer でファイルオープン時のノイズ発生回避方法について

WPF でWAVE ファイルなどのメディアファイルを再生するとき、System.Windows.Media.MediaPlayer を使用していたのですが、複数ファイルを纏めてオープンしたときに何故か楽曲が少しだけ再生される現象が発生しました。
ここではその回避方法についてまとめています。

動作環境

実現したいこと

単純に複数の楽曲ファイルを予めロードすることで再生時のオーバーヘッドを軽減したい。
SoundPlayer クラス (System.Media) も試したのですが、「楽曲再生中に停止できない」「音量の調節機能が無い」ため、手っ取り早くMediaPlayer で実現することとなりました。

続きを読む

フォルダ内にあるMedia の再生時間を取得する(C#/WindowsAPICodePack)

特定のフォルダ内にあるメディア(MP3とかAVIとか)ファイルの再生時間を取得する方法のメモ

動作環境

WindowsAPICodePack は、以下の方法でインストールします。 www.nuget.org

以下、サンプルです。

var files = Directory.GetFiles(@"C:\work\");
foreach (var file in files)
{
    using (var shell = ShellObject.FromParsingName(file))
    {
        var property = shell.Properties.System.Media.Duration;
        if (property?.ValueAsObject != null)
        {
            var time = (ulong)property.ValueAsObject;
            Console.WriteLine($"{Path.GetFileName(file)} 再生時間[{TimeSpan.FromTicks((long)time)}]");
        }
        else
        {
            Console.WriteLine($"{Path.GetFileName(file)} 該当プロパティなし。");
        }
    }
}

ShellObject.FromParsingName でファイルの情報を取得し、Properties.System.Media.Duration で該当プロパティの値を取得します。 注意しなければならないのは、ファイルに再生時間(Duration)プロパティが無い場合は、Properties.System.Media.Duration がnull になります。 また、ファイルが破損していたりして再生時間が記録されていない場合は、Properties.System.Media.Duration.ValueAsObject がnull になります。

JR回数券と定期券の併用方法について

たまに使用する電車の乗車回数券ですが、定期券との併用方法をよく忘れるのでメモ

この記事で紹介する内容はJR西日本大阪環状線JR神戸線)でのみ使用可能であることを確認しています。
全ての線区・区間が同じ仕組みかどうかはわかりませんのでご注意ください。
※この記事は2017年7月時点のものです。

回数券はJRの券売機で購入することができる乗車券です。
詳細については以下のページを確認してください。

faq.jr-odekake.net

通常、定期券は以下の様に複数の駅間で使用していると思います。
f:id:iyemon018:20170720165411p:plain


ここで例えばB駅で乗り換えてD駅まで定期的に移動することになった場合、回数券を使用すると少し交通費を節約することができます。
f:id:iyemon018:20170720165646p:plain

イメージとしてはこんなところでしょうか。
この②の区間の回数券を購入し、通常使用している①区間の定期券と合わせて使用することが可能です。
ただし、行き(上記A駅からD駅へのルート)と帰り(上記D駅からA駅へのルート)で手順が異なるので注意してください。

■行き

1.A駅で定期券を使って乗車する。
2.D駅まで乗車する。
3.D駅の精算機でカード挿入口に"定期券"→"回数券"の順番に挿入する。
  この時、定期券にチャージ済みであってもこの方法を使用することはできます。
  ただし、支払い不要のメッセージが表示されるので素早く回数券を投入してください。
4.出場証が発行されるので通常の切符と同じように使用する。

■帰り

1.D駅で回数券を使用して乗車する。
2.A駅まで乗車する。
3.A駅の精算機でカード挿入口に"回数券"→"定期券"の順番に挿入する。
4.出場性が発行されるので通常の切符と同じように使用する。

乗車するときと生産する際の手順が異なります。
特に乗車する際は手順を間違えると回数券で支払いすることができなくなるので注意してください。

Jenkins でxUnit + OpenCover を使ったカバレッジ集計・レポート表示方法について

少し前にJenkins でxUnit を使ったユニットテストの実行方法を試しました。
iyemon018.hatenablog.com

今回は、Jenkins でxUnit でユニットテストを実行し、OpenCover を使ってカバレッジを集計・プロジェクトページに表示する方法についてメモします。

続きを読む

TFS でTF14061 が表示されたときの対処方法

TFS 使っているときにTF14061 なるエラーメッセージが表示されたときの事象と対処方法メモです。

現象

Visual Studio でTFS と接続しているときに、チーム エクスプローラー上に"予期しないファイルの終わりを検出しました。"というメッセージが表示される。
この状態でチェックインしても同じメッセージが表示されてしまい、チェックインすることができない。
ソース管理エクスプローラーを表示しようとするとマップが解除されてしまっていて表示されない。
このときに"TF14061" メッセージが表示される。

原因

TFS のキャッシュにゴミデータが含まれてしまっているため。
異なるバージョンのTFS に接続してOS を再起動したときに発生したので、TFS バージョンの混在が原因かも?

対処方法

一度Visual Studio を終了して"%USERPROFILE%\AppData\Local\Microsoft\Team Foundation\6.0" にある"Cache" フォルダを削除する。
Visual Studio を再起動するとチェックイン出来るようになる。