【NRP_OggLoopEditor】僕の考えた最強のOggループエディタ

2026/06/22

 Claude Codeで作った「僕の考えた最強のOggループエディタ」です。

 Oggにループ再生用のタグ(LOOPSTART/LOOPLENGTH)を埋め込むことに特化しています。編集したOggをRPGツクールなどで使用すれば、ゲーム内で自然にBGMをループさせることができます。


主な機能

  • 自動で波形パターンを調べて最適なループ位置を発見する。
  • クロスフェードに対応。
    ループ構造でない曲も強引にループできるかも?
  • OGG, MP3, WAVの読込に対応。
  • サウンドフォントを利用したMIDI読込に対応。
  • 不要な前方、後方のデータを削除可能。
  • 日本語、英語に対応。

 特にMP3で配布されているBGM素材はループ処理がされていないので、このソフトを使うと便利です。
 マニアックなところではMIDIファイルも読み込めます。ただし、MIDIの読み込みにはサウンドフォント(設定画面で指定)が必要です。同梱もされていないので別途用意する必要があります。

 このページは日本語しかありませんが、ソフトは英語にも対応しています。
 (たぶんWindowsでしか動きません。)

導入方法


 以下のファイルをダウンロードして解凍してください。
 exeファイルをクリックすると起動します。

 NRP_OggLoopEditor.zip ver1.01(2026/07/11)

更新履歴


2026/06/22(ver1.00)

  • 公開!

2026/07/11(ver1.01)

  • 各操作をショートカットキーに対応させた。
  • 特殊な保存を追加し、拡張子(MP3, WAV)とループ回数を指定できるようにした。

基本的な使い方


 音声ファイル(Ogg/MP3/WAV/MIDIなど)を放り込むと読み込みます。
 波形が表示されたら、再生しながらループ始点(LOOPSTART)、終点(LOOPEND)を設定できます。
 LOOPSTART/ENDの右にある『現在位置を設定』ボタンを押せば、現在の再生位置がループポイントとして設定されます。

 ……といっても、実際にはループポイントを手作業で設定するのはかなり大変な作業です。0.1秒ズレただけで違和感があるので調整が大変です。


 そこで「🔍 ループ始点・終点を探す」ボタンで曲全体から自動的に最適なループ位置を探索できます。
 すでに片方の位置(始点または終点)が決まっている場合は、「終点を探す」「始点を探す」でもう一方だけを探すことも可能です。

 検索結果は複数表示(初期値では5件)されます。
 相関が高いほど自然にループする可能性が高いですが、あくまでプログラムの判断なので必ずしも正しいとは限りません。実際に聞いてみてこれだと思ったら確定してください。

 大体のループ時間が分かっている場合は、下記の『ループ時間の範囲』で絞り込むと見つけやすいです。短すぎる(または長すぎる)ループ候補を除外できます。
 曲自体が完全なループ構成になっているならば、これだけで簡単に設定できる可能性が高いです。

 問題なければ「Ogg として保存」でループタグ付きファイルを書き出します。
 ※細かいことをいうと、実際に設定されるのはLOOPSTARTとLOOPLENGTHです。このソフトではLOOPENDのほうが分かりやすいのでこちらを使っています。

ループ検索条件の設定


 検索範囲を絞り込むための条件として、以下を指定できます。
 なお、即座に反映されるわけではありません。設定を変更した場合は再度検索ボタンを押してください。

ループ時間の範囲

 ループする時間を秒単位で限定して、候補を検索します。
 例えば、下限をある程度の長さに設定しておくと、極端に短いループ範囲を除外できます。

サンプル範囲

 曲の前方/後方をどこまで探索対象にするかです。
 例えば、前方3秒、後方3秒にした上で『ループ始点を元に終点を探す』場合は、始点から前方3秒、後方3秒の計6秒に類似した波形を探します。
 基本的には初期値の前方0秒、後方3秒で問題ないと思います。
 
 さらに設定画面内の「ループ検索精度」では、解析の細かさ(ブロック長)、波形の相関を見たあとサンプル単位まで精密化するかどうか、候補として表示する件数なども調整できます。
 精度を上げる(ブロック長を下げる)ほど探索に時間がかかりますが、より自然なループ位置が見つかりやすくなります。とはいえ、基本的にはこれも初期値で問題ないとは思います。

クロスフェード設定


 どうしても良いループポイントが見つからない場合の最終手段として、クロスフェードが使えます。
 フェードアウト・フェードインそれぞれの長さ(秒)を個別に指定できます。ループ終点に合わせてフェード処理が行われます。

 さらに「タイミングを調整」を指定すれば、フェードアウトのタイミングを後ろにずらせます。これにより、ループ終点以降までフェードアウトをかけることもできます。フェードアウトするメロディに重なるように新しいメロディが開始するようなループの仕方を作れます。
 ※なお、これを指定した場合、内部的にはLOOPSTART/ENDが表示よりも後ろにズレます。(黄色の縦線で表示されます。)

 例えば、以下はSunoというAIで作成した曲です。本来なら1:55の辺りで曲が終わるのですが、フェードアウトさせると同時に無理やりイントロを重ねてそれっぽくループさせています。



前方/後方の削除


 波形上の右クリック(もしくはメニュー>編集)から、前方/後方の不要な部分を削除できます。ループ終点以降はゲーム中で再生されなくなるので、消してしまってもよいかと思います。



利用規約


 いつも通り、特に制約はありません。
 改変、再配布自由、商用利用可、権利表示も任意です。権利を偽るなど法的・道義的に問題がある行為以外は大体OKです。
 作者は責任を負いませんが、不具合については可能な範囲で対応します。

 ただし、再配布する際は使用ライブラリのライセンスに従ってください。
 といっても、ライセンス関連のtxtを消したりしなければ問題ないです。
posted by 砂川赳 at 12:36 | その他 | このブログの読者になる | 更新情報をチェックする

CrossLooperによるOggのループ処理

2026/06/15

 Oggファイルのループ処理について調べている時に『CrossLooper』というソフトの存在を知りました。
 せっかくなので紹介&説明してみます。

 Oggファイルはご存知の通りツクールMZの標準的な音声フォーマットです。このOggに「LOOPSTART / LOOPLENGTH」というタグを埋め込むことでゲーム用BGMのループ再生が可能となります。

 最初から作曲者がループ素材として提供してくれているのなら問題ありません。しかし、配布がMP3形式だったり、最近だとSunoなどのAI作曲で作ったものだったり、そもそも自分が作曲者だったりと、自力でループタグを入れたい場面もあるかと思います。

CrossLooperとは?


 Oggファイルを解析し、ループポイントを自動で設定してくれるソフトです。(制作:Splendide Imaginarius様)
 既存の方法だとOgg Loop EditorやAudacityなどを使って、耳で調べて何度も聞き直しながら設定したりするのですが、地味に大変な作業です。

 この地味に大変な作業を自動化してくれるありがたいソフトです。
 ※どうせなら雲海のフロンティアの開発前に知りたかった……。

 成功率は完璧ではなく公式によると大体76%だそうです。
 筆者が試した感じだとシンプルな構成の曲であれば、それなりの精度でループポイントを検出してくれました。
 ただし、展開の激しい曲やそもそもループを前提として作られていない曲は、必ずしも自然な結果になるとは限りません。

 ともあれ、自力でループポイントを探すよりは遥かに楽なので、まず試してみる価値はあると思います。

 しかしながら、このソフトは導入が結構難しいです。Pythonのソースコードの形でしか配布されていないので、自力で環境設定する必要があります。
 というわけで、以下で導入の解説をします。
 ※なお、筆者はWindowsしか分かりませんので、Windows前提です。他はごめんなさい。

CrossLooperの導入方法


GitHubからダウンロード

 以下のページへアクセスし、『Code(緑のボタン)』→『Download ZIP』を選択してください。
 https://github.com/Splendide-Imaginarius/crosslooper


 ダウンロードしたZIPを展開します。

Pythonの確認

 まず、コマンドプロンプトを起動してください。
 ※「コマンドプロンプトって何?」という人は、Windows左下のスタートメニューの検索欄に「cmd」と入力してください。


 起動したコマンドプロンプトで、以下のコマンドを実行してください。
python --version

 Pythonのバージョンが表示されれば問題ありません。
 エラーになった場合はPythonがインストールされてないので、ググってインストールしてください。
 ※作者環境では最初から入っていたので説明できません。たぶん、そんなに難しくないと思います。

ffmpegの確認

 続いてffmpegが利用可能か確認します。
ffmpeg -version

 こちらもバージョン情報が表示されればOKです。

 こちらは作者環境にも入っていませんでした。以下の「方法1: Wingetでインストール」でやるのが一番簡単だと思います。
 https://qiita.com/Tadataka_Takahashi/items/9dcb0cf308db6f5dc31b

CrossLooperのインストール

 コマンドプロンプトでCrossLooperのZIPを展開したフォルダへ移動します。
cd C:\test\CrossLooper

 ※『C:\test\CrossLooper』の部分は自身のフォルダへ読み替えてください。フォルダ名に半角スペースが入っている場合は"C:\test folder\CrossLooper"みたいに""で囲む必要があるかも。

 以下を実行します。
pip install --user .


 インストール自体はこれで完了です。
 これで、コマンドプロンプト上で
crosslooper

 と、打てば処理を呼べるはず。
 ……ですが、筆者の環境では無効になりました。exeファイルのパスが通っていないためのようです。

python -m site --user-base

 で、パスを調べてそこに移動してください。
C:\Users\[ユーザ名]\AppData\Roaming\Python\PythonXXX\Scripts\crosslooper.exe

 みたいな場所にあると思います。

 詳しい方ならパスを通してもよいのですが、今回はバッチファイルを作成します。

バッチファイルを作成

 ファイルを新規作成し「crosslooper.bat」を作成します。
 中身は以下の通りにしてください。ファイルパスはご自身の環境のものを設定してください。

@echo off

"C:\Users\[ユーザ名]\AppData\Roaming\Python\PythonXXX\Scripts\crosslooper.exe" %*

 ※改行のせいで大変見苦しいですが、bat内にコピペすればまともに見えるようになります。

 これでバッチファイル経由で実行できるようになります。

実行

 コマンドプロンプトで以下を実行!
crosslooper battle.ogg

 ……してもいいですが、それよりもバッチファイルにOggを直接ドロップしたほうが簡単です。
 ※Oggファイルは直接更新されます。必要なら先にバックアップを取ってください。

 解析が完了するとOGGファイルへLOOPSTARTとLOOPLENGTHが設定されます。
 後はツクールMZなり、ループに対応した再生ソフトなりで確認してください。

ライセンスについて

 CrossLooperはGPL-3.0ライセンスで公開されています。

 個人利用・商用利用ともに可能です。
 また、ソースコードを改造して利用することもできます。

 ただし、CrossLooper本体を改造して再配布する場合は、改造後のソースコードもGPL-3.0に従って公開する必要があります。
 なお、CrossLooperで処理したOGGファイルや、そのOGGファイルを利用したゲーム作品がGPLになるわけではありません。
 あくまでGPLの対象となるのはCrossLooper自身(およびその改造版)です。

 ライセンス上、記載は必須要件ではありませんが、
 CrossLooperを使用する場合は、クレジット表記をしていただけると大変ありがたいです。
 クレジット表記の例:「このBGMはCrossLooper(制作:Splendide Imaginarius)によってループ処理されました。」
 このGitリポジトリへのリンクもいただけると大変ありがたいです。
 https://github.com/Splendide-Imaginarius/crosslooper

 とのことです。(日本語訳)

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 22:00 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする

Steam実績&クラウドセーブに対応(Greenworks版)【RPGツクールMZプラグイン】

2026/06/10

 Greenworksを利用して、Steamの以下機能を利用します。

  • Steam実績の達成
  • セーブデータのSteamクラウド保存と読み込み



経緯

 雲海のフロンティアのSteam版を販売するに当たり、Steamの実績機能を実装することにしました。しかしながら、ツクールMZ作品に関する情報が少なく、実装は困難を極めました。
 当初はElectronを経由して実績機能を呼び出していたのですが、Electronでパッケージ化した状態でテストしていると動作が謎に重くなることがあるという現象に見舞われてしまいました。
 ※普段は軽快に動作するのですが、なぜか時々重くなります。一度、重くなるとアプリを再起動しても直らず、しばらくそのままになります。挙動からGPU関連っぽい気がするのですが、詳細は不明です。

 結局、問題を解決できずに他の方法を模索したのですが、結果的に落ち着いたのがGreenworksを使う方法です。

 そんなわけで、当プラグインの目的はSteamの機能を使うに当たって、Electron以外の選択肢を掲示することです。Greenworksを利用して、Steam実績の達成やクラウドセーブを実装します。

 ※この方法に限らず、各自で相性の良い方法を選択してくだされば幸いです。例えば、Electronにはパッケージ化できるメリットがあります。つまり、jsonなどファイルの中身がユーザに見られません。
 Greenworksの場合は元のツクールMZの仕組み(NW.js)をそのまま利用するため、挙動の変化が少ないというメリットもあります。


 利用にはGreenworksのセットアップが必要です。この記事では導入の手順を細かく解説していきます。
 なお、Steam以外の環境では、これらの機能は無効化されます。

 当然ながら、Steamworksに登録していることが前提になります。
 Steamに作品を登録して、App IDを取得してください。

目次


導入方法(Install)

更新履歴(History)

Greenworksの導入・NW.jsの更新

Steamworks SDKの導入

プロジェクトのデプロイとファイルの配置

Steamオーバーレイの設定

ゲームのアップロード

ポイント

クラウドセーブの設定

Steam実績の達成

Steam実績の削除(テスト用)

プラグインコマンド(Plugin Commands)

Steam実績を達成(ActivateAchievement)

Steam判定スイッチ(SetSwitchIsSteam)


導入方法(Install)


 以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
 ※このプラグインはMZ専用です。

 NRP_Steamworks.js ver1.00(2026/06/10)

 また、当プラグインを利用するには別途Greenworksの導入が必要です。
 詳細はGreenworksの導入・NW.jsの更新をご覧ください。

更新履歴(History)


2026/06/10(ver1.00)

  • 公開!

Greenworksの導入・NW.jsの更新


 まず、Greenworksを導入し、それに合わせてNW.jsを更新します。

Greenworksの導入

 以下のリリースページからGreenworksをダウンロードします。
 https://github.com/greenheartgames/greenworks/releases

 ※Windowsの場合は、greenworks-vX.XX.X-nw-vX.XX.X-win-64.zip というファイル名になります。

NW.jsの更新

 GreenworksとNW.jsのバージョンを合わせる必要があります。
 NW.jsの公式サイトからDLしてください。
 ※過去バージョンは『Previous releases』からDLできます。
 https://nwjs.io/downloads/

 NW.jsの差し替え手順は以下の記事(Mac向けですがWindowsも大体同じ)が参考になります。
 https://rpgtkool.hatenablog.com/entry/2024/10/23/140944

 ※nwjs-winのバックアップは必ず取ってください。テストプレイが起動しなくなった場合は元に戻してください。

 色々試した結果、作者環境では以下の組み合わせで動作を確認しました。

Greenworks v0.17.0 for NW.js v0.89.0

 https://github.com/greenheartgames/greenworks/releases/tag/v0.17.0
 https://dl.nwjs.io/v0.89.0/

 ※Windowsの場合は以下の2ファイルが必要です。
 ・greenworks-v0.17.0-nw-v0.89.0-win-64.zip
 ・nwjs-v0.89.0-win-x64.zip


Steamworks SDKの導入


 SteamworksのパートナーサイトからSteamworks SDKをダウンロードしてください。

 ※作者環境ではsteamworks_sdk_v1.64で確認しています。バージョンによってはGreenworksとの相性がある場合があります。

プロジェクトのデプロイとファイルの配置


デプロイ

 当プラグインを導入し、通常通りプロジェクトをデプロイします。

 ※プラットフォームはWindows(またはmacOS)を選択してください。
 ※事前に上記のNW.jsの更新をする必要があります。


ファイルの配置

 1.Greenworksのzipを解凍し、デプロイ済みのプロジェクトフォルダに配置します。

 2.Steamworks SDKのzipを解凍し、以下の2ファイルを『greenworks/lib』フォルダ内に配置します。
[steamworks_sdk]\redistributable_bin\win64\steam_api64.dll
[steamworks_sdk]\public\steam\lib\win64\sdkencryptedappticket64.dll


 3.テキストファイル「steam_appid.txt」を新規作成し、プロジェクトフォルダに配置します。中身にはSteam App IDのみ記載してください。

フォルダ構成

ゲームフォルダ/
├── Game.exe
├── package.json
├── js/
│ └── plugins/
│   └── NRP_Steamworks.js
├── greenworks/
│ ├── greenworks.js
│ └── lib/
│  ├── greenworks-win64.node
│  ├── steam_api64.dll       ← Steamworks SDKから
│  └── sdkencryptedappticket64.dll ← Steamworks SDKから
└── steam_appid.txt  ← Steam App IDを記載(例: 1234567)


 ここまでの設定が完了していれば、SteamのAPIが有効になります。
 Steamクライアントを起動した状態でGame.exeを実行することで、実績の達成が有効になります。

Steamオーバーレイの設定


 上記の状態では、まだSteamオーバーレイ(F12によるスクリーンショットなどSteamの各種機能)は有効になりません。

package.jsonの編集

 package.jsonをテキストエディタで開き、「chromium-args」の行に以下の2点を加えてください。
--in-process-gpu --disable-direct-composition


 実際には元ある記述と合わせて、以下のようになるはずです。
"chromium-args": "--force-color-profile=srgb --disable-devtools --in-process-gpu --disable-direct-composition",


Steamクライアントからの起動

 この状態でSteamクライアント上からゲームを起動すると、Steamオーバーレイが有効になります。
 ※ゲーム開始時にSteamオーバーレイの通知が表示されれば成功です。



ゲームのアップロード


 なお、Steamクライアント上でゲームを起動するには、Steamworksにゲームをアップロードする必要があります。

 アップロードにはSteamworks SDK付属の「SteamPipeGUI」が便利です。
[steamworks_sdk]\tools\SteamPipeGUI.zip


 使い方は以下の記事が参考になります。
 https://kan-kikuchi.hatenablog.com/entry/Steam_Upload_Windows

 ※Steamworksから直接Webアップロードもできますが、失敗することが多くて面倒でした……。

 あるいは「ゲーム>非Steamゲームをマイライブラリに追加」でSteamクライアントにプロジェクトを取り込む方法もあります。

ポイント


 これまでに作成したpackage.jsonやsteam_appid.txt、greenworksフォルダは別途保管しておくことをオススメします。デプロイする度にコピペするだけで済みます。

 ※ただし、package.jsonにはゲームタイトルも含まれるので注意です。バージョン名などを含む場合はきちんと更新する必要があります。

 また、SteamPipeGUIはexeファイルのパス毎に設定を記憶しているようです。体験版と製品版など複数プロジェクトを管理する場合は、SteamPipeGUI.exeを別にコピー&リネームしておくと便利&安全です。

クラウドセーブの設定


 Steamクラウドセーブを利用するには、Steamworksの管理画面で設定が必要です。

 1.Steamworksの管理画面で「アプリデータ管理 > Steam クラウド」を選択。
 2.Steam 自動クラウド設定のルートパスを設定。
  ・ルートを「アプリのインストールディレクトリ」に設定
  ・サブディレクトリを「save/{64BitSteamID}」に設定
  ・パターンを「.rmmzsave」に設定

 ※{64BitSteamID} はSteamのユーザIDに自動変換されます。

 Steamworksの「共有クラウドストレージ」を設定することで、体験版から製品版へ自動でセーブを引き継ぐこともできます。
 ※共有クラウドストレージは体験版側に設定するのが基本っぽいです。

 なお、製品版と体験版のセーブデータは双方向で反映される仕様のようです。わざわざやるプレイヤーはあまりいないと思いますが、製品版でセーブしたデータを体験版でロードするとエラーになったりします。
 特にアクターの画像ファイルがないとロード画面の時点で落ちます。
 気になる方は製品版のセーブデータは体験版で、ロード禁止にするなどの制御をしてください。


Steam実績の達成


 プラグインコマンドの「Steam実績を達成」を呼び出し、Steamworksの管理画面で事前に登録した実績のAPI名を指定してください。

 上述の「プロジェクトのデプロイとファイルの配置」まで設定が終わっていれば、実績が達成されるはずです。

Steam実績の削除(テスト用)


 テスト時に達成した実績を消去したい場合は、以下の手順で行います。

 1.ブラウザのURL欄に「steam://open/console」と入力し、Steamクライアントのコンソールを開きます。
 2.コンソールに以下のコマンドを入力します。

個別の実績を消去する場合:

achievement_clear [Steam App ID] [実績のAPI名]

(例:achievement_clear 9999999 STAGE_1_CLEAR)

全実績をリセットする場合:

reset_all_stats [Steam App ID]


 ※実行した直後は表示が反映されていないように見えますが、実際には反映されています。
 ※ちなみに、steam.exeのリンク先の末尾に「 -console」を付けておけば、コンソールが最初から表示された状態になるので便利です。


プラグインコマンド(Plugin Commands)


Steam実績を達成(ActivateAchievement)

 指定したSteam実績を達成します。
 Steam以外の環境では何もしません。

実績名(AchievementName)

 達成する実績のAPI名を文字列で指定します。
 SteamworksのダッシュボードでAPI名として登録した文字列と一致させてください。

Steam判定スイッチ(SetSwitchIsSteam)

 現在Steamビルドで動作しているかを指定のスイッチに反映します。
 SteamビルドであればスイッチをON、そうでなければOFFにします。

スイッチ(SwitchId)

 Steam判定を反映するスイッチのIDを指定します。

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 15:43 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする