-
Notifications
You must be signed in to change notification settings - Fork 130
/
Copy pathAudioSuppression.js
109 lines (104 loc) · 4.22 KB
/
AudioSuppression.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*=============================================================================
AudioSuppression.js
----------------------------------------------------------------------------
(C)2022 Triacontane
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
----------------------------------------------------------------------------
Version
1.1.0 2023/10/07 フェードイン時間とフェードアウト時間を別々に指定できるよう修正
1.0.1 2022/10/02 最小音量とフェード時間に制御文字\v[n]が使えるよう修正
1.0.0 2022/09/23 初版
----------------------------------------------------------------------------
[Blog] : https://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
=============================================================================*/
/*:
* @plugindesc オーディオ音量抑制プラグイン
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/AudioSuppression.js
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @author トリアコンタン
*
* @param triggerSwitch
* @text トリガースイッチ
* @desc オーディオが最小音量までフェードアウトするフレーム数です。
* @default 1
* @type switch
*
* @param minVolume
* @text 最小音量
* @desc 最小となる音量値です。
* @default 50
* @type number
* @min 0
* @max 100
*
* @param fadeTime
* @text フェードアウト時間
* @desc オーディオが最小音量までフェードアウトするフレーム数です。
* @default 60
* @type number
* @min 1
*
* @param fadeInTime
* @text フェードイン時間
* @desc オーディオが最小音量からフェードインするフレーム数です。
* @default 60
* @type number
* @min 1
*
* @help AudioSuppression.js
*
* 指定したスイッチがONのとき演奏中のオーディオのボリュームを抑制します。
* ただしSE,MEには適用されません。
*
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
* 以下のフォルダに格納されています。
* dlc/BasicResources/plugins/official
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(() => {
'use strict';
const script = document.currentScript;
const param = PluginManagerEx.createParameter(script);
const _AudioManager_updateBufferParameters = AudioManager.updateBufferParameters;
AudioManager.updateBufferParameters = function(buffer, configVolume, audio) {
if (buffer === this._bgmBuffer || buffer === this._bgsBuffer) {
configVolume *= (this._audioSuppression / 100);
}
_AudioManager_updateBufferParameters.call(this, buffer, configVolume, audio);
};
AudioManager._audioSuppression = 100;
AudioManager.updateAudioSuppression = function() {
if (!$gameSwitches) {
return;
}
const sign = $gameSwitches.value(param.triggerSwitch) ? -1 : 1;
if (this._audioSuppressionSign === sign && !this._audioSuppressionChange) {
return;
}
this._audioSuppressionSign = sign;
const fadeFrame = (sign === 1 ? param.fadeInTime || param.fadeTime : param.fadeTime) || 1;
const suppressionDelta = (100 - param.minVolume) / fadeFrame;
const newVolume = (this._audioSuppression + (suppressionDelta * sign)).clamp(param.minVolume, 100);
this._audioSuppressionChange = this._audioSuppression !== newVolume;
if (this._audioSuppressionChange) {
this._audioSuppression = newVolume;
this.updateBgmParameters(this._currentBgm);
this.updateBgsParameters(this._currentBgs);
}
};
const _SceneManager_updateMain = SceneManager.updateMain;
SceneManager.updateMain = function() {
_SceneManager_updateMain.apply(this, arguments);
AudioManager.updateAudioSuppression();
};
})();