• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

MIDITrail をピカピカにする。鍵盤方向自動切替・多ポート・歌詞対応等


Commit MetaInfo

修订版00a3959409870e880cd041c6feb6e87c2e238612 (tree)
时间2018-04-12 08:44:04
作者yoshy <yoshy@user...>
Commiteryoshy

Log Message

[FIX] 多ポートのシーケンスでPianoRoll2Dのキーボードが1つに集約されない不具合を修正

更改概述

差异

--- a/MIDITrail/MTNoteBoxMod.cpp
+++ b/MIDITrail/MTNoteBoxMod.cpp
@@ -365,15 +365,11 @@ int MTNoteBoxMod::_UpdateVertexOfActiveNotes(
365365 );
366366 if (result != 0) goto EXIT;
367367
368- //発音中ノートがピッチベンドで移動する場合
369368 //発音終了までオリジナルのノートを非表示にする
370369 if (!(m_pNoteStatusMod[i].isHide)) {
371- if ((m_pNotePitchBend->GetValue(note.portNo, note.chNo) != 0)
372- && (m_pNotePitchBend->GetSensitivity(note.portNo, note.chNo) != 0)) {
373- result = _HideNoteBox(m_pNoteStatusMod[i].index);
374- if (result != 0) goto EXIT;
375- m_pNoteStatusMod[i].isHide = true;
376- }
370+ result = _HideNoteBox(m_pNoteStatusMod[i].index);
371+ if (result != 0) goto EXIT;
372+ m_pNoteStatusMod[i].isHide = true;
377373 }
378374
379375 activeNoteNum++;
--- a/MIDITrail/MTPianoKeyboardCtrlMod.cpp
+++ b/MIDITrail/MTPianoKeyboardCtrlMod.cpp
@@ -29,7 +29,7 @@ using namespace YNBaseLib;
2929 //******************************************************************************
3030 MTPianoKeyboardCtrlMod::MTPianoKeyboardCtrlMod(void)
3131 {
32- m_MaxPortIndex = 0;
32+ m_MaxKeyboardIndex = 0;
3333 ZeroMemory(m_KeyDownRateMod, sizeof(float) * SM_MAX_CH_NUM* SM_MAX_CH_NUM * SM_MAX_NOTE_NUM);
3434 }
3535
@@ -54,7 +54,7 @@ int MTPianoKeyboardCtrlMod::Create(
5454 {
5555 int result = 0;
5656 unsigned long index = 0;
57- unsigned long portIndex = 0;
57+ unsigned long keyboardIndex = 0;
5858 unsigned char portNo = 0;
5959 SMTrack track;
6060
@@ -77,20 +77,32 @@ int MTPianoKeyboardCtrlMod::Create(
7777 result = pSeqData->GetPortList(&m_PortList);
7878 if (result != 0) goto EXIT;
7979
80- //ポート番号に昇順のインデックスを振る
81- //ポート 0番 3番 5番 に出力する場合のインデックスはそれぞれ 0, 1, 2
8280 for (index = 0; index < SM_MAX_PORT_NUM; index++) {
83- m_PortIndex[index] = -1;
81+ m_KeyboardIndex[index] = -1;
8482 }
85- for (index = 0; index < m_PortList.GetSize(); index++) {
86- m_PortList.GetPort(index, &portNo);
87- m_PortIndex[portNo] = portIndex;
88- portIndex++;
89- if(portIndex == m_KeyboardDesignMod.GetKeyboardMaxDispNum()){
90- break;
83+
84+ //シングルキーボードでない場合
85+ if (!isSingleKeyboard) {
86+ //ポート番号に昇順のキーボードインデックスを振る
87+ //ポート 0番 3番 5番 に出力する場合のインデックスはそれぞれ 0, 1, 2
88+ for (index = 0; index < m_PortList.GetSize(); index++) {
89+ m_PortList.GetPort(index, &portNo);
90+ m_KeyboardIndex[portNo] = keyboardIndex;
91+ keyboardIndex++;
92+ if(keyboardIndex == m_KeyboardDesignMod.GetKeyboardMaxDispNum()){
93+ break;
94+ }
9195 }
96+ m_MaxKeyboardIndex = (unsigned char)keyboardIndex;
97+ }
98+ //シングルキーボードの場合
99+ else {
100+ //キーボードデザインをシングルモードに設定
101+ m_KeyboardDesignMod.SetKeyboardSingle();
102+ //ポートとキーボードの対応を1:1に固定
103+ m_KeyboardIndex[0] = 0;
104+ m_MaxKeyboardIndex = 1;
92105 }
93- m_MaxPortIndex = (unsigned char)portIndex;
94106
95107 //トラック取得
96108 result = pSeqData->GetMergedTrack(&track);
@@ -112,7 +124,6 @@ int MTPianoKeyboardCtrlMod::Create(
112124 m_pNotePitchBend = pNotePitchBend;
113125
114126 //シングルキーボードフラグ
115- //※フラグを受け取っても使用しない。ポート別シングルキーボードで常に動作する
116127 m_isSingleKeyboard = isSingleKeyboard;
117128
118129 EXIT:;
@@ -129,23 +140,23 @@ int MTPianoKeyboardCtrlMod::_CreateKeyboards(
129140 )
130141 {
131142 int result = 0;
132- unsigned char portIndex = 0;
143+ unsigned char index = 0;
133144 LPDIRECT3DTEXTURE9 pTexture = NULL;
134145
135- for (portIndex = 0; portIndex < m_MaxPortIndex; portIndex++) {
146+ for (index = 0; index < m_MaxKeyboardIndex; index++) {
136147 try {
137- m_pPianoKeyboard[portIndex] = new MTPianoKeyboardMod;
148+ m_pPianoKeyboard[index] = new MTPianoKeyboardMod;
138149 }
139150 catch (std::bad_alloc) {
140151 result = YN_SET_ERR("Could not allocate memory.", 0, 0);
141152 goto EXIT;
142153 }
143154
144- result = m_pPianoKeyboard[portIndex]->Create(pD3DDevice, pSceneName, pSeqData, pTexture);
155+ result = m_pPianoKeyboard[index]->Create(pD3DDevice, pSceneName, pSeqData, pTexture);
145156 if (result != 0) goto EXIT;
146157
147158 //先頭オブジェクトで作成したテクスチャを再利用する
148- pTexture = m_pPianoKeyboard[portIndex]->GetTexture();
159+ pTexture = m_pPianoKeyboard[index]->GetTexture();
149160 }
150161
151162 EXIT:;
@@ -163,12 +174,18 @@ int MTPianoKeyboardCtrlMod::Transform(
163174 int result = 0;
164175 unsigned char portNo = 0;
165176 unsigned char chNo = 0;
166- D3DXVECTOR3 vectorLU;
167- D3DXVECTOR3 vectorRU;
168- D3DXVECTOR3 vectorLD;
169- D3DXVECTOR3 vectorRD;
170- D3DXVECTOR3 moveVector1;
171- D3DXVECTOR3 moveVector2;
177+ int index;
178+ D3DXVECTOR3 portWindowLU;
179+ D3DXVECTOR3 portWindowRU;
180+ D3DXVECTOR3 portWindowLD;
181+ D3DXVECTOR3 portWindowRD;
182+ D3DXVECTOR3 transformVector;
183+ D3DXVECTOR3 playbackPosVector;
184+
185+ //アクティブポートフラグクリア
186+ for (index = 0; index < SM_MAX_PORT_NUM; index++) {
187+ m_isActivePort[index] = false;
188+ }
172189
173190 //現在発音中ノートの頂点更新
174191 result = _TransformActiveNotes(pD3DDevice);
@@ -177,93 +194,87 @@ int MTPianoKeyboardCtrlMod::Transform(
177194 //再生面頂点座標取得
178195 m_NoteDesignMod.GetPlaybackSectionVirtexPos(
179196 0,
180- &vectorLU,
181- &vectorRU,
182- &vectorLD,
183- &vectorRD
197+ &portWindowLU,
198+ &portWindowRU,
199+ &portWindowLD,
200+ &portWindowRD
184201 );
185202
186- float boardHeight = vectorLU.y - vectorLD.y;
203+ float boardHeight = portWindowLU.y - portWindowLD.y;
187204 float keyboardWidth = m_KeyboardDesignMod.GetPortOriginX(0) * -2.0f;
205+ float portWidth = m_KeyboardDesignMod.GetChStep() * 16.0f;
206+
207+ float resizeSacle = boardHeight / keyboardWidth;
208+ float antiResizeScale = keyboardWidth / boardHeight;
188209
189210 float rippleSpacing = m_NoteDesignMod.GetRippleSpacing();
211+ float rippleMargin = rippleSpacing * (MTNOTELYRICS_MAX_LYRICS_NUM + MTNOTERIPPLE_MAX_RIPPLE_NUM) * antiResizeScale;
190212
191213 //移動ベクトル:再生面に追従する
192- moveVector2 = m_NoteDesignMod.GetWorldMoveVector();
193- moveVector2.x += m_NoteDesignMod.GetPlayPosX(m_CurTickTime);
214+ playbackPosVector = m_NoteDesignMod.GetWorldMoveVector();
215+ playbackPosVector.x += m_NoteDesignMod.GetPlayPosX(m_CurTickTime);
194216
195217 unsigned char lastPortNo = 0;
196218
197- m_PortList.GetPort(m_PortList.GetSize()-1, &lastPortNo);
219+ if (!m_isSingleKeyboard) {
220+ //シングルキーボードでない場合、最終ポート番号を取得
221+ m_PortList.GetPort(m_PortList.GetSize()-1, &lastPortNo);
222+ }
223+ else {
224+ //シングルキーボードの場合、最終ポート番号は0固定
225+ lastPortNo = 0;
226+ }
198227
199228 for(portNo = 0; portNo <= lastPortNo; portNo ++) {
200229
201- int portIndex = m_PortIndex[portNo];
230+ //ポート番号からキーボードインデックスを取得
231+ //シングルキーボードの場合、インデックスは0固定
232+ int keyboardIndex = !m_isSingleKeyboard ? m_KeyboardIndex[portNo] : 0;
202233
203- if(portIndex == -1) {
234+ if(keyboardIndex == -1) {
204235 continue;
205236 }
206237
207- //ピッチベンドシフトの最大量を求める
208- float maxAbsPitchBendShift = 0.0f;
209- float curMaxPitchBendShift = 0.0f;
210-
211- for (chNo = 0; chNo < SM_MAX_CH_NUM; chNo++) {
212-
213- float pitchBendShift = _GetPichBendShiftPosX(portNo, chNo);
214- if(maxAbsPitchBendShift < fabs(pitchBendShift)) {
215-
216- curMaxPitchBendShift = pitchBendShift;
217- maxAbsPitchBendShift = fabs(pitchBendShift);
218- }
219- }
220-
221238 //移動ベクトル:キーボード基準座標
222- moveVector1 = m_KeyboardDesignMod.GetKeyboardBasePos(portIndex, 0, keyboardWidth / boardHeight);
239+ transformVector = m_KeyboardDesignMod.GetKeyboardBasePos(keyboardIndex, 0, antiResizeScale);
223240
224241 //移動ベクトル:ピッチベンドシフトを反映
225- moveVector1.x += curMaxPitchBendShift;
242+ transformVector.x += GetMaxPitchBendShift(portNo);
226243
227244 if(rollAngle < 0.0f) {
228245 rollAngle += 360.0f;
229246 }
230247
231- float portWidth = m_KeyboardDesignMod.GetChStep() * 16.0f;
248+ float portOriginY = portWidth * (m_PortList.GetSize() - keyboardIndex - 1) * antiResizeScale;
232249
233- if((rollAngle > 120.0f) && (rollAngle < 300.0f)) {
250+ //鍵盤の1/2の幅だけ高音側に
251+ transformVector.x += m_KeyboardDesignMod.GetWhiteKeyStep() / 2.0f;
234252
235- //鍵盤の1/2の幅だけ高音側に
236- moveVector1.x += m_KeyboardDesignMod.GetWhiteKeyStep() / 2.0f;
253+ //鍵盤の1/4の高さだけ下に
254+ transformVector.y -= m_KeyboardDesignMod.GetWhiteKeyHeight() / 4.0f;
255+
256+ if((rollAngle > 120.0f) && (rollAngle < 300.0f)) {
237257
238258 //ポート原点Y
239- moveVector1.y -= portWidth * (m_PortList.GetSize() - portIndex - 1) * (keyboardWidth / boardHeight);
259+ transformVector.y -= portOriginY;
240260
241261 //鍵盤の原点をCh15に
242- moveVector1.y -= m_KeyboardDesignMod.GetChStep() * (keyboardWidth / boardHeight) * 15.0f;
243-
244- //鍵盤の1/4の高さだけ下に
245- moveVector1.y -= m_KeyboardDesignMod.GetWhiteKeyHeight() / 4.0f;
262+ transformVector.y -= m_KeyboardDesignMod.GetChStep() * 15.0f * antiResizeScale;
246263
247264 //鍵盤の長さ+リップルマージン+歌詞マージンだけ手前に
248- moveVector1.z -= m_KeyboardDesignMod.GetWhiteKeyLen() + rippleSpacing * (MTNOTELYRICS_MAX_LYRICS_NUM + MTNOTERIPPLE_MAX_RIPPLE_NUM) * (keyboardWidth / boardHeight);
265+ transformVector.z -= m_KeyboardDesignMod.GetWhiteKeyLen() + rippleMargin;
249266
250267 } else {
251268
252- //鍵盤の1/2の幅だけ高音側に
253- moveVector1.x += m_KeyboardDesignMod.GetWhiteKeyStep() / 2.0f;
254-
255269 //ポート原点Y
256- moveVector1.y += portWidth * (m_PortList.GetSize() - portIndex - 1) * (keyboardWidth / boardHeight);
257-
258- //鍵盤の1/4の高さだけ下に
259- moveVector1.y -= m_KeyboardDesignMod.GetWhiteKeyHeight() / 4.0f;
270+ transformVector.y += portOriginY;
260271
261272 //リップルマージン+歌詞マージンだけ奥に
262- moveVector1.z += 0.002f * (MTNOTELYRICS_MAX_LYRICS_NUM + MTNOTERIPPLE_MAX_RIPPLE_NUM) * (keyboardWidth / boardHeight);
273+ transformVector.z += rippleMargin;
263274 }
264275
265276 //キーボード移動
266- result = m_pPianoKeyboard[portIndex]->Transform(pD3DDevice, moveVector1, moveVector2, boardHeight / keyboardWidth, vectorLU.z, rollAngle);
277+ result = m_pPianoKeyboard[keyboardIndex]->Transform(pD3DDevice, transformVector, playbackPosVector, resizeSacle, portWindowLU.z, rollAngle);
267278 if (result != 0) goto EXIT;
268279 }
269280
@@ -312,8 +323,8 @@ int MTPianoKeyboardCtrlMod::_UpdateNoteStatus(
312323 //ノートOFF後(キー復帰済み)
313324 else {
314325 //ノート情報を破棄
315- //複数チャンネルのキー状態をポート別に集約する
316- result = m_pPianoKeyboard[m_PortIndex[note.portNo]]->ResetKey(note.noteNo);
326+ //発音中のキーをリセットする
327+ result = m_pPianoKeyboard[_GetKeyboardIndexFromNote(note)]->ResetKey(note.noteNo);
317328 if (result != 0) goto EXIT;
318329
319330 pNoteStatus->isActive = false;
@@ -322,6 +333,12 @@ int MTPianoKeyboardCtrlMod::_UpdateNoteStatus(
322333 pNoteStatus->keyDownRate = 0.0f;
323334 }
324335
336+ //状態更新後、発音中であれば
337+ if (pNoteStatus->isActive) {
338+ //アクティブポートフラグを立てる
339+ m_isActivePort[note.portNo] = true;
340+ }
341+
325342 EXIT:;
326343 return result;
327344 }
@@ -338,6 +355,7 @@ int MTPianoKeyboardCtrlMod::_UpdateVertexOfActiveNotes(
338355 unsigned long elapsedTime = 0;
339356 SMNote note;
340357 D3DXCOLOR noteColor;
358+ unsigned char notePortNo;
341359
342360 ZeroMemory(m_KeyDownRateMod, sizeof(float) * SM_MAX_CH_NUM* SM_MAX_CH_NUM * SM_MAX_NOTE_NUM);
343361
@@ -358,21 +376,32 @@ int MTPianoKeyboardCtrlMod::_UpdateVertexOfActiveNotes(
358376
359377 //ノートの色
360378 noteColor = m_NoteDesignMod.GetNoteBoxColor(note.portNo, note.chNo, note.noteNo);
361-
379+
380+ //シングルキーボードでない場合
381+ if (!m_isSingleKeyboard) {
382+ //ノートのポート番号を取得
383+ notePortNo = note.portNo;
384+ }
385+ //シングルキーボードの場合
386+ else {
387+ //ノートのポート番号を0固定に
388+ notePortNo = 0;
389+ }
390+
362391 //発音対象キーを回転
363392 // すでに同一ノートに対して頂点を更新している場合
364393 // 押下率が前回よりも上回る場合に限り頂点を更新する
365- if (m_KeyDownRateMod[note.portNo][note.chNo][note.noteNo] < m_pNoteStatus[i].keyDownRate) {
394+ if (m_KeyDownRateMod[notePortNo][note.chNo][note.noteNo] < m_pNoteStatus[i].keyDownRate) {
366395 //複数チャンネルのキー状態をポート別に集約する
367- result = m_pPianoKeyboard[m_PortIndex[note.portNo]]->PushKey(
368- note.chNo,
369- note.noteNo,
370- m_pNoteStatus[i].keyDownRate,
371- elapsedTime,
372- &noteColor
373- );
396+ result = m_pPianoKeyboard[_GetKeyboardIndexFromNote(note)]->PushKey(
397+ note.chNo,
398+ note.noteNo,
399+ m_pNoteStatus[i].keyDownRate,
400+ elapsedTime,
401+ &noteColor
402+ );
374403 if (result != 0) goto EXIT;
375- m_KeyDownRateMod[note.portNo][note.chNo][note.noteNo] = m_pNoteStatus[i].keyDownRate;
404+ m_KeyDownRateMod[notePortNo][note.chNo][note.noteNo] = m_pNoteStatus[i].keyDownRate;
376405 }
377406 }
378407
@@ -388,19 +417,25 @@ int MTPianoKeyboardCtrlMod::Draw(
388417 )
389418 {
390419 int result = 0;
391- unsigned char portIndex = 0;
420+ unsigned char index = 0;
392421 unsigned long count = 0;
393422 unsigned long dispNum = 0;
394423
395424 if (!m_isEnable) goto EXIT;
396425
426+ //レンダリングステート設定:Zバッファへの書き込みオフ
427+// pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
428+
397429 //キーボードの描画
398- for (portIndex = 0; portIndex < m_MaxPortIndex; portIndex++) {
430+ for (index = 0; index < m_MaxKeyboardIndex; index++) {
399431
400- result = m_pPianoKeyboard[portIndex]->Draw(pD3DDevice);
432+ result = m_pPianoKeyboard[index]->Draw(pD3DDevice);
401433 if (result != 0) goto EXIT;
402434 }
403435
436+ //レンダリングステート設定:Zバッファへの書き込みオン
437+// pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
438+
404439 EXIT:;
405440 return result;
406441 }
@@ -423,8 +458,8 @@ void MTPianoKeyboardCtrlMod::Reset()
423458 result = m_NoteListRT.GetNote(m_pNoteStatus[i].index, &note);
424459 //if (result != 0) goto EXIT;
425460
426- //複数チャンネルのキー状態をポート別に集約する
427- result = m_pPianoKeyboard[m_PortIndex[note.portNo]]->ResetKey(note.noteNo);
461+ //発音中のキーをリセットする
462+ result = m_pPianoKeyboard[_GetKeyboardIndexFromNote(note)]->ResetKey(note.noteNo);
428463 //if (result != 0) goto EXIT;
429464 }
430465 m_pNoteStatus[i].isActive = false;
@@ -435,3 +470,53 @@ void MTPianoKeyboardCtrlMod::Reset()
435470
436471 return;
437472 }
473+
474+int MTPianoKeyboardCtrlMod::_GetKeyboardIndexFromNote(const SMNote &note)
475+{
476+ //シングルキーボードでない場合
477+ if (!m_isSingleKeyboard) {
478+ //ノートのピアノ番号を取得
479+ return m_KeyboardIndex[note.portNo];
480+ }
481+ //シングルキーボードの場合
482+ else {
483+ //ノートのピアノ番号を0固定に
484+ return 0;
485+ }
486+}
487+
488+//******************************************************************************
489+// ピッチベンドシフトの最大量を求める
490+//******************************************************************************
491+float MTPianoKeyboardCtrlMod::GetMaxPitchBendShift(unsigned char portNo) {
492+
493+ float max = 0.0f;
494+ float cur = 0.0f;
495+
496+ //シングルキーボードでない場合、指定のポート番号から求める
497+ //シングルキーボードの場合、シーケンスに含まれるポート番号すべてから求める
498+ int portListSize = !m_isSingleKeyboard ? 1 : m_PortList.GetSize();
499+
500+ for (int i = 0; i < portListSize; i++) {
501+
502+ if (m_isSingleKeyboard) {
503+ m_PortList.GetPort(i, &portNo);
504+ }
505+
506+ if (!m_isActivePort[portNo]) {
507+ continue;
508+ }
509+
510+ for (unsigned char chNo = 0; chNo < SM_MAX_CH_NUM; chNo++) {
511+
512+ float pitchBendShift = _GetPichBendShiftPosX(portNo, chNo);
513+ if(max < fabs(pitchBendShift)) {
514+
515+ cur = pitchBendShift;
516+ max = fabs(pitchBendShift);
517+ }
518+ }
519+ }
520+
521+ return cur;
522+}
\ No newline at end of file
--- a/MIDITrail/MTPianoKeyboardCtrlMod.h
+++ b/MIDITrail/MTPianoKeyboardCtrlMod.h
@@ -58,8 +58,13 @@ private:
5858
5959 //ポートリスト
6060 SMPortList m_PortList;
61- int m_PortIndex[SM_MAX_PORT_NUM];
62- unsigned char m_MaxPortIndex;
61+
62+ //アクティブポートフラグ
63+ bool m_isActivePort[SM_MAX_PORT_NUM];
64+
65+ //キーボードインデックス
66+ int m_KeyboardIndex[SM_MAX_PORT_NUM];
67+ unsigned char m_MaxKeyboardIndex;
6368
6469 //キー押下率配列
6570 float m_KeyDownRateMod[SM_MAX_CH_NUM][SM_MAX_CH_NUM][SM_MAX_NOTE_NUM];
@@ -73,6 +78,9 @@ private:
7378 );
7479 virtual int _UpdateVertexOfActiveNotes(LPDIRECT3DDEVICE9 pD3DDevice);
7580
81+ int _GetKeyboardIndexFromNote(const SMNote &note);
82+
83+ float GetMaxPitchBendShift(unsigned char portNo);
7684 };
7785
7886
--- a/MIDITrail/MTPianoKeyboardDesign.cpp
+++ b/MIDITrail/MTPianoKeyboardDesign.cpp
@@ -916,6 +916,16 @@ unsigned long MTPianoKeyboardDesign::GetKeyboardMaxDispNum()
916916 return (unsigned long)m_KeyboardMaxDispNum;
917917 }
918918
919+// >>> add 20180404 yossiepon begin
920+//******************************************************************************
921+// キーボード表示数設定
922+//******************************************************************************
923+void MTPianoKeyboardDesign::SetKeyboardSingle()
924+{
925+ m_KeyboardMaxDispNum = 1;
926+}
927+// <<< add 20180404 yossiepon end
928+
919929 //******************************************************************************
920930 // キー表示範囲:開始
921931 //******************************************************************************
--- a/MIDITrail/MTPianoKeyboardDesign.h
+++ b/MIDITrail/MTPianoKeyboardDesign.h
@@ -189,6 +189,10 @@ public:
189189 //キーボード最大表示数取得
190190 unsigned long GetKeyboardMaxDispNum();
191191
192+// >>> add 20180404 yossiepon begin
193+ void SetKeyboardSingle();
194+// <<< add 20180404 yossiepon end
195+
192196 //キー表示範囲取得
193197 unsigned char GetKeyDispRangeStart();
194198 unsigned char GetKeyDispRangeEnd();
--- a/MIDITrail/MTScenePianoRoll2DMod.cpp
+++ b/MIDITrail/MTScenePianoRoll2DMod.cpp
@@ -17,6 +17,7 @@
1717 //******************************************************************************
1818 MTScenePianoRoll2DMod::MTScenePianoRoll2DMod(void)
1919 {
20+ m_IsSingleKeyboard = true;
2021 }
2122
2223 //******************************************************************************
--- a/readme_mod_yossiepon.txt
+++ b/readme_mod_yossiepon.txt
@@ -7,6 +7,7 @@ mail: yoshy@users.sourceforge.jp
77 ・[UPDATE] 1.2.3をマージ
88 ・[ADD] リップルと背景画像のブレンド方法を指定できる設定を追加
99  →INIファイル中のRippleセクション SrcBlendおよびDestBlend
10+・[FIX] 多ポートのシーケンスでPianoRoll2Dのキーボードが1つに集約されない不具合を修正
1011
1112 改造点 20170528:
1213 ・[FIX] タイトル(シーケンス名)が空の場合、ファイル名を代替表示するよう修正