進行ごとにBGMがシームレスで変更される仕組みを作ろうと思っていますが、うまくいきません。
ブレスオブザワイルドの魔獣ガノン戦のイメージです。
①BGM切り替えポイントまでイベントが進行するとウェイトが発動
②再生位置が0か、22.5か45秒以上ならBGMの切り替えが行われる
現在、このように
AudioManager._bgmBuffer.seek() でBGMの現在の再生位置を取得するスクリプトを入れ、BGM切り替えポイントまで行くとイベントのセルフスイッチでループ処理を入れています。
BGMのフェードはBGSと組み合わせて行おうと思っています。
ご存知の方がおりましたらご教示いただけますと幸いです。
【解決済み】進行ごとにBGMがシームレスで変更される仕組みを作りたい(音ハメ)
【解決済み】進行ごとにBGMがシームレスで変更される仕組みを作りたい(音ハメ)
最後に編集したユーザー viv1124 [ 2025年7月22日(火) 12:31 ], 累計 1 回
- DoujinRuis
- 記事: 170
- 登録日時: 2022年10月25日(火) 10:59
Re: 進行ごとにBGMがシームレスで変更される仕組みを作りたい(音ハメ)
こんにちは、今回の件を動画で解説しているのでよかったら見てください
https://youtube.com/live/sJvj13xoQgk
プラグイン
/*:
* @target MZ
* @plugindesc BGMのシンクロポイントでの切り替えを支援するプラグインだよ♡
* @author サラ
*
* @help
* ◆ 使用方法:
* ・スクリプトで以下を使ってねっ♪
* BgmSyncChecker.isReady() // 同期ポイントに達しているか
* BgmSyncChecker.setSyncPoints([0, 22.5, 45]) // 同期タイミングを変更
*/
(() => {
class BgmSyncChecker {
static _syncPoints = [0, 22.5, 45]; // デフォルト同期ポイント(秒)
static isReady() {
const buffer = AudioManager._bgmBuffer;
if (!buffer || typeof buffer.seek !== "function") return false;
const current = buffer.seek();
console.log("[BgmSyncChecker] 現在の再生位置: " + current.toFixed(2) + "秒");
return this._syncPoints.some(point => Math.abs(current - point) < 0.3);
}
static setSyncPoints(points) {
if (Array.isArray(points)) {
this._syncPoints = points;
const buffer = AudioManager._bgmBuffer;
if (buffer && typeof buffer.seek === "function") {
const current = buffer.seek();
console.log("[BgmSyncChecker] 同期ポイント更新:", points);
} else {
console.warn("[BgmSyncChecker] BGMがまだ再生されていないか、seekが無効です!");
}
}
}
}
window.BgmSyncChecker = BgmSyncChecker;
})();
https://youtube.com/live/sJvj13xoQgk
プラグイン
/*:
* @target MZ
* @plugindesc BGMのシンクロポイントでの切り替えを支援するプラグインだよ♡
* @author サラ
*
* @help
* ◆ 使用方法:
* ・スクリプトで以下を使ってねっ♪
* BgmSyncChecker.isReady() // 同期ポイントに達しているか
* BgmSyncChecker.setSyncPoints([0, 22.5, 45]) // 同期タイミングを変更
*/
(() => {
class BgmSyncChecker {
static _syncPoints = [0, 22.5, 45]; // デフォルト同期ポイント(秒)
static isReady() {
const buffer = AudioManager._bgmBuffer;
if (!buffer || typeof buffer.seek !== "function") return false;
const current = buffer.seek();
console.log("[BgmSyncChecker] 現在の再生位置: " + current.toFixed(2) + "秒");
return this._syncPoints.some(point => Math.abs(current - point) < 0.3);
}
static setSyncPoints(points) {
if (Array.isArray(points)) {
this._syncPoints = points;
const buffer = AudioManager._bgmBuffer;
if (buffer && typeof buffer.seek === "function") {
const current = buffer.seek();
console.log("[BgmSyncChecker] 同期ポイント更新:", points);
} else {
console.warn("[BgmSyncChecker] BGMがまだ再生されていないか、seekが無効です!");
}
}
}
}
window.BgmSyncChecker = BgmSyncChecker;
})();
ゲーム制作情報共有ディスコード
discord.com/invite/dzUAC3CSMH
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/@DoujinRuis/videos
discord.com/invite/dzUAC3CSMH
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/@DoujinRuis/videos
Re: 進行ごとにBGMがシームレスで変更される仕組みを作りたい(音ハメ)
DoujinRuisさん
いつもありがとうございます。お返事が遅くなってしまい申し訳ございません。
プラグインの作成と、解説動画まで作成していただき本当にありがとうございます…!
無事に理想のシームレスに変更できる仕組みが作れました(TT)ずっと悩んでいたので本当に助かりました、ありがとうございます!
こちらのプラグインを使用させていただき有料ゲームを公開したいと考えているのですが、ライセンスに関して(商用利用の場合は購入必要など)教えていただけますと幸いです。
いつもありがとうございます。お返事が遅くなってしまい申し訳ございません。
プラグインの作成と、解説動画まで作成していただき本当にありがとうございます…!
無事に理想のシームレスに変更できる仕組みが作れました(TT)ずっと悩んでいたので本当に助かりました、ありがとうございます!
こちらのプラグインを使用させていただき有料ゲームを公開したいと考えているのですが、ライセンスに関して(商用利用の場合は購入必要など)教えていただけますと幸いです。
- DoujinRuis
- 記事: 170
- 登録日時: 2022年10月25日(火) 10:59
Re: 【解決済み】進行ごとにBGMがシームレスで変更される仕組みを作りたい(音ハメ)
いえいえ、好きに使ってください
ゲーム制作情報共有ディスコード
discord.com/invite/dzUAC3CSMH
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/@DoujinRuis/videos
discord.com/invite/dzUAC3CSMH
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/@DoujinRuis/videos
Re: 【解決済み】進行ごとにBGMがシームレスで変更される仕組みを作りたい(音ハメ)
そう言っていただきましてありがとうございます!
改めまして、回答と素敵なプラグインの作成ありがとうございましたm(__)m
改めまして、回答と素敵なプラグインの作成ありがとうございましたm(__)m