BVE ATSプラグインでのこだわり再現

2020年7月20日湖西線開業の日、都路各停氏からbve京都・湖西・北陸線リニューアル版と摂津ライナー氏より681系・223系1000代公開されました。おめでとうございます!

当方も微力ながらプラグインで協力しましたのでこだわって再現したものを動画で紹介しようと思います。下部に解説あります。

ATSプラグインによる再現とは?

BVEの車両データではATSプラグインというものがあります。これは本来は保安装置を再現することを目標としたものですがこれをうまく使うことで、任意のタイミングで運転台にランプを表示させたり、音を再生したりすることができます。

具体的には、ATSプラグインにbveからノッチを操作したり、ドアが閉まったりする情報が送られてきます。また毎フレーム実行される関数(Elapse)では速度や電流値、ブレーキシリンダー圧力などが送られてきます。これらの情報を判断し処理することによって、ブレーキを非常にしたり、音声を再生することができます。本来は保安装置のベル音や速度現示(ATS)を再現するものですが、色々な使い方ができるわけです。

1.ブレーキ表示器のリアルな再現

JR西日本のブレーキ操作を見ていると運転士がブレーキハンドルを動かした際、一瞬だけブレーキ表示器が全点灯するような感覚を持った方は多いと思います。

これはハンチングというもので、ブレーキハンドル機構の内部接点の都合により、一瞬だけその段数とは異なる司令が送られている場合があります。

特定の段移動の時にランダムで1フレームだけ別の段をプラグインで出力することにより、再現しています。

2.WN音の再現

223系1000代といえばやっぱりこの音!だと思います。モーターから車軸へ動力を伝える際に車軸の振動をダイレクトにモーターに伝えないために間に継手と呼ばれる装置を介して、動力を伝達します。

継手装置の1つであるWN継手は惰性走行の際に極低周波の騒音が発生するため、それをXAudio2をプラグインから利用して再現しています。

左の音声は阪急7000系に実装しているWN音です。

極低周波の振動音のみの音源を作成しておき、それをATSプラグインから直接wavファイルを読み込みます。それをXAudio2で管理するようにします。

音程は90キロでピッチが1になるよう比例させ、振幅(音量)は電流値によって変化させるようにします。電流値が60[A]になると0で再生を停止させ、0[A]になるとwavファイルの音量のまま再生させるように制御します。

0~60[A]の間はgainを電流値に比例させるように増減させることによって、惰性時から加速減速に移り変わる際にフェードイン・フェードアウトし、突然再生される=違和感の無いように再生するよう制御しています。

3.ブレーキ圧力上昇音の再現

電車はブレーキに空気の圧力を利用し、物理的に制輪子を動かす空気ブレーキが広く用いられています。ブレーキ圧力を制御する際に空気を出し入れする弁がブレーキ制御装置のに配置されています。この弁を圧縮空気が流れることによって、様々な音が発生します。223系ではブレーキ制御装置がクモハでは運転台寄りにあり、かつ音も大きいことから前面展望している際にも聴くことができます。

これはXAudioを用いず、プラグインのSound出力で鳴らしています。

しくみはあらかじめatsプラグイン内にブレーキ各段の圧力を記録しておき、ブレーキを動かした際に圧力差が一定以上ある場合音声を再生するように制御しています。圧力差も大きい時と小さい時で再生する音を分けることによってバリエーションをもたせています。


4.運転台計器ラグの再現

運転台メーターが指針式でない運転台ではデジタルゲージという表示灯で情報を伝える方式が取られています。デジタルゲージ式では値の認識しやすさ向上のために、一定間隔で情報を更新する方式が取られています。

681系では時計以外の計器類がすべてデジタルゲージのため、これの遅れを再現しました。

プログラムの例

# define LAG 500;

int KizamiTime;

if(KizamiTime <= g_time)

{

(処理)

KizamiTime = g_time + LAG;

}

ATSプラグインに書くプログラムの例を示します。

bveから渡ってくる時間は0時0分からの経過時間(ミリ秒)です。

if()...はElapse関数内にかかれています。

KizamiTimeは遅れを実装するために用意する変数です。LAGは更新間隔で500[ms]を設定します。

g_timeはbveから渡ってくる時間が格納されていて、KizamiTimeよりもg_time以下なら値を更新する処理をします。その次の処理時間を定めるため、g_timeとLAGを足す処理をすることで、等間隔で更新するプログラムを作ることができます。

5.モーター音の余韻再現

bveのモーター音は電流が流れている間のみ再生し、電流が流れている時は再生しないようになっています。

つまり再生か停止しか無いので、モーター音が加速をやめると突然パッと止まってしまいます。実車を聴いてみると急に聴こえなくなったり急に聴こえたりすることは無いので、残響も考慮しモーター音をフェードイン・フェードアウトするように音量をコントロール(WN音再現と原理は同じ)し、実車の雰囲気を再現しています。

なおこれの再現にもXAudioを用いています。

まとめ

ATSプラグインを活用することによって、色々なことができリアリティをどんどん追求することができます。プラグインはC言語の知識が必要ですがそこまで難しい知識は不要で、ロジックを考える力が必要です。みなさんも挑戦してみてはいかがでしょうか!?

またこれらの再現プラグインを採用していただいた摂津ライナー氏、大阪から敦賀という本当に長距離でリアルな路線を制作した都路各停氏。そしてこのプロジェクトに参加した方々には本当に感謝しかありません。ありがとうございます。今後もより一層のリアリティを追求し、研究していきます。