Skip to content

Instantly share code, notes, and snippets.

@trueroad
Last active July 20, 2022 11:09
Show Gist options
  • Select an option

  • Save trueroad/ec1abe8c7a72d21611461a77dc6c3b4a to your computer and use it in GitHub Desktop.

Select an option

Save trueroad/ec1abe8c7a72d21611461a77dc6c3b4a to your computer and use it in GitHub Desktop.
世界樹 7.5 でマルチパケット・システム・エクスクルーシブを入力できるようにするパッチ
世界樹 7.5 でマルチパケット・システム・エクスクルーシブを
入力できるようにするパッチ
世界樹 7.5 では MIDI 1.0 規格書にある
マルチパケット・システム・エクスクルーシブの例が入力できません。
本パッチにより入力できるようになります。
以下詳細です。
MIDI 1.0 規格書 PDF 版
https://amei.or.jp/midistandardcommittee/MIDIspcj.html
の「4. スタンダード MIDI ファイル 1.0」の中にあるページ 4-7 には、
マルチパケット・システム・エクスクルーシブを
スタンダード MIDI ファイルで表現する例として
F0 03 43 12 00
81 48
F7 06 43 12 00 43 12 00
64
F7 04 43 12 00 F7
が挙げられています。
これを世界樹 7.5 のイベントリストで入力するにはイベントの種類として
最初の F0 で始まる行は「システムエクスクルーシヴ(通常)」
3, 5 行目の F7 で始まる行は「システムエクスクルーシヴ(任意)」
を使うことになり、TPQN 120 で 4/4 拍子だと以下のようにすればよさそうです。
小節:拍:ティック イベントの種類 値1
00001:01:000 システムエクスクルーシヴ(通常) F0 43 12 00
00001:02:080 システムエクスクルーシヴ(任意) 43 12 00 43 12 00
00001:03:060 システムエクスクルーシヴ(任意) 43 12 00 F7
しかし、世界樹 7.5 では
「システムエクスクルーシヴ(通常)」
の値 1 に
F0 43 12 00
を入力すると
「システムエクスクルーシブデータはF7で終わらなければなりません。」
という警告メッセージボックスが出て
F0 43 12 F7
に変わってしまい上記の入力ができません。
本パッチはこの警告と自動修正を無くすことにより、
上記の入力ができるようにするものです。
パッチ後の世界樹で上記を入力し、
スタンダート MIDI ファイルとして保存して、
バイナリエディタで中身を見たところ、
上記の例の通りになっていることが確認できました。
https://osdn.net/projects/openmidiproject/forums/13724/46208/
--- Sekaiju7.5/src/EventListIndexPropertyView.cpp.org
+++ Sekaiju7.5/src/EventListIndexPropertyView.cpp
@@ -2190,18 +2190,6 @@
pSekaijuApp->m_theCriticalSection.Lock ();
pSekaijuDoc->m_theCriticalSection.Lock ();
}
- if (byData[lRet - 1] != 0xF7) {
- byData[lRet - 1] = 0xF7; // 20210106:可能な限り自動修正して正常終了する。
- pSekaijuDoc->m_theCriticalSection.Unlock ();
- pSekaijuApp->m_theCriticalSection.Unlock ();
- CString strMsg;
- VERIFY (strMsg.LoadString (IDS_SYSEX_DATA_MUST_END_WITH_F7));
- AfxMessageBox (strMsg, MB_ICONEXCLAMATION | MB_OK);
- pSekaijuApp->m_theCriticalSection.Lock ();
- pSekaijuDoc->m_theCriticalSection.Lock ();
- //m_bSettingCellString = 0;
- //return FALSE;
- }
VERIFY (strHistoryName.LoadString (IDS_MODIFY_SYSEX_NORMAL));
VERIFY (pSekaijuDoc->AddHistoryUnit (strHistoryName));
VERIFY (pCurHistoryUnit = pSekaijuDoc->GetCurHistoryUnit ());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment