"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i * bgm_name: BGM名です。空白を含んではいけません。空白文字や日本語を含むファイル名を使うのは避けましょう * volume: 音量です。0 ~ 100、ツクールの「BGMの演奏」のデフォルトだと 90 * pan: 音が左右のどちらに寄っているかです。-100 ~ 100、中心は 0 です * pitch: 音の高さです。スピードも変わってしまうようです。50 ~ 200 程度にしましょう。デフォルトは 100 * position: 次の曲の再生開始位置(秒)です。0 以上の値を入力してください。デフォルトは前の曲の現在の再生位置です * * * CrossFadeBgm set Ship1,90,0,100,0 # 例えばこのように指定できます。カンマのあとにスペースを入れてはいけません * CrossFadeBgm set Ship1,,,100 # 途中の値を省略することが可能です。ただし、BGM名は最低限指定してください * # 省略された音量などの値は、現在流れているBGMの値が使われます * CrossFadeBgm set Ship1,_,_,100,_ # カンマだけが並ぶのは見づらいなと感じる場合は、アンダーバーを使うのがよいかもしれません * * 【注意事項】 * ツクールでの「デプロイメント」でゲームを出力するとき、「未使用ファイルを含まない」のチェックをONにした場合、 * ツクールはプラグインコマンドでどのBGMが使われてるのかまでは見ませんので、 * 本当は使っているのに、使ってないとみなされて必要なBGMファイルが出力されない場合があります。 * * これではそのBGMを再生しようとしたときにエラーが発生してしまいます。 * * 対策としては、「未使用ファイルを含まない」のチェックをOFFでデプロイメントするか、 * ダミーの(ゲームでは実際通らない)マップを用意して、出力されないBGMを演奏するイベントをそこに置くとよいかと思います。 * * @param Default Fade Duration Sec * @desc デフォルトのフェード時間(秒) * @default 3.0 * * @param Start From Zero * @desc trueの場合、次の曲の再生開始位置を必ず0秒からにします(setコマンドを無視します) * @type boolean * @on 0秒から再生 * @off デフォルト * @default false * */(function(){'use strict';var pluginName="HTN_CrossFadeBgm";/** * bgm は Array クラス * buffer は WebAudio クラス、もしくは Html5Audio クラス */var BgmBuffer=/*#__PURE__*/function(){function BgmBuffer(){_classCallCheck(this,BgmBuffer);BgmBuffer.extendAudioManager();BgmBuffer.setIndexForCurrentBgm(0)}/** * ツクールの AudioManager クラスを拡張 * * @FIXME 他のプラグインが playBgm() とか拡張するとこのプラグインが動かなくなる */_createClass(BgmBuffer,null,[{key:"extendAudioManager",value:function extendAudioManager(){AudioManager._bgmArray=[];AudioManager._bgmBufferArray=[];/** BGM の再生 */AudioManager.playBgm=function(bgm,pos){if(AudioManager.isCurrentBgm(bgm)){AudioManager.updateBgmParameters(bgm)}else{AudioManager.stopBgm();if(bgm.name!==null){if(Decrypter.hasEncryptedAudio&&AudioManager.shouldUseHtml5Audio()){AudioManager.playEncryptedBgm(bgm,pos)}else{bgm.pos=pos;BgmBuffer.pushBuffer(bgm);// AudioManager._bgmBuffer = AudioManager.createBuffer('bgm', bgm.name); AudioManager.updateBgmParameters(bgm);if(!AudioManager._meBuffer){// AudioManager._bgmBuffer.play(true, pos || 0); BgmBuffer.playAllBuffers()}}}}AudioManager.updateCurrentBgm(bgm,pos)};/** playEncryptedBgm から呼ばれる。暗号化されたBGMを再生するためのバッファを作成 */AudioManager.createDecryptBuffer=function(url,bgm,pos){AudioManager._blobUrl=url;bgm.pos=pos;BgmBuffer.pushBuffer(bgm);// AudioManager._bgmBuffer = AudioManager.createBuffer('bgm', bgm.name); AudioManager.updateBgmParameters(bgm);if(!AudioManager._meBuffer){// AudioManager._bgmBuffer.play(true, pos || 0); BgmBuffer.playAllBuffers()}AudioManager.updateCurrentBgm(bgm,pos)};/** * BGM の再生停止 * バッファー配列は空にする */AudioManager.stopBgm=function(){AudioManager._bgmBufferArray.forEach(function(buffer){if(buffer!==null){buffer.stop();buffer=null}});BgmBuffer.setIndexForCurrentBgm(0);AudioManager._bgmArray=[];AudioManager._bgmBufferArray=[]}}/** * _bgmBuffer は AudioManager._bgmBufferArray から読み取る * _currentBgm は AudioManager._bgmArray から読み取る * ここでは、その _bgmBuffer, _currentBgm の書き込み・読み込みの対象となる配列のindex(0~)を指定する * * @param _indexForCurrentBgm: Number _bgmBuffer, _currentBgm の対象となる配列のindex(0~) */},{key:"setIndexForCurrentBgm",value:function setIndexForCurrentBgm(_indexForCurrentBgm){var indexForCurrentBgm=parseInt(_indexForCurrentBgm);var length=BgmBuffer.countBuffers();if(indexForCurrentBgm===0||0<=indexForCurrentBgm&&indexForCurrentBgm=0){durationSec=Number(opt1)}if(optionsArray.length>0){this.setAll(optionsArray.join(","))}}if(AudioManager._currentBgm!==null){if(this.nextBgm.name!==AudioManager._currentBgm.name){var position=BgmBuffer.getBuffersPositionByIndex(0);if(this.isStartFromZero){this.nextBgm.pos=0}else if(this.nextBgm.pos==null){this.nextBgm.pos=position}AudioManager._currentBgm.pos=position;this.nextBgm=BgmBuffer.arrangeNewBgm(this.nextBgm,AudioManager._currentBgm);BgmBuffer.unshiftBuffer(this.nextBgm);BgmBuffer.reduceBuffers(2);BgmBuffer.playAllBuffers();BgmBuffer.fadeInBufferByIndex(0,durationSec*0.75);BgmBuffer.fadeOutBufferByIndex(1,durationSec)}}else{BgmBuffer.unshiftBuffer(this.nextBgm);BgmBuffer.reduceBuffers(2);BgmBuffer.playAllBuffers();BgmBuffer.fadeInBufferByIndex(0,durationSec*0.75)}}/** フェード時間(s)を設定 */},{key:"setDuration",value:function setDuration(_durationSec){if(Number(_durationSec)>0){this.durationSec=Number(_durationSec)}}/** フェード時間(s)をデフォルトにリセット */},{key:"resetDuration",value:function resetDuration(){this.durationSec=this.defaultDurationSec}/** * 次に流すBGMをまとめて設定 * * name,volume,pan,pitch,pos の順でまとめて書く * カンマのあとに空白文字を置かないこと * * @param _args: String */},{key:"setAll",value:function setAll(_args){var argsArray=_args.split(",");var name=argsArray[0]==null||argsArray[0]===""?null:String(argsArray[0]);var volume=isNaN(parseFloat(argsArray[1]))?null:Number(argsArray[1]);var pan=isNaN(parseFloat(argsArray[2]))?null:Number(argsArray[2]);var pitch=isNaN(parseFloat(argsArray[3]))?null:Number(argsArray[3]);var pos=isNaN(parseFloat(argsArray[4]))?null:Number(argsArray[4]);this.nextBgm={name:name,volume:volume,pan:pan,pitch:pitch,pos:pos}}/** * プラグインコマンドを登録 */},{key:"defaultDurationSec",get:function get(){return this._defaultDurationSec}}],[{key:"initPluginCommands",value:function initPluginCommands(){var crossFadeBgmClass=new CrossFadeBgm;var _Game_Interpreter_pluginCommand=Game_Interpreter.prototype.pluginCommand;Game_Interpreter.prototype.pluginCommand=function(command,args){_Game_Interpreter_pluginCommand.call(this,command,args);if(command==="CrossFadeBgm"){switch(args[0]){case"set":crossFadeBgmClass.setAll(args[1]);break;case"start":crossFadeBgmClass.startCrossFade(args[1]);break;case"setDuration":crossFadeBgmClass.setDuration(args[1]);break;case"resetDuration":crossFadeBgmClass.resetDuration();break;}}}}}]);return CrossFadeBgm}();CrossFadeBgm.initPluginCommands()})();