TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

Happy Birthdayプログラムで無事に誕生日を迎えました。

皆さん
こんにちは、こんばんは
TomoProgです。

今年の誕生日はコンピュータに一番最初に祝ってもらったので、
その道程を書いておきます。

それでは頑張っていきましょう。

40分前

あ、明日誕生日だ。
完全に忘れていた誕生日をふと思い出す。

しかし、誕生日になる瞬間を祝ってくれる人はいない。

「コンピュータに祝ってもらおう」

寂しい40分が開幕した。

35分前

どうやって祝ってもらおう。

とりあえず、カウントダウンして欲しい。
あと、曲も歌って欲しい。

ということで、

  1. 誕生日までのカウントダウン
  2. 誕生日曲の再生

をしてくれるプログラムを作る。

30分前

コーディング開始。

まずはカウントダウンの部分を実装する。

C#ではDateTime型を使用すれば
簡単に日時を取得することができる。

// 自分の誕生日を指定
DateTime birthday = new DateTime(2017, 3, 6);
// 現在時刻から誕生日までの残りの日時を計算
TimeSpan ts = birthday - DateTime.Now;

計算結果はTimeSpan型として保持する。
TimeSpan型のプロパティを参照すれば残りの日時を確認できる。

// 出力例:1Days 10:20:30.400
Console.WriteLine("{0}Days {1}:{2}:{3}.{4}"
    , ts.Days
    , ts.Hours
    , ts.Minutes
    , ts.Seconds
    , ts.Milliseconds);

これでカウントダウンは完了。

20分前

誕生日曲の再生部分を実装する。

まずは、音声ファイルを手に入れるため、
以下のサイトを利用し、YouTubeから音声ファイルを抽出。
www.onlinevideoconverter.com

ちなみに誕生日曲はコブクロの「Happy Birthday」を選曲。
www.youtube.com

C#にはwavファイルであれば簡単に再生できる
SoundPlayerというクラスが用意されている。

// 再生するwaveファイルを指定
SoundPlayer player = new SoundPlayer("happybirthday.wav");
// 再生する
player.PlaySync();

これでどちらの機能も実装が完了。
コードは全部で40行ほど。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Media;

namespace HappyBirthday
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime birthday = new DateTime(2017, 3, 6);
            SoundPlayer player = new SoundPlayer("../../happybirthday.wav");

            while (true)
            {
                Console.WriteLine("■■ Happy Birthday Countdown ■■");
                TimeSpan ts = birthday - DateTime.Now;
                if (ts.TotalMilliseconds < 0)
                {
                    break;
                }

                Console.WriteLine("{0}Days {1}:{2}:{3}.{4}"
                    , ts.Days
                    , ts.Hours.ToString().PadLeft(2, '0')
                    , ts.Minutes.ToString().PadLeft(2, '0')
                    , ts.Seconds.ToString().PadLeft(2, '0')
                    , ts.Milliseconds);

                Thread.Sleep(30);
                Console.Clear();
            }

            Console.WriteLine("Happy Birthday!!");
            player.PlaySync();
        }
    }
}

5分前

カウントダウンプログラムを起動させる。

とりあえず、カウントダウンはうまくいっている様子。

今年あった出来事を心の中で振り返る。

1分前

テストしていないため、音声鳴らなかったらどうしようと不安になる。

5秒前

ラスト5秒!
f:id:TomoProg:20170306010351p:plain

Happy BirthDay!!

誕生日!
f:id:TomoProg:20170306010248p:plain
この時点でコブクロの「Happy Birthday」も流れる。

まとめ

  • 1歳老けた。
  • 寂しさが込み上げてきた。

こんな感じで40分でHappy Birthdayプログラムを作ってみました。

うん。
誰か祝ってください。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter