読者です 読者をやめる 読者になる 読者になる

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 (@TomoHelloxxx) | Twitter