PowerPoint (VBA) による駅名標&行き先表示器風の時計の製作
2022/4/1, 7M4MON
概要
最近、液晶表示の行き先表示器(発車標)が増えてきましたよね。
ということで、PowerPoint (VBA) とツイ廃液晶を使用して駅名標と行き先表示器を再現しました。
ツイ廃液晶について
ツイ廃液晶は、480×1920ドットの1:4のアスペクト比を持った液晶です。
サイズは8.8インチで、アリエクでケース付きが84ドル、タッチパネル付きが115ドル程度で購入できます。
駅名標を作る
調べるとパワーポイントで駅名標を作ってる人がいて、駅名標の進行に合わせて発車メロディが鳴ったら面白いのではないかと考えました。
発車メロディの入手性を調べたところ、「JR東日本駅発車メロディー・特急急車内メロディー 音源集 山手線全駅+α」と
「東京メトロ有楽町線 駅発車メロディー & 駅ホーム自動放送」は容易に入手できたので、
JR東日本 山手線と東京メトロ 有楽町線で行くことにしました。
ちょいと作ってみたところ、想像していたよりも簡単にそれっぽいものが出来ました。
ファイルはgithubに公開しています。駅や路線追加、レイアウト改善などの Fork / PullRequest は大歓迎です。
発車標を作る
最近、首都圏で増えてきた、液晶表示の行き先表示器(発車標)もパワポで再現できそうです。
ホームに設置されている横長タイプのアスペクト比は 1対4 のようなので、ツイ廃液晶にジャストフィットします。
行き先表示器の複雑なアニメーションはパワポの標準機能では難しそうなので、VBAを使います。
固定の表示では面白くないので、現在時刻を表示して、時計として使えるようにします。
実装した動作は以下のとおりです。
- 東京メトロの行き先表示器風
- 先発の時刻は現在時刻を表示、次発は1分後
- 偶数分は荻窪 (M01) 行き、奇数分は新宿 (M08) 行き
- 毎00秒に発車状態になり走行音が流れる。(スライド3)
- しばらくすると近接状態になり「電車がまいります」が点滅表示され、近接案内が流れる(スライド1)
- 近接案内が終了すると、到着状態となり、到着案内→発車メロディ→発車案内が流れる。(スライド2)
- 偶数分は新宿3丁目駅、奇数分は赤坂見附駅の案内と発車メロディとした。
- 音源は「東京メトロ丸ノ内線 駅発車メロディー & 駅ホーム自動放送」を適宜編集して使用
- 日本語、英語の駅名表示切り替えは3秒毎
- 「電車がまいります/Train Coming」の点滅と前駅の点滅表示は1秒毎
詳しい動作は、動画をアップしましたのでご覧ください。
プログラムの説明
- スライドは近接状態(スライド1)、到着状態(スライド2)、発車状態(スライド3)の3枚です。
- スライドを開始すると OnSlideShowPageChange が呼ばれ、タイマーをスタートさせて初期化を行います。
- タイマーはWindowsAPIのSetTimerで、1000ms毎に TimerProc を呼び出します。
- TimerProcは現在の時刻を取得し、表示の更新とスライドの遷移を行います。
- 1秒毎に「電車がまいります」と次列車の現在位置の点滅表示を更新し、3秒毎に行き先の日本語英語表示を切り替えます。
- 音源のファイル名と長さはあらかじめ定数で定義していて、60秒のうち音源の長さ分の時間をスライド割り当てています。
切り替わり時刻になったら SlideShowWindows(1).View.GotoSlide でスライドを切り替えます。
- スライドが切り替わったら OnSlideShowPageChange が呼ばれ、音源を Windows API の PlaySound 関数で再生します。
- 偶数分は荻窪 (M01) 行きで新宿3丁目駅の音源、奇数分は新宿 (M08) 行きで赤坂見附駅の音源を再生します。
その他の説明
- フォントについて:日本語は 新ゴ、数字は Frutiger、駅ナンバリングは Futura を使用しています。
- パワーポイント内部で英数と日本語でフォントを保持しているらしいので、VBAでフォントの切り替えはしていません
- 現地調査をしたところ、レイアウトが変更になったらしく、色々違いがありました。
枠がない、前駅アイコンが丸になる、中国・韓国語表示、大きい漢字→ふりがなつき英語になっているなどなど・・・
- ファイルはgithubで公開しています。改善の Pull request は歓迎します。
- タイマー動作について:while文によるタイマ割り込みは終了時にパワポが固まってしまいました。Application.OnTimeによるタイマー処理は動きませんでした。
- SlideShowWindows(1).View.Player(ActivePresentation.Slides(n).Shapes("ONGEN").Id).Play による音源再生はなぜか動きませんでした。
- mciSendString による音源再生は停止にファイル名が必要で、非同期でないっぽいので使いませんでした。
- 音源はマクロの上部で定数で定義していますが、以下のファイル名です。
新宿三丁目A線【1番線】_荻窪行き_1.wav、赤坂見附A線【2番線】_新宿行き_1.wav、新宿三丁目A線【1番線】_荻窪行き_2.wav、赤坂見附A線【2番線】_新宿行き_2.wav、走行音_丸ノ内支線.wav
スライドショーと同じフォルダに入れる必要があります。
- 音源は「東京メトロ丸ノ内線 駅発車メロディー & 駅ホーム自動放送」から取り込んで適宜、分割結合をしています。
- OnSlideShowPageChange() を確実に発火させるために、スライドショーの表示範囲外にボタンを設置しています。
おまけ
JR東日本の山手線と総武線各駅停車の発車標も作ってみました。
力尽きたので、レイアウトのみです。