プログラミングには、状態遷移型(いわゆるフロー)と手続型の大きく2種類あって、どっちをどのように実装するか、いろいろ考えました。だけれども、170点近いサウンドデータをリリースして見えたのは、「やっぱり両方あるほうがいいよね」ということです。
たとえば、加減速のプログラムを見てみましょう。
実はコレ、これ以上機能の変更が必要無い、完全に固まった状態になってます。弄ってるのは、音が切り替わるタイミングの速度だけ。実はそれも、私がエクセルで自動計算してるだけなので、デコーダ自体に、この状態遷移図のプログラムを埋め込んでしまえば、特に編集できるようにする必要はないのです。
全部をユーザーがプログラミングできるようにするのは、大きなコストがかかります。コストというのは労力、つまりお金や時間です。既に決まっているものを、あえて編集できるようにして意味があるのか?を考えると、実はあまりないことも見えてきました。というのも、オープンサウンドデータを大量にリリースしたことで、日本型サウンドにおける、一通りの状態遷移パターンが実は完成しています。つまり、状態遷移については、このオープンサウンドで得られた知見を元に、必要なテンプレートを用意して提供する方が良いという方向性が見えてきます。テンプレートの提供形式は、我々で状態遷移表を配列に置き換えて用意すればいいだけですので、開発コストとしては大きくないです。
惰行音、加減速音、CP、ブレーキスキール、警笛、ATS、ブロア、SIV・MG、
状態遷移で表現可能なサウンドファンクション
一方で、ユーザーがよく触る部分もあります。ドア開閉、アナウンス等です。ドア開閉のプログラムを見てみましょう。こちらは、いわゆるフローチャート的に使っており、順番に様々な処理を行っていくものになります。状態遷移は似てるのですが、実際に要求される動作はちょっと違うのです。
こちらは、単純にスクリプト実行で実装が可能です。デスクトップステーションでも実績が豊富です。たとえば、ドア開閉のスクリプトを書くとすると、Python的にカッコ無しで表現すると以下のようにするイメージです。
FUNCTION SLOT_DOOR(){
WHILE(SPD!=0){
WAIT(1sec)
}PLAYWAV(“ドア開.wav”)
スクリプト例
WHILE(FNC==ON){
WAIT(1sec)
}
PLAYWAV(“ドア閉める声.wav”)
WAIT(2sec)
PLAYWAV(“ドア閉.wav”)
}
スクリプト型であれば、DSair2の自動運転用プログラミングシステムであるEducationPlatformの流用でも同じことはできますね。
という事で、無理にESUと同じ土俵に上がる必要は無く、違う土俵を作ってしまうほうが、効率的で建設的と感じました。