・前回まで
KAGEX拡張例(音量設定)
KAGEX拡張例(ミュート設定)
KAGEX拡張例(システム効果音)
BGMの音量、またはミュートの状態が変更された際は、onSoundPropertyChangedというフックが呼ばれます。kag.addHookで呼び出す関数を追加できます。大体の動作は以下を見てください。
// 音量などが変更された際に呼ばれる関数を登録
kag.addHook("onSoundPropertyChanged", function(tag, prop, value) {
switch (tag) {
case "bgm":
if (prop === "enable") {
// BGMのミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// BGMの音量が変更された(value => 0~100000)
}
break;
case "se":
if (prop === "enable") {
// 効果音のミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// 効果音の音量が変更された(value => 0~100000)
}
break;
case "sysse":
if (prop === "enable") {
// システム効果音のミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// システム効果音の音量が変更された(value => 0~100000)
}
break;
case "movie":
if (prop === "enable") {
// 動画のミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// 動画の音量が変更された(value => 0~100000)
}
break;
case "voice":
if (prop === "enable") {
// キャラ共通のミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// キャラ共通の音量が変更された(value => 0~100000)
} else if (prop === "しおり") {
// キャラごとの音量(しおり)が変更された(value => 0~100000)
}
break;
case "bgv":
if (prop === "enable") {
// BGV(bvoice)のミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// BGV(bvoice)の音量が変更された(value => 0~100000)
}
break;
case "bgv2":
if (prop === "enable") {
// BGV(hvoice)のミュートが変更された(value => true or false)
} else if (prop === "globalVolume") {
// BGV(hvoice)の音量が変更された(value => 0~100000)
}
break;
case "voiceon":
if (prop === "しおり") {
// キャラごとのミュート(しおり)が変更された(value => true or false)
}
break;
}
});
tagには”bgm”, “se”など何の値が変更されたかが渡されます。
propが”enable”ならミュートの状態、”globalVolume”なら音量が変更されたと言うことです。prop==”enable”ならvalueは通常の状態ならtrue, ミュートされた状態ならfalseになります。prop==”globalVolume”ならvalueは変更後の音量ですが、0~100000の数値になるので注意してください。value/1000のように1000で割れば0~100に変換できます。
tag==”voice”の時は少し特殊です。propが”enable”,”globalVolume”の他にキャラ名になることがあります。このときはそのキャラの音量が変更されたということです。
キャラごとのミュートはtag==”voiceon”で渡されます。propがキャラ名になります。
全体の音量(wavevolume)やミュート(waveenable)が変更されたときはonSoundPropertyChangedが呼ばれないようになっています。それも必要なときは少し改造する必要があります。
MainWindow.tjsでwavevolumeとwaveenableが定義されている部分を書き換えます。setterの最後にcallHook(~)の行を追加しただけです。これでtag==”wave”でprop==”enable”またはprop==”globalVolume”として変更が通知されるようになります。
/**
* グローバル WaveSound 音量の設定
* 100 段階設定
*/
property wavevolume {
getter() {
return scflags.waveVolume !== void ? +scflags.waveVolume : global.WaveSoundBuffer.globalVolume / 1000;
}
setter(v) {
v = +v;
if (v < 0) v = 0;
else if (v > 100) v = 100;
scflags.waveVolume = v;
global.WaveSoundBuffer.globalVolume = scflags.waveEnable ? v * 1000 : 0;
callHook("onSoundPropertyChanged", "wave", "globalVolume", v * 1000);
}
}
/**
* グローバル WaveSound の有効値の設定
* true / false
*/
property waveenable {
getter() {
return scflags.waveEnable !== void ? +scflags.waveEnable : true;
}
setter(v) {
scflags.waveEnable = +v;
wavevolume = scflags.waveVolume;
callHook("onSoundPropertyChanged", "wave", "enable", !!v);
}
}