SmileSoundのサウンドフローには、「share変数」という機能があり、異なるサウンドフローとの間でも、数値を渡しあえます。何に使うかと言うと、他のサウンドフローに状況をお知らせしたいときに使います。入換灯とテールライトを、以下のDE10の配線のようにAUX1,AUX2,AUX3,AUX4を共用しているとき、同時にサウンドフローが動くと、AUX制御の取り合いでケンカが始まります。ケンカをしないようにするには、share変数を使って、状況を渡しあう必要があります。どちらかが遠慮するように動きを作らないといけません。
share変数は、share1,share2・・・share8までの8個が使用できます。
よくある使い方は、以下の2つだと思います。
・share変数に値を入れる
letコマンドを使い、share2=0 と入れる。(ifコマンドでよく使う==(等しい)ではないので注意!)
・share変数で条件分岐をする
ifコマンドを使い、share2==1 やshare2==0等といれる。
注意としては、コンプレッサ(CP)で既にshare1を使い、share2も使用予定として、オープンサウンドデータでは実装しているので、share3以降を使ってほしいというところです。
具体的に、使用例を見ていきましょう。まずは、F3によく割り付ける、入換灯の処理です。ここでは、入換灯が遠慮するような実装をしています。
DESKTOPSTATION,SOUNDLOW,SMILESOUND
label,START,,
aux,1,0,
aux,2,0,
aux,3,0,
aux,4,0,
label,WAIT1,,
if,share2==1,WAIT1,
if,fnc==0,START,
label,ON,,
aux,1,1,
aux,2,1,
aux,3,0,
aux,4,0,
label,WAIT2,,
if,share2==1,WAIT2,
if,fnc==1,ON,
ret
,,,
次に、テールライト(F6)のサウンドフローです。こちらが優先されるように作っています。
DESKTOPSTATION,SOUNDLOW,SMILESOUND
aux,1,0,
aux,2,0,
aux,3,0,
aux,4,0,
label,START,,
if,fnc==0,START,
label,JUDGE,,
let,share2=1,,
if,dir==0,FWD,REV
label,FWD,,
aux,1,0,
aux,2,1,
aux,3,0,
aux,4,1,
goto,WAITING,,
label,REV,,
aux,1,1,
aux,2,0,
aux,3,1,
aux,4,0,
label,WAITING,,
wait,1000,,
if,fnc==1,JUDGE,
let,share2=0,,
ret
,,,