「自動で卓上ベルの音を発表会で鳴らしてくれる機」を頑張って作っているので、学習したことをまとめる。
つくったもの
Dojoで時間制限付きの発表会をしてたけど、あまり人手が足りないので、なんなら自動で鳴らそうか、と。 下のツイートの動画がそれ。デザイン系は全然やってない...(Help Me...)
なんとかGitをもとに戻して、ここまで完成。 土曜日までに間に合った... けど、Bluetoothのスピーカの調子が悪い.. PC側が悪いんかな... pic.twitter.com/xkGs0gWVvw
— ゆ~さん 💻 ☯️ 🇯🇵 (@yu_san_19) 2017年12月14日
機能
- スタートしてから設定した時間になったら「チンッ」とならす。
- 音楽ファイルは自分で設定できる
- タイマーだけでなく、単体で好きなタイミングで鳴らせるようにもする。
ただこれだけ。
使ったツールや環境
- C#
- Visual Studio 2017
- Win10
んで、わかったこと・嵌ったことなど。
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();
ユーザーの設定を保存したい
プロジェクト > [プロジェクト名] のプロパティ >設定
を開く。すると、下のような画面が。
名前に、プロパティ名、種類に型を入力、スコープはユーザーにしたらOK。 すると、
Properties.Settings.Default.「プロパティ名」 = "値"; Properties.Settings.Default.Save(); // これがないと保存されない
で各種パラメーターの保存ができる。
これはユーザーの設定以外にも使えそうな感じ...?
最後に
一番時間がかかったのが、Task.Run()
と、音を鳴らすやつ。
別のスレッドにリソースが占有されちゃって、音が鳴らなくなったり、みたいなことがあって、結構難しかった。 (正直そこまで詰まるとは思わんかった...)
でもやっぱ、C#のほうがまだわかる感じ。(今頑張ってRailsやってるので...)
まあ、これでいろいろと理解できたのでめでたしめでたし。
一応、使ったツールやライブラリのライセンス確認して、問題なかったらGithubに載っけるので、間違いあったら容赦なく嬲り殺してくださって結構です^^
追記 Github にようやく載せれた。