悠々としたTECH日記

「TECH日記」と言いながらそんなに面白いこと書いてない。備忘録的な感じ。 もちろん、宣伝とかもするけど、ブログを基本的にTwitterの延長としか考えてないので、その程度に。あと、作文の練習も兼ねて。

「自動で卓上ベルの音を発表会で鳴らしてくれる機」を頑張って作っているので、学習したことをまとめる。

つくったもの

Dojoで時間制限付きの発表会をしてたけど、あまり人手が足りないので、なんなら自動で鳴らそうか、と。 下のツイートの動画がそれ。デザイン系は全然やってない...(Help Me...)

機能

  • スタートしてから設定した時間になったら「チンッ」とならす。
  • 音楽ファイルは自分で設定できる
  • タイマーだけでなく、単体で好きなタイミングで鳴らせるようにもする。

ただこれだけ。

使ったツールや環境

んで、わかったこと・嵌ったことなど。

Form のスレッドに直書きで Thread.Sleep() を実行すると、そのままFormもSleep状態になる。

  • 解決策: 普通に別Threadに切り出す。でも、わざわざ新しいThreadクラスを作るほどバカではないので...
// PlaySound(int i) はそのまんま音鳴らす。
Task task_play_sound_auto = Task.Run(() =>
    {
        Thread.Sleep(time_1);
        PlaySound(1);

        Thread.Sleep(time_2 - time_1);
        PlaySound(2);

        Thread.Sleep(time_3 - time_2);
        PlaySound(3);
        });
    }

Task.Runを使う。これでOK。

音楽鳴らす方法がわからん。

  • WMP Lib を使って頑張った。
//オーディオファイルを指定
mediaPlayer.URL = 'FilePath';
//再生
mediaPlayer.controls.play();

ユーザーの設定を保存したい

  • プロジェクト > [プロジェクト名] のプロパティ >設定 を開く。すると、下のような画面が。 f:id:yu-san-19:20171214210243p:plain

名前に、プロパティ名、種類に型を入力、スコープはユーザーにしたらOK。 すると、

Properties.Settings.Default.「プロパティ名」 = "値";
Properties.Settings.Default.Save(); // これがないと保存されない

で各種パラメーターの保存ができる。

これはユーザーの設定以外にも使えそうな感じ...?

最後に

一番時間がかかったのが、Task.Run()と、音を鳴らすやつ。

別のスレッドにリソースが占有されちゃって、音が鳴らなくなったり、みたいなことがあって、結構難しかった。 (正直そこまで詰まるとは思わんかった...)

でもやっぱ、C#のほうがまだわかる感じ。(今頑張ってRailsやってるので...)

まあ、これでいろいろと理解できたのでめでたしめでたし。

一応、使ったツールやライブラリのライセンス確認して、問題なかったらGithubに載っけるので、間違いあったら容赦なく嬲り殺してくださって結構です^^


追記 Github にようやく載せれた。

github.com