• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

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

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


Commit MetaInfo

Revisãofae58944d5d5641671ada09cb431923804a6bc7f (tree)
Hora2018-04-12 09:45:30
Autoryoshy <yoshy@user...>
Commiteryoshy

Mensagem de Log

[FIX] PianoRoll3Dで多ポート時のキーボード基準位置がずれている不具合を修正

Mudança Sumário

Diff

--- a/MIDITrail/MIDITrail.rc
+++ b/MIDITrail/MIDITrail.rc
@@ -313,9 +313,9 @@ END
313313
314314 STRINGTABLE
315315 BEGIN
316-// >>> modify 20180404 yossiepon begin
317- IDS_APP_TITLE "MIDITrail 1.2.3 mod. yossiepon_20180404"
318-// <<< modify 20180404 yossiepon end
316+// >>> modify 20180412 yossiepon begin
317+ IDS_APP_TITLE "MIDITrail 1.2.3 mod. yossiepon_20180412"
318+// <<< modify 20180412 yossiepon end
319319 IDC_MIDITRAIL "MIDITRAIL"
320320 END
321321
--- a/MIDITrail/MIDITrailVersion.h
+++ b/MIDITrail/MIDITrailVersion.h
@@ -16,8 +16,10 @@
1616 //******************************************************************************
1717
1818 //バージョン文字列
19-#define MIDITRAIL_VERSION_STRING_X86 _T("1.2.3 (x86), mod. yossiepon_20180404")
20-#define MIDITRAIL_VERSION_STRING_X64 _T("1.2.3 (x64), mod. yossiepon_20180404")
19+// >>> modify 20180412 yossiepon begin
20+#define MIDITRAIL_VERSION_STRING_X86 _T("1.2.3 (x86), mod. yossiepon_20180412")
21+#define MIDITRAIL_VERSION_STRING_X64 _T("1.2.3 (x64), mod. yossiepon_20180412")
22+// <<< modify 20180412 yossiepon end
2123
2224 //コピーライト
2325 #define MIDITRAIL_COPYRIGHT _T("Copyright (C) 2010-2017 WADA Masashi");
--- a/MIDITrail/MTPianoKeyboard.cpp
+++ b/MIDITrail/MTPianoKeyboard.cpp
@@ -1599,20 +1599,20 @@ int MTPianoKeyboard::Transform(
15991599 }
16001600
16011601 // >>> add 20120729 yossiepon begin
1602+// >>> modify 20180411 yossiepon begin
16021603 //******************************************************************************
16031604 // 移動
16041605 //******************************************************************************
16051606 int MTPianoKeyboard::Transform(
16061607 LPDIRECT3DDEVICE9 pD3DDevice,
1607- D3DXVECTOR3 moveVector1,
1608- D3DXVECTOR3 moveVector2,
1609- float scale,
1610- float z,
1608+ D3DXVECTOR3 basePosVector,
1609+ D3DXVECTOR3 playbackPosVector,
16111610 float rollAngle
16121611 )
16131612 {
16141613 return YN_SET_ERR("Program error.", 0, 0);
16151614 }
1615+// <<< modify 20180411 yossiepon end
16161616 // <<< add 20120729 yossiepon end
16171617
16181618 //******************************************************************************
--- a/MIDITrail/MTPianoKeyboard.h
+++ b/MIDITrail/MTPianoKeyboard.h
@@ -47,7 +47,14 @@ public:
4747 //更新
4848 int Transform(LPDIRECT3DDEVICE9 pD3DDevice, D3DXVECTOR3 moveVector, float rollAngle);
4949 // >>> add 20120729 yossiepon begin
50- virtual int Transform(LPDIRECT3DDEVICE9 pD3DDevice, D3DXVECTOR3 moveVector1, D3DXVECTOR3 moveVector2, float scale, float z, float rollAngle);
50+// >>> modify 20180411 yossiepon begin
51+ virtual int Transform(
52+ LPDIRECT3DDEVICE9 pD3DDevice,
53+ D3DXVECTOR3 basePosVector,
54+ D3DXVECTOR3 playbackPosVector,
55+ float rollAngle
56+ );
57+// <<< modify 20180411 yossiepon end
5158 // <<< add 20120729 yossiepon end
5259
5360
--- a/MIDITrail/MTPianoKeyboardCtrlMod.cpp
+++ b/MIDITrail/MTPianoKeyboardCtrlMod.cpp
@@ -173,11 +173,7 @@ int MTPianoKeyboardCtrlMod::Transform(
173173 unsigned char portNo = 0;
174174 unsigned char chNo = 0;
175175 int index;
176- D3DXVECTOR3 portWindowLU;
177- D3DXVECTOR3 portWindowRU;
178- D3DXVECTOR3 portWindowLD;
179- D3DXVECTOR3 portWindowRD;
180- D3DXVECTOR3 transformVector;
176+ D3DXVECTOR3 basePosVector;
181177 D3DXVECTOR3 playbackPosVector;
182178
183179 //アクティブポートフラグクリア
@@ -189,20 +185,6 @@ int MTPianoKeyboardCtrlMod::Transform(
189185 result = _TransformActiveNotes(pD3DDevice);
190186 if (result != 0) goto EXIT;
191187
192- //再生面頂点座標取得
193- m_NoteDesignMod.GetPlaybackSectionVirtexPos(
194- 0,
195- &portWindowLU,
196- &portWindowRU,
197- &portWindowLD,
198- &portWindowRD
199- );
200-
201- float boardHeight = m_KeyboardDesignMod.GetPlaybackSectionHeight();
202- float keyboardWidth = m_KeyboardDesignMod.GetKeyboardWidth();
203-
204- float resizeSacle = boardHeight / keyboardWidth;
205-
206188 //移動ベクトル:再生面に追従する
207189 playbackPosVector = m_NoteDesignMod.GetWorldMoveVector();
208190 playbackPosVector.x += m_NoteDesignMod.GetPlayPosX(m_CurTickTime);
@@ -229,13 +211,13 @@ int MTPianoKeyboardCtrlMod::Transform(
229211 }
230212
231213 //移動ベクトル:キーボード基準座標
232- transformVector = m_KeyboardDesignMod.GetKeyboardBasePos(keyboardIndex, rollAngle);
214+ basePosVector = m_KeyboardDesignMod.GetKeyboardBasePos(keyboardIndex, rollAngle);
233215
234216 //移動ベクトル:ピッチベンドシフトを反映
235- transformVector.x += GetMaxPitchBendShift(portNo);
217+ basePosVector.x += GetMaxPitchBendShift(portNo);
236218
237219 //キーボード移動
238- result = m_pPianoKeyboard[keyboardIndex]->Transform(pD3DDevice, transformVector, playbackPosVector, resizeSacle, portWindowLU.z, rollAngle);
220+ result = m_pPianoKeyboard[keyboardIndex]->Transform(pD3DDevice, basePosVector, playbackPosVector, rollAngle);
239221 if (result != 0) goto EXIT;
240222 }
241223
--- a/MIDITrail/MTPianoKeyboardDesignMod.cpp
+++ b/MIDITrail/MTPianoKeyboardDesignMod.cpp
@@ -90,19 +90,10 @@ D3DXVECTOR3 MTPianoKeyboardDesignMod::GetKeyboardBasePos(
9090 angle += angle < 0.0f ? 360.0f : 0.0f;
9191 bool flip = !((angle > 120.0f) && (angle < 300.0f));
9292
93- float boardHeight = GetPlaybackSectionHeight();
94- float keyboardWidth = GetKeyboardWidth();
95-
96- float rippleMargin = GetRippleMargin(); // * antiResizeScale;
97-
98- //キーボード描画時にリサイズがかかってはならない相対座標用の逆リサイズ比
99- //対象:ポート間隔、リップルマージン
100- float antiResizeScale = keyboardWidth / boardHeight;
101-
10293 //ポート単位の原点座標
10394 ox = GetPortOriginX();
104- oy = GetPortOriginY(keyboardIndex, antiResizeScale, flip);
105- oz = GetPortOriginZ(keyboardIndex, antiResizeScale, flip);
95+ oy = GetPortOriginY(keyboardIndex, flip);
96+ oz = GetPortOriginZ(keyboardIndex, flip);
10697
10798 return D3DXVECTOR3(ox, oy, oz);
10899 }
@@ -141,10 +132,12 @@ float MTPianoKeyboardDesignMod::GetPortOriginX()
141132 // |
142133 // -z
143134
144- float originX = -GetKeyboardWidth() / 2.0f;
135+ float originX = -GetPlaybackSectionHeight() / 2.0f;
145136
146137 //鍵盤の1/2の幅だけ高音側に移動
147- return originX + GetWhiteKeyStep() / 2.0f;
138+ originX += GetWhiteKeyStep() * GetKeyboardResizeRatio() / 2.0f;
139+
140+ return originX;
148141 }
149142
150143 //******************************************************************************
@@ -152,19 +145,19 @@ float MTPianoKeyboardDesignMod::GetPortOriginX()
152145 //******************************************************************************
153146 float MTPianoKeyboardDesignMod::GetPortOriginY(
154147 int keyboardIndex,
155- float antiResizeScale,
156148 bool flip
157149 )
158150 {
159151 // angle: 120°〜300°(rotateX: 90°, rotateZ: 90°)
160152 // +y
161153 // |
162- // +z<---0-----------------------------Ch.15------------>-z
154+ // | Ch.15
163155 // |
164156 // | +--------------+
165157 // | portC +--------------@ Ch.0
166158 // | Ch.15
167159 // |
160+ // +z<---0---------------------------------------------->-z
168161 // | +--------------+
169162 // | portB +--------------@ Ch.0
170163 // | Ch.15
@@ -182,32 +175,36 @@ float MTPianoKeyboardDesignMod::GetPortOriginY(
182175 // portA +--------------@ Ch.0 |
183176 // Ch.15 |
184177 // |
178+ // +z<----------------------------------------0-------------->-z
185179 // +--------------+ |
186180 // portB +--------------@ Ch.0 |
187181 // Ch.15 |
188182 // |
189183 // +--------------+ |
190- // +z<----------portC +--------------@ Ch.0---0-------------->-z
184+ // portC +--------------@ Ch.0 |
191185 // |
192186 // | @:OriginY(for portA,B,C)
193187 // -y
194188
195- float portWidth = GetChStep() * 16.0f;
189+ float portWidth = GetPortWidth();
196190
197191 // TODO シングルキーボードの判定方法を再検討
198192 int keyboardDispNum = GetKeyboardMaxDispNum() > 1 ? m_PortList.GetSize() : 1;
199193
200- float originY = portWidth * (keyboardDispNum - keyboardIndex - 1);
194+ float originY;
201195
202196 if (!flip) {
203- originY = 0; //-(originY + GetChStep() * 15.0f);
204- }
197+ originY = -portWidth * (float)(keyboardDispNum - keyboardIndex * 2) / 2.0f;
205198
206- //キーボードリサイズ後に正しいポート間隔となるよう逆比をかける
207- originY *= antiResizeScale;
199+ //チャネル間隔の62.5%の高さだけ下に
200+ originY -= GetChStep() * 0.625f;
201+ }
202+ else {
203+ originY = portWidth * (float)(keyboardDispNum - (keyboardIndex + 1) * 2) / 2.0f;
208204
209- //鍵盤の1/4の高さだけ下に
210- originY -= GetWhiteKeyHeight() / 4.0f;
205+ //チャネル間隔の37.5%の高さだけ上に
206+ originY += GetChStep() * 0.375f;
207+ }
211208
212209 return originY;
213210 }
@@ -217,7 +214,6 @@ float MTPianoKeyboardDesignMod::GetPortOriginY(
217214 //******************************************************************************
218215 float MTPianoKeyboardDesignMod::GetPortOriginZ(
219216 int keyboardIndex,
220- float antiResizeScale,
221217 bool flip
222218 )
223219 {
@@ -252,14 +248,11 @@ float MTPianoKeyboardDesignMod::GetPortOriginZ(
252248
253249 float originZ;
254250
255- //キーボードリサイズ後に正しいリップルマージンとなるよう逆比をかける
256- float rippleMargin = GetRippleSpacing() * antiResizeScale;
257-
258251 if (!flip) {
259- originZ = -(GetWhiteKeyLen() + rippleMargin);
252+ originZ = -(GetWhiteKeyLen() * GetKeyboardResizeRatio() + GetRippleMargin());
260253 }
261254 else {
262- originZ = rippleMargin;
255+ originZ = GetRippleMargin();
263256 }
264257
265258 return originZ;
@@ -318,7 +311,7 @@ float MTPianoKeyboardDesignMod::GetKeyboardWidth()
318311 //******************************************************************************
319312 float MTPianoKeyboardDesignMod::GetGridHeight()
320313 {
321- return GetNoteStep() * 127;
314+ return GetNoteStep() * 127.0f;
322315 }
323316
324317 //******************************************************************************
@@ -326,7 +319,23 @@ float MTPianoKeyboardDesignMod::GetGridHeight()
326319 //******************************************************************************
327320 float MTPianoKeyboardDesignMod::GetGridWidth()
328321 {
329- return GetChStep() * 15;
322+ return GetChStep() * 15.0f;
323+}
324+
325+//******************************************************************************
326+// ポート高さ取得
327+//******************************************************************************
328+float MTPianoKeyboardDesignMod::GetPortHeight()
329+{
330+ return GetGridHeight();
331+}
332+
333+//******************************************************************************
334+// ポート幅取得
335+//******************************************************************************
336+float MTPianoKeyboardDesignMod::GetPortWidth()
337+{
338+ return GetChStep() * 16.0f;
330339 }
331340
332341 //******************************************************************************
@@ -362,6 +371,15 @@ float MTPianoKeyboardDesignMod::GetRippleMargin()
362371 }
363372
364373 //******************************************************************************
374+// キーボードリサイズ比取得
375+//******************************************************************************
376+float MTPianoKeyboardDesignMod::GetKeyboardResizeRatio()
377+{
378+ //キーボード基準の相対座標に適用するリサイズ比
379+ return GetPlaybackSectionHeight() / GetKeyboardWidth();
380+}
381+
382+//******************************************************************************
365383 // 発音中キーカラー取得
366384 //******************************************************************************
367385 D3DXCOLOR MTPianoKeyboardDesignMod::GetActiveKeyColor(
--- a/MIDITrail/MTPianoKeyboardDesignMod.h
+++ b/MIDITrail/MTPianoKeyboardDesignMod.h
@@ -28,12 +28,15 @@ public:
2828 virtual int Initialize(const TCHAR* pSceneName, SMSeqData* pSeqData);
2929
3030 //キーボード基準座標取得
31- D3DXVECTOR3 GetKeyboardBasePos(int keyboardIndex, float angle);
31+ D3DXVECTOR3 GetKeyboardBasePos(
32+ int keyboardIndex,
33+ float angle
34+ );
3235
3336 //ポート原点座標取得
3437 float GetPortOriginX();
35- float GetPortOriginY(int keyboardIndex, float antiResizeScale, bool flip);
36- float GetPortOriginZ(int keyboardIndex, float antiResizeScale, bool flip);
38+ float GetPortOriginY(int keyboardIndex, bool flip);
39+ float GetPortOriginZ(int keyboardIndex, bool flip);
3740
3841 //ノートボックス高さ・幅取得
3942 float GetNoteBoxHeight();
@@ -53,6 +56,10 @@ public:
5356 float GetGridHeight();
5457 float GetGridWidth();
5558
59+ //ポート高さ・幅取得
60+ float GetPortHeight();
61+ float GetPortWidth();
62+
5663 //再生面高さ・幅取得
5764 float GetPlaybackSectionHeight();
5865 float GetPlaybackSectionWidth();
@@ -63,6 +70,9 @@ public:
6370 //波紋描画マージン取得
6471 float GetRippleMargin();
6572
73+ //キーボードリサイズ比取得
74+ float GetKeyboardResizeRatio();
75+
6676 //発音中キーカラー取得
6777 D3DXCOLOR GetActiveKeyColor(
6878 unsigned char chNo,
--- a/MIDITrail/MTPianoKeyboardMod.cpp
+++ b/MIDITrail/MTPianoKeyboardMod.cpp
@@ -77,10 +77,8 @@ EXIT:;
7777 //******************************************************************************
7878 int MTPianoKeyboardMod::Transform(
7979 LPDIRECT3DDEVICE9 pD3DDevice,
80- D3DXVECTOR3 moveVector1,
81- D3DXVECTOR3 moveVector2,
82- float scale,
83- float z,
80+ D3DXVECTOR3 basePosVector,
81+ D3DXVECTOR3 playbackPosVector,
8482 float rollAngle
8583 )
8684 {
@@ -89,18 +87,16 @@ int MTPianoKeyboardMod::Transform(
8987 D3DXMATRIX rotateMatrix1;
9088 D3DXMATRIX rotateMatrix2;
9189 D3DXMATRIX rotateMatrix3;
92- D3DXMATRIX moveMatrix1;
93- D3DXMATRIX moveMatrix2;
94- D3DXMATRIX moveMatrix3;
90+ D3DXMATRIX basePosMatrix;
91+ D3DXMATRIX playbackPosMatrix;
9592 D3DXMATRIX worldMatrix;
9693
9794 //行列初期化
9895 D3DXMatrixIdentity(&scaleMatrix);
9996 D3DXMatrixIdentity(&rotateMatrix1);
10097 D3DXMatrixIdentity(&rotateMatrix2);
101- D3DXMatrixIdentity(&rotateMatrix3);
102- D3DXMatrixIdentity(&moveMatrix1);
103- D3DXMatrixIdentity(&moveMatrix2);
98+ D3DXMatrixIdentity(&basePosMatrix);
99+ D3DXMatrixIdentity(&playbackPosMatrix);
104100 D3DXMatrixIdentity(&worldMatrix);
105101
106102 //回転行列
@@ -120,21 +116,20 @@ int MTPianoKeyboardMod::Transform(
120116 D3DXMatrixRotationX(&rotateMatrix3, D3DXToRadian(rollAngle));
121117
122118 //移動行列
123- D3DXMatrixTranslation(&moveMatrix1, moveVector1.x, moveVector1.y, moveVector1.z);
124- D3DXMatrixTranslation(&moveMatrix2, moveVector2.x, moveVector2.y, moveVector2.z);
125- D3DXMatrixTranslation(&moveMatrix3, 0.0f, 0.0f, z / scale);
119+ D3DXMatrixTranslation(&basePosMatrix, basePosVector.x, basePosVector.y, basePosVector.z);
120+ D3DXMatrixTranslation(&playbackPosMatrix, playbackPosVector.x, playbackPosVector.y, playbackPosVector.z);
126121
127122 //スケール行列
123+ float scale = m_KeyboardDesignMod.GetKeyboardResizeRatio();
128124 D3DXMatrixScaling(&scaleMatrix, scale, scale, scale);
129125
130- //行列の合成:ピッチベンド移動1→鍵盤向き補正回転1・2→グリッド面まで移動3→ホイール回転3→スケール→再生面追従移動2
131- D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &moveMatrix1);
126+ //行列の合成:スケール→原点移動→回転1・2(鍵盤向き補正)→回転3(ホイール角度)→再生位置追従移動
127+ D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &scaleMatrix);
128+ D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &basePosMatrix);
132129 D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &rotateMatrix1);
133130 D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &rotateMatrix2);
134- D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &moveMatrix3);
135131 D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &rotateMatrix3);
136- D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &scaleMatrix);
137- D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &moveMatrix2);
132+ D3DXMatrixMultiply(&worldMatrix, &worldMatrix, &playbackPosMatrix);
138133
139134 //変換行列設定
140135 m_PrimitiveKeyboard.Transform(worldMatrix);
--- a/MIDITrail/MTPianoKeyboardMod.h
+++ b/MIDITrail/MTPianoKeyboardMod.h
@@ -34,7 +34,12 @@ public:
3434 );
3535
3636 //更新
37- virtual int Transform(LPDIRECT3DDEVICE9 pD3DDevice, D3DXVECTOR3 moveVector1, D3DXVECTOR3 moveVector2, float scale, float z, float rollAngle);
37+ int Transform(
38+ LPDIRECT3DDEVICE9 pD3DDevice,
39+ D3DXVECTOR3 basePosVector,
40+ D3DXVECTOR3 playbackPosVector,
41+ float rollAngle
42+ );
3843
3944 //キー状態変更
4045 virtual int PushKey(
--- a/MIDITrail/template/conf/PianoRoll2D.ini
+++ b/MIDITrail/template/conf/PianoRoll2D.ini
@@ -68,7 +68,7 @@ ReleaseDuration=250
6868 SrcBlend=5
6969 DestBlend=2
7070 OverwriteTimes=3
71-;-- e.g.) BlackBG : Src/Dest/Overwrite = 5/2/3, PictureBG : Src/Dest/Overwrite = 5/2/2
71+;-- e.g.) BlackBG : Src/Dest/Overwrite = 5/2/3, PictureBG : Src/Dest/Overwrite = 5/2/1
7272 Spacing=0.002
7373
7474 [Stars]
--- a/MIDITrail/template/conf/PianoRoll3D.ini
+++ b/MIDITrail/template/conf/PianoRoll3D.ini
@@ -68,7 +68,7 @@ ReleaseDuration=250
6868 SrcBlend=5
6969 DestBlend=2
7070 OverwriteTimes=3
71-;-- e.g.) BlackBG : Src/Dest/Overwrite = 5/2/3, PictureBG : Src/Dest/Overwrite = 5/2/2
71+;-- e.g.) BlackBG : Src/Dest/Overwrite = 5/2/3, PictureBG : Src/Dest/Overwrite = 5/2/1
7272 Spacing=0.002
7373
7474 [Stars]
--- a/readme_mod_yossiepon.txt
+++ b/readme_mod_yossiepon.txt
@@ -1,13 +1,14 @@
11 ピカピカMIDITrail 鍵盤方向自動切替・多ポート・歌詞対応等
22
3-MIDITrail 1.2.3 mod. yossiepon_20180404
3+MIDITrail 1.2.3 mod. yossiepon_20180412
44 mail: yoshy@users.sourceforge.jp
55
6-改造点 20180404:
6+改造点 20180412:
77 ・[UPDATE] 1.2.3をマージ
88 ・[ADD] リップルと背景画像のブレンド方法を指定できる設定を追加
99  →INIファイル中のRippleセクション SrcBlendおよびDestBlend
1010 ・[FIX] 多ポートのシーケンスでPianoRoll2Dのキーボードが1つに集約されない不具合を修正
11+・[FIX] PianoRoll3Dで多ポート時のキーボード基準位置がずれている不具合を修正
1112
1213 改造点 20170528:
1314 ・[FIX] タイトル(シーケンス名)が空の場合、ファイル名を代替表示するよう修正