OSDN Git Service

[DTXV] #26010 #PAN EL (WAV番号=ELの#PAN)を#PANELと誤認識しないよう修正。
[dtxmania/dtxmania.git] / @FDK10プロジェクト / DTX.cpp
1 #include "stdafx.h"\r
2 #include "Debug.h"\r
3 #include "DTX.h"\r
4 #include "CFileMM.h"\r
5 #include "MD5.h"\r
6 #include "str2float.h"\r
7 #include "CAvi.h"\r
8 \r
9 namespace FDK {\r
10         namespace General {\r
11 \r
12 #ifndef SKIPSP\r
13 #define SKIPSP(p)       {while(*p==' '||*p=='\t')p++;}\r
14 #endif\r
15 #ifndef SKIPSP_BGA\r
16 #define SKIPSP_BGA(p)   {while(*p==' '||*p=='\t'||*p==','||*p=='('||*p==')'||*p=='['||*p==']'||*p=='x'||*p=='|')p++;}\r
17 #endif\r
18 #ifndef SKIPDEC\r
19 #define SKIPDEC(p)      {while((*p>='0'&&*p<='9')||*p=='-'||*p=='+')p++;}\r
20 #endif\r
21 #ifndef SKIPHEX\r
22 #define SKIPHEX(p)      {while((*p>='0'&&*p<='9')||(*p>='a'&&*p<='f')||(*p>='A'&&*p<='F')||*p=='-'||*p=='+')p++;}\r
23 #endif\r
24 #ifndef SKIPZEX\r
25 #define SKIPZEX(p)      {while((*p>='0'&&*p<='9')||(*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')||*p=='-'||*p=='+')p++;}\r
26 #endif\r
27 \r
28 static const int s_nChannelToLane[10] = { 1,2,3,4,5,7,6,1,7,0 };                // Ch\82É\91Î\89\9e\82·\82é\83\8c\81[\83\93\94Ô\8d\86\r
29 \r
30 DTX::DTX()\r
31 {\r
32         // Clear() \82æ\82è\91O\82É\8f\89\8aú\89»\82ª\95K\97v\82È\82à\82Ì\82¾\82¯\82±\82±\82Å\8f\89\8aú\89»\82·\82é\r
33         this->pBPM              = this->pBPMLast        = NULL;\r
34         this->pWave             = this->pWaveLast       = NULL;\r
35         this->pBMP              = this->pBMPLast        = NULL;\r
36         this->pBMPTEX   = this->pBMPTEXLast     = NULL;\r
37         this->pBGA              = this->pBGALast        = NULL;\r
38         this->pBGAPan   = this->pBGAPanLast     = NULL;\r
39         this->pAVI              = this->pAVILast        = NULL;\r
40         this->pAVIPan   = this->pAVIPanLast     = NULL;\r
41         this->pChip             = this->pChipLast       = NULL;\r
42 \r
43         this->pTimer                                    = NULL;\r
44         this->bDTXV                                             = false;\r
45         this->bWAVCache                                 = true;\r
46         this->bBMPCache                                 = true;\r
47 }\r
48 \r
49 DTX::~DTX()\r
50 {\r
51         Clear();\r
52 }\r
53 \r
54 // \8f\89\8aú\89»\r
55 void DTX::Clear()\r
56 {\r
57         // \93à\95\94\8fó\91Ô\82Ì\8f\89\8aú\89» \r
58         this->strFullPath.clear();\r
59         this->strFolder.clear();\r
60         this->strFileExt[0]                     = _T('\0');\r
61         this->scoreType                         = SCORETYPE_UNKNOWN;\r
62         this->strTitle.clear();\r
63         this->strArtist.clear();\r
64         this->strComment.clear();\r
65         this->strPanel.clear();\r
66         this->strGenre.clear();\r
67         this->bHiddenLevel = false;\r
68         for( int i = 0; i < 3; i++ )\r
69                 this->nLevel[i]                 = 0;\r
70         this->dbBPM                                     = 0.0;\r
71         this->dbBaseBPM                         = 0.0;\r
72         this->strStage.clear();\r
73         this->strPresound.clear();\r
74         this->strPreimage.clear();\r
75         this->strPremovie.clear();\r
76         this->strBackground.clear();\r
77         this->strBackgroundGR.clear();\r
78         for( int i = 0; i < 7; i++ ) {\r
79                 this->strResultImage[i].clear();\r
80                 this->strResultMovie[i].clear();\r
81         }\r
82         this->strMIDI.clear();\r
83         this->bMIDINote                         = false;\r
84         this->nMIDILevel                        = 0;\r
85         this->bBlackColorKey            = true;\r
86         this->strPathWav.clear();\r
87         this->fSpeed                            = 1.0f;\r
88         this->bHeaderOnly                       = false;\r
89 \r
90         for( int i = 0; i < 10; i++)\r
91                 this->nTotalChipsD[ i ] = 0;\r
92         this->nTotalChipsG                      = 0;\r
93         this->nTotalChipsB                      = 0;\r
94         this->bUseDrum                          = false;\r
95         this->bUseGuitar                        = false;\r
96         this->bUseBass                          = false;\r
97         this->bUseHHOpen                        = false;\r
98         this->bUseRide                          = false;\r
99         this->bUseLeftCymal                     = false;\r
100         this->strHash[0]                        = _T('\0');\r
101         // BPM\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
102         {\r
103                 BPM* b = this->pBPM;\r
104                 while( b != NULL )\r
105                         {\r
106                         BPM* n = b->next;\r
107                         SAFE_DELETE( b );\r
108                         b = n;\r
109                 }\r
110                 this->pBPM = this->pBPMLast = NULL;\r
111         }\r
112         // WAV\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
113         {\r
114                 Wave* w = this->pWave;\r
115                 while( w != NULL )\r
116                 {\r
117                         // Wave::sound[][] \82Ì\89ð\95ú\82Í\83T\83E\83\93\83h\83}\83l\81[\83W\83\83\82Å\8ds\82¤\82½\82ß\81A\82±\82±\82Å\82Í\89ð\95ú\82µ\82È\82¢\81B\r
118                         Wave* n = w->next;\r
119                         SAFE_DELETE( w );\r
120                         w = n;\r
121                 }\r
122                 this->pWave = this->pWaveLast = NULL;\r
123         }\r
124         // BMP\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
125         {\r
126                 BMP* bm = this->pBMP;\r
127                 while( bm != NULL )\r
128                 {\r
129                         // BMP::pSurface \82Ì\89ð\95ú\82Í\83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\82Å\8ds\82¤\82½\82ß\81A\82±\82±\82Å\82Í\89½\82à\82µ\82È\82¢\81B\r
130                         BMP* n = bm->next;\r
131                         SAFE_DELETE( bm );\r
132                         bm = n;\r
133                 }\r
134                 this->pBMP = this->pBMPLast = NULL;\r
135                 this->bUseBMP                           = false;\r
136                 this->dwBMPWidthMax                     = 0;\r
137                 this->dwBMPHeightMax            = 0;\r
138         }\r
139         // BMPTEX\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
140         {\r
141                 BMPTEX* bmt = this->pBMPTEX;\r
142                 while( bmt != NULL )\r
143                 {\r
144                         // BMPTEX::pTexture \82Ì\89ð\95ú\82Í\83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\82Å\8ds\82¤\82½\82ß\81A\82±\82±\82Å\82Í\89½\82à\82µ\82È\82¢\81B\r
145                         BMPTEX* n = bmt->next;\r
146                         SAFE_DELETE( bmt );\r
147                         bmt = n;\r
148                 }\r
149                 this->pBMPTEX = this->pBMPTEXLast = NULL;\r
150                 this->bUseBMPTEX                        = false;\r
151                 this->dwBMPTEXWidthMax          = 0;\r
152                 this->dwBMPTEXHeightMax         = 0;\r
153         }\r
154         // BGA\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
155         {\r
156                 BGA* bg = this->pBGA;\r
157                 while( bg != NULL )\r
158                 {\r
159                         BGA* n = bg->next;\r
160                         SAFE_DELETE( bg );\r
161                         bg = n;\r
162                 }\r
163                 this->pBGA = this->pBGALast = NULL;\r
164         }\r
165         // BGAPAN\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
166         {\r
167                 BGAPan* bp = this->pBGAPan;\r
168                 while( bp != NULL )\r
169                 {\r
170                         BGAPan* n = bp->next;\r
171                         SAFE_DELETE( bp );\r
172                         bp = n;\r
173                 }\r
174                 this->pBGAPan = this->pBGAPanLast = NULL;\r
175         }\r
176         // AVI\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
177         {\r
178                 this->tAVI\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»();\r
179         }\r
180         // AVIPAN\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
181         {\r
182                 this->tAVIPAN\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»();\r
183         }\r
184         // CHIP\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89» \r
185         {\r
186                 this->tCHIP\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»();\r
187         }\r
188         // Cache OFF \82Ì\8fê\8d\87\82Í\81A\8eÀ\83f\81[\83^\82ð\82±\82±\82Å\82·\82×\82Ä\89ð\95ú\82·\82é\81\r
189         if( ! this->bWAVCache ) {\r
190                 this->soundManager.t\8eg\97p\83t\83\89\83O\82ð\83N\83\8a\83A\82µ\95¡\90»\83Z\83\8b\82ð\8dí\8f\9c\82·\82é();\r
191                 this->soundManager.t\96¢\8eg\97p\83T\83E\83\93\83h\82ð\8dí\8f\9c\82·\82é();\r
192         }\r
193         if( ! this->bBMPCache ) {\r
194                 this->textureManager.ResetCache();\r
195                 this->textureManager.RemoveUnusedTextures();\r
196                 this->surfaceManager.ResetCache();\r
197                 this->surfaceManager.RemoveUnusedSurfaces();\r
198         }\r
199 }\r
200 void DTX::tAVI\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»()\r
201 {\r
202         AVI* a = this->pAVI;\r
203         while( a != NULL )\r
204         {\r
205                 if( a->bUse )\r
206                         a->avi.Close();\r
207                 AVI* n = a->next;\r
208                 SAFE_DELETE( a );\r
209                 a = n;\r
210         }\r
211         this->pAVI = this->pAVILast = NULL;\r
212         this->bUseAVI   = false;\r
213 }\r
214 void DTX::tAVIPAN\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»()\r
215 {\r
216         AVIPan* ap = this->pAVIPan;\r
217         while( ap != NULL )\r
218         {\r
219                 AVIPan* n = ap->next;\r
220                 SAFE_DELETE( ap );\r
221                 ap = n;\r
222         }\r
223         this->pAVIPan = this->pAVIPanLast = NULL;\r
224 }\r
225 void DTX::tCHIP\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»()\r
226 {\r
227         Chip* c = this->pChip;\r
228         while( c != NULL )\r
229         {\r
230                 Chip* n = c->next;\r
231                 SAFE_DELETE( c );\r
232                 c = n;\r
233         }\r
234         this->pChip = this->pChipLast = NULL;\r
235 }\r
236 // Activity\r
237 bool DTX::MyOneTimeSceneInit()\r
238 {\r
239         // \83T\83E\83\93\83h\83}\83l\81[\83W\83\83\82Ì\8f\89\8aú\89»\r
240         this->soundManager.Init( CD3DApplication::hWnd, DSSCL_PRIORITY );\r
241 \r
242         // \83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\82Ì\8f\89\8aú\89»\r
243         this->textureManager.OneTimeSceneInit();\r
244 \r
245         // \83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\82Ì\8f\89\8aú\89»\r
246         this->surfaceManager.OneTimeSceneInit();\r
247 \r
248 \r
249         return Activity::MyOneTimeSceneInit();\r
250 }\r
251 \r
252 bool DTX::MyActivate()\r
253 {\r
254         // \8aù\82É\8a\88\90«\89»\82µ\82Ä\82½\82ç\89½\82à\82µ\82È\82¢\r
255         if( this->bActivate )\r
256                 return true;\r
257 \r
258         // \93à\95\94\83\8a\83\\81[\83X\82Ì\89ð\95ú\r
259         this->Clear();\r
260 \r
261         return Activity::MyActivate();\r
262 }\r
263 \r
264 bool DTX::MyUnActivate()\r
265 {\r
266         // \8a\88\90«\89»\82µ\82Ä\82È\82¢\82È\82ç\89½\82à\82µ\82È\82¢\r
267         if( ! this->bActivate ) \r
268                 return true;\r
269 \r
270         this->tAVI\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»();\r
271         this->tAVIPAN\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»();\r
272         this->tCHIP\83\8a\83X\83g\82Ì\89ð\95ú\82Æ\8f\89\8aú\89»();\r
273 \r
274         return Activity::MyUnActivate();\r
275 }\r
276 \r
277 bool DTX::MyFinalCleanup()\r
278 {\r
279         this->soundManager.Term();                              // \83T\83E\83\93\83h\83}\83l\81[\83W\83\83\82Ì\8fI\97¹\r
280         this->textureManager.FinalCleanup();    // \83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\82Ì\8fI\97¹\r
281         this->surfaceManager.FinalCleanup();    // \83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\82Ì\8fI\97¹\r
282 \r
283         return Activity::MyFinalCleanup();\r
284 }\r
285 \r
286 bool DTX::MyInitDeviceObjects()\r
287 {\r
288         this->textureManager.InitDeviceObjects();       // \83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\r
289         this->surfaceManager.InitDeviceObjects();       // \83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\r
290 \r
291         return Activity::MyInitDeviceObjects();\r
292 }\r
293 \r
294 bool DTX::MyRestoreDeviceTextures()\r
295 {\r
296         // \8a\88\90«\89»\82µ\82Ä\82È\82¢\82È\82ç\96³\8cø\r
297         if( ! this->bActivate ) \r
298                 return true;\r
299 \r
300         // \83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\82Ì\8d\\92z\r
301         this->textureManager.RestoreDeviceObjects();\r
302 \r
303         return Activity::MyRestoreDeviceTextures();\r
304 }\r
305 \r
306 bool DTX::MyRestoreDeviceSurfaces()\r
307 {\r
308         // \8a\88\90«\89»\82µ\82Ä\82È\82¢\82È\82ç\96³\8cø\r
309         if( ! this->bActivate ) \r
310                 return true;\r
311 \r
312         // \83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\82Ì\8d\\92z\r
313         this->surfaceManager.RestoreDeviceObjects();\r
314 \r
315         // \8d\95\93§\89ß\82ª\97L\8cø\82È\82ç\81A\91SBMP\82Ì\83J\83\89\81[\83L\81[\82ð 0xFF000000 \82É\90Ý\92è\82·\82é\81B\r
316         if( this->bBlackColorKey )\r
317         {\r
318                 for( BMP* bmp = this->pBMP; bmp != NULL; bmp = bmp->next )\r
319                 {\r
320                         if( bmp->pSurface )\r
321                                 bmp->pSurface->SetColorKey( 0xff000000 );\r
322                 }\r
323         }\r
324 \r
325         return Activity::MyRestoreDeviceSurfaces();\r
326 }\r
327 \r
328 bool DTX::MyInvalidateDeviceObjects()\r
329 {\r
330         // \8a\88\90«\89»\82µ\82Ä\82È\82¢\82È\82ç\96³\8cø\r
331         if( ! this->bActivate ) \r
332                 return true;\r
333 \r
334         this->textureManager.InvalidateDeviceObjects();         // \83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\82Ì\89ð\95ú\r
335         this->surfaceManager.InvalidateDeviceObjects();         // \83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\82Ì\89ð\95ú\r
336 \r
337         return Activity::MyInvalidateDeviceObjects();\r
338 }\r
339 \r
340 bool DTX::MyDeleteDeviceObjects()\r
341 {\r
342         this->textureManager.DeleteDeviceObjects();             // \83e\83N\83X\83`\83\83\83}\83l\81[\83W\83\83\82Ì\94j\8aü\r
343         this->surfaceManager.DeleteDeviceObjects();             // \83T\81[\83t\83F\83C\83X\83}\83l\81[\83W\83\83\82Ì\94j\8aü\r
344 \r
345         return Activity::MyDeleteDeviceObjects();\r
346 }\r
347 \r
348 // \89\89\91t\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\r
349 bool DTX::Load( LPCTSTR fname, bool bHeaderOnly, double dbPlaySpeed )\r
350 {\r
351         // (0) \91O\8f\80\94õ \r
352         {\r
353                 this->bHeaderOnly = bHeaderOnly;\r
354 \r
355                 if( this->nMIDILevel > 2 )\r
356                         this->nMIDILevel = 2;\r
357 \r
358                 // \83t\83@\83C\83\8b\82ª\8aJ\82¯\82È\82¯\82ê\82Î\82±\82±\82Å\8fI\97¹ \r
359                 FILE *fp;\r
360                 if( _tfopen_s( &fp, fname, _T("rt") ) != 0 )\r
361                         return false;\r
362                 fclose( fp );\r
363         }\r
364         // (1) \83t\83@\83C\83\8b\96¼\81A\8ag\92£\8eq\81A\83t\83H\83\8b\83_\96¼\82ð\95Û\91¶ \81¨ strFullPath, strFolder, strFileExt \r
365         {\r
366                 TCHAR strDrive[ _MAX_DRIVE ];\r
367                 TCHAR strDir[_MAX_DIR ];\r
368                 if( _tsplitpath_s( fname, strDrive, _MAX_DRIVE, strDir, _MAX_DIR, NULL, 0, NULL, 0 ) != 0 )\r
369                         return false;\r
370 \r
371                 // \83t\83@\83C\83\8b\96¼\r
372                 this->strFullPath = fname;\r
373 \r
374                 // \83t\83H\83\8b\83_\96¼\r
375                 this->strFolder  = strDrive;\r
376                 this->strFolder += strDir;\r
377 \r
378                 // \8ag\92£\8eq\r
379                 CFileMM::GetExt( this->strFullPath.c_str(), this->strFileExt );\r
380         }\r
381         // (2) \8ag\92£\8eq\82©\82ç\83f\81[\83^\83^\83C\83v\82ð\8c\88\92è \81¨ scoreType \r
382         {\r
383                 static struct _dataType {\r
384                         LPTSTR                  ext;\r
385                         ScoreType               type;\r
386                         LPTSTR                  typeName;\r
387                 } s_dataType[] = {\r
388                         { _T("dtx"), SCORETYPE_DTX, _T("DTX") },\r
389                         { _T("bms"), SCORETYPE_BMS, _T("BMS") },\r
390                         { _T("bme"), SCORETYPE_BMS, _T("BMS(BME)") },\r
391                         { _T("gda"), SCORETYPE_GDA, _T("GDA") },\r
392                         { _T("g2d"), SCORETYPE_G2D, _T("G2D") },\r
393                         { _T("mid"), SCORETYPE_MID, _T("MIDI") },\r
394                         { _T("tmp"), SCORETYPE_DTX, _T("DTX") },                // for GDAC2\r
395                         { _T(""), SCORETYPE_UNKNOWN, _T("UNKNOWN") }\r
396                 };\r
397                 for( int i = 0; i < 99; i++)\r
398                 {\r
399                         if( s_dataType[i].type == SCORETYPE_UNKNOWN )\r
400                         {\r
401                                 this->scoreType = SCORETYPE_UNKNOWN;            // \96¢\92m\r
402                                 break;\r
403                         }\r
404                         else if( lstrcmpi( this->strFileExt, s_dataType[i].ext ) == 0 )\r
405                         {\r
406                                 this->scoreType = s_dataType[i].type;\r
407                                 break;\r
408                         }\r
409                 }\r
410 \r
411                 // DTXV \82Å\82Í\81ADTX \88È\8aO\82Í\93Ç\82Ý\8d\9e\82Ü\82È\82¢(2004.01.12)\r
412                 if( this->bDTXV && this->scoreType != SCORETYPE_DTX )\r
413                         return false;\r
414         }\r
415         // (3) \83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ \r
416         switch( this->scoreType )\r
417         {\r
418         case SCORETYPE_DTX:\r
419         case SCORETYPE_BMS:\r
420         case SCORETYPE_G2D:\r
421         case SCORETYPE_GDA:\r
422                 this->LoadDTX();\r
423                 break;\r
424 \r
425         case SCORETYPE_MID:\r
426                 this->LoadMID();\r
427                 break;\r
428         }\r
429         // (4) \93Ç\82Ý\8d\9e\82Ý\8cã\82Ì\8f\88\97\9d \r
430         if( ! this->bHeaderOnly )\r
431         {\r
432                 // (4-1) \8f¬\90ß\90ü\82Æ\94\8f\90ü\82ð\91}\93ü\82·\82é\81iMIDI\88È\8aO\81j\r
433                 if( this->scoreType != SCORETYPE_MID )\r
434                         this->InsertLines();\r
435 \r
436                 // (4-2) \83`\83b\83v\82Ì\94­\90º\8e\9e\8d\8f\82ð\90\90¬\82·\82é\81iMIDI\88È\8aO\81j\r
437                 if( this->scoreType != SCORETYPE_MID )\r
438                         CalcChipTime();\r
439 \r
440                 // (4-3) \8ae\83`\83b\83v\82Ì\94­\90º\8e\9e\8d\8f\82ð dbPlaySpeed \82É\82 \82í\82¹\82Ä\92²\90®\82·\82é\81iDTX, MID \8b¤\92Ê\81j\r
441                 AdujstChipTimeByPlaySpeed( dbPlaySpeed );\r
442 \r
443                 // (4-4) \89Â\8e\8b\83`\83b\83v\90\94\82ð\90\94\82¦\82é \81¨ nTotalChipsD/G/B \r
444                 {\r
445                         for( int i = 0; i < 10; i++ )\r
446                                 this->nTotalChipsD[ i ] = 0;\r
447                         this->nTotalChipsG = 0;\r
448                         this->nTotalChipsB = 0;\r
449                         \r
450                         for( Chip* cell = this->pChip; cell != NULL; cell = cell->next )\r
451                         {\r
452                                 if( cell->nChannel >= 0x11 && cell->nChannel <= 0x1A )\r
453                                         this->nTotalChipsD[ cell->nChannel - 0x11 ] ++;\r
454                                 else if( cell->nChannel >= 0x20 && cell->nChannel <= 0x27 )\r
455                                         this->nTotalChipsG ++;\r
456                                 else if( cell->nChannel >= 0xA0 && cell->nChannel <= 0xA7 ) \r
457                                         this->nTotalChipsB ++;\r
458                         }\r
459                 }\r
460                 // (4-5) \83\8c\81[\83\93\82²\82Æ\82É\8eg\97p\82·\82éWAV\82ð\93o\98^\82·\82é\81iLoadWAV()\82Ì\91O\82É\8ds\82¤\82±\82Æ\81I\81j\r
461                 if( !this->bHeaderOnly )\r
462                 {\r
463                         // (4-5-1) \83r\83b\83g\83}\83X\83N\8f\80\94õ \r
464                         WORD wWaveToLane[ 36*36 ];      // 00..ZZ = 0\81`36*36-1\r
465                         for( int i = 0; i < 36*36; i++ )\r
466                                 wWaveToLane[ i ] = 0;\r
467 \r
468                         // (4-5-2) \91S\83`\83b\83v\82ð\91\96\8d¸\82µ\81A\8eg\97p\82·\82é\83\8c\81[\83\93\82Ì\8aY\93\96\83r\83b\83g\82ð\97§\82Ä\82Ä\82ä\82­\81\r
469                         for( Chip *cp = this->pChip; cp != NULL; cp = cp->next )\r
470                         {\r
471                                 switch( cp->nChannel )\r
472                                 {\r
473                                 case 0x11: case 0x31: case 0xB1: wWaveToLane[ cp->nParam ] |= 0x002; break;             // HH\r
474                                 case 0x12: case 0x32: case 0xB2: wWaveToLane[ cp->nParam ] |= 0x004; break;             // SD\r
475                                 case 0x13: case 0x33: case 0xB3: wWaveToLane[ cp->nParam ] |= 0x008; break;             // BD\r
476                                 case 0x14: case 0x34: case 0xB4: wWaveToLane[ cp->nParam ] |= 0x010; break;             // HT\r
477                                 case 0x15: case 0x35: case 0xB5: wWaveToLane[ cp->nParam ] |= 0x020; break;             // LT\r
478                                 case 0x16: case 0x36: case 0xB6: wWaveToLane[ cp->nParam ] |= 0x080; break;             // CY\r
479                                 case 0x17: case 0x37: case 0xB7: wWaveToLane[ cp->nParam ] |= 0x040; break;             // FT\r
480                                 case 0x18: case 0x38: case 0xB8: wWaveToLane[ cp->nParam ] |= 0x002; break;             // HH\r
481                                 case 0x19: case 0x39: case 0xB9: wWaveToLane[ cp->nParam ] |= 0x080; break;             // RD\r
482                                 case 0x1A: case 0x3A: case 0xBC: wWaveToLane[ cp->nParam ] |= 0x001; break;             // LC\r
483                                 case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0xBA:\r
484                                         wWaveToLane[ cp->nParam ] |= 0x100; break;                                                                                                                                      // Guitar\r
485                                 case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xBB:\r
486                                         wWaveToLane[ cp->nParam ] |= 0x200; break;                                                                                                                                      // Bass\r
487                                 case 0x01: case 0x1F: case 0x2F: case 0xAF:\r
488                                 case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x70:\r
489                                 case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x80:\r
490                                 case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x90:\r
491                                 case 0x91: case 0x92:\r
492                                         wWaveToLane[ cp->nParam ] |= 0x400; break;                                                                                                                                      // BGM\r
493                                 }\r
494                         }\r
495                         // (4-5-3) \91SWav\82É\82Â\82¢\82Ä\81A\8eg\97p\82·\82é\83\8c\81[\83\93\82¾\82¯ true \82É\82·\82é\81\r
496                         for( Wave *wp = this->pWave; wp != NULL; wp = wp->next ) {\r
497                                 for( int i = 0; i < 11; i++ )\r
498                                         wp->bUseByLane[ i ] = ( wWaveToLane[ wp->vnum ] & (0x001 << i) ) ? true : false;\r
499                         }\r
500                 }\r
501                 // (4-6) WAV \82Ì\93o\98^\81\95\8d\\92\r
502                 this->LoadWAV();\r
503         }\r
504         // (4-7) \8bÈ\83f\81[\83^\83n\83b\83V\83\85\82Ì\8cv\8e\r
505         this->CalcHash();\r
506 \r
507         return true;\r
508 }\r
509 void DTX::LoadDTX()\r
510 {\r
511         FILE *fp;\r
512         if( _tfopen_s( &fp, this->strFullPath.c_str(), _T("rt") ) != 0 )\r
513                 return;         // \8e¸\94s\r
514 \r
515         // (1) \8f\89\8aú\89» \r
516         {\r
517                 // (1-1) \93Ç\82Ý\8d\9e\82Ý\8dì\8bÆ\97p\95Ï\90\94\82Ì\8f\89\8aú\89» \r
518                 for( int i = 0; i < 36*36; i++ )\r
519                 {\r
520                         m_nWaveNum[i]   = -i;\r
521                         m_nWaveVol[i]   = -i;\r
522                         m_nWavePan[i]   = -10000-i;             // pan \82Í -100\81`100\82È\82Ì\82Å\81A\83o\83b\83e\83B\83\93\83O\82µ\82È\82¢\82æ\82¤\92l\88æ\82ð\82¸\82ç\82·\81B\r
523                         m_nBPMNum[i]    = -i;\r
524                         m_nBMPNum[i]    = -i;\r
525                         m_nBMPTEXNum[i] = -i;\r
526                         m_nBGANum[i]    = -i;\r
527                         m_nBGAPanNum[i] = -i;\r
528                 }\r
529                 m_nWaveNumCur   = 0;\r
530                 m_nBPMNumCur    = 0;\r
531                 m_nBMPNumCur    = 0;\r
532 \r
533                 // (1-2) #RESULTIMAGE/MOVIE/SOUND \97\97D\90æ\8f\87\88Ê\83o\83b\83t\83@\82Ì\8f\89\8aú\89» \r
534                 for( int i = 0; i < 7; i++ )\r
535                 {\r
536                         m_nResultImagePriority[i] = 0;\r
537                         m_nResultMoviePriority[i] = 0;\r
538                         m_nResultSoundPriority[i] = 0;\r
539                 }\r
540         }\r
541         // (2) \8ds\82ª\90s\82«\82é\82Ü\82Å\93Ç\82Ý\8d\9e\82Ý\81\95\8f\88\97\9d\82·\82é \r
542         m_nLine = 0;\r
543         m_nRand   = 0;\r
544         m_nSkip   = 0;\r
545         m_bSkip[ m_nSkip ] = false;\r
546 \r
547         TCHAR* strLine = (TCHAR*) malloc( DTX_LINELEN );                // \81¦\93Ç\82Ý\8d\9e\82Ý\8ds\82Í malloc \82Å\8am\95Û\r
548         \r
549         while( _fgetts( strLine, DTX_LINELEN, fp ) != NULL )\r
550         {\r
551                 TCHAR* p;\r
552                 int zz;\r
553 \r
554                 m_nLine ++;\r
555 \r
556                 // \89ü\8ds\83R\81[\83h\82Æ\83R\83\81\83\93\83g\82ð\8dí\8f\9c\82·\82é \r
557                 {\r
558                         TCHAR* pLineTop = strLine;\r
559                         for( TCHAR* p = strLine; *p != _T('\0'); p++ )\r
560                         {\r
561                                 // a. ';' \88È\8d~\82Í\83R\83\81\83\93\83g\82Æ\82µ\82Ä\96³\8e\8b \r
562                                 if( *p == _T(';') )\r
563                                 {\r
564                                         *p = _T('\0');\r
565                         \r
566                                         // ';' \82Ì\92¼\91O\82Ì\8bó\94\92\82à\8dí\8f\9c\r
567                                         if( p != pLineTop )\r
568                                                 p --;\r
569                                         while( p != pLineTop && ( *p == _T(' ') || *p == _T('\t') ) )\r
570                                         {\r
571                                                 *p = _T('\0');\r
572                                                 p --;\r
573                                         }\r
574                                         break;\r
575                                 }\r
576 \r
577                                 // b. \89ü\8ds\83R\81[\83h\82Í\8dí\8f\9c\r
578                                 else if( *p == _T('\n') )\r
579                                 {\r
580                                         *p = _T('\0');\r
581                                         break;\r
582                                 }\r
583                         }\r
584                 }\r
585 \r
586                 // \8ds\93ª\82ª # \82Å\82È\82¢\8ds\82Í\83X\83L\83b\83v\82·\82é \r
587                 p = strLine;\r
588                 SKIPSP( p );\r
589                 if( *p != _T('#') )\r
590                         continue;\r
591                 p++;\r
592 \r
593 \r
594                 // #IF \r
595                 if( IsCommand( &p, _T("IF") ) )\r
596                 {\r
597                         if( m_nSkip == 255 )\r
598                                 continue;       // #IF \82Ì\93ü\82ê\8eq\90\94\82ª 255 \82ð\92´\82¦\82½ \81¨ \82±\82Ì #IF \82Í\96³\8cø\r
599 \r
600                         if( m_bSkip[ m_nSkip ] )\r
601                                 m_bSkip[ ++m_nSkip ] = true;                    // \83X\83L\83b\83v\92\86\82É\8c»\82ê\82½IF\82Í\83X\83L\83b\83v\r
602                         else\r
603                                 m_bSkip[ ++m_nSkip ] = ( _tstoi( p ) == m_nRand ) ? false : true;\r
604                         continue;\r
605                 }\r
606 \r
607                 // #ENDIF \r
608                 if( IsCommand( &p, _T("ENDIF") ) )\r
609                 {\r
610                         if( m_nSkip > 0 )       // \91Î\89\9e\82·\82é #IF \82ª\82 \82é\r
611                                 m_nSkip--;\r
612                         continue;\r
613                 }\r
614 \r
615                 \r
616                 // \82±\82ê\88È\8d~\82Í\81A\83X\83L\83b\83v\92\86\82È\82ç\96³\8e\8b\82·\82é\81B\r
617                 if( m_bSkip[ m_nSkip ] ) continue;\r
618                 \r
619                 // #PATH_WAV \r
620                 if( IsCommand( &p, _T("PATH_WAV") ) )\r
621                 {\r
622                         this->strPathWav = p;\r
623                         continue;\r
624                 }\r
625                 // #TITLE \r
626                 if( IsCommand( &p, _T("TITLE") ) )\r
627                 {\r
628                         this->strTitle = p;\r
629                         continue;\r
630                 }\r
631                 // #ARTIST \r
632                 if( IsCommand( &p, _T("ARTIST") ) )\r
633                 {\r
634                         this->strArtist = p;\r
635                         continue;\r
636                 }\r
637                 // #COMMENT \r
638                 if( IsCommand( &p, _T("COMMENT") ) )\r
639                 {\r
640                         this->strComment = p;\r
641                         continue;\r
642                 }\r
643                 // #DLEVEL, #PLAYLEVEL \r
644                 if( IsCommand( &p, _T("DLEVEL") ) || IsCommand( &p, _T("PLAYLEVEL") ) )\r
645                 {\r
646                         this->nLevel[ 0 ] = _ttoi( p );\r
647 \r
648                         // \8fí\82É 100 \92i\8aK\82¾\82Æ\82Ý\82È\82·\81B\81i10\92i\8aK\83f\81[\83^\82Ì\83T\83|\81[\83g\82Í\8fI\97¹\81I(07.05.27)\81j\r
649                         if( this->nLevel[ 0 ] <   0 ) this->nLevel[ 0 ] =   0;\r
650                         if( this->nLevel[ 0 ] > 100 ) this->nLevel[ 0 ] = 100;\r
651                         continue;\r
652                 }\r
653                 // #GLEVEL \r
654                 if( IsCommand( &p, _T("GLEVEL") ) )\r
655                 {\r
656                         this->nLevel[ 1 ] = _ttoi( p );\r
657 \r
658                         // \8fí\82É 100 \92i\8aK\82¾\82Æ\82Ý\82È\82·\81B\81i10\92i\8aK\83f\81[\83^\82Ì\83T\83|\81[\83g\82Í\8fI\97¹\81I(07.05.27)\81j\r
659                         if( this->nLevel[ 1 ] <   0 ) this->nLevel[ 1 ] =   0;\r
660                         if( this->nLevel[ 1 ] > 100 ) this->nLevel[ 1 ] = 100;\r
661                         continue;\r
662                 }\r
663                 // #BLEVEL \r
664                 if( IsCommand( &p, _T("BLEVEL") ) )\r
665                 {\r
666                         this->nLevel[ 2 ] = _ttoi( p );\r
667 \r
668                         // \8fí\82É 100 \92i\8aK\82¾\82Æ\82Ý\82È\82·\81B\81i10\92i\8aK\83f\81[\83^\82Ì\83T\83|\81[\83g\82Í\8fI\97¹\81I(07.05.27)\81j\r
669                         if( this->nLevel[ 2 ] <   0 ) this->nLevel[ 2 ] =   0;\r
670                         if( this->nLevel[ 2 ] > 100 ) this->nLevel[ 2 ] = 100;\r
671                         continue;\r
672                 }\r
673                 // #GENRE \r
674                 if( IsCommand( &p, _T("GENRE") ) )\r
675                 {\r
676                         this->strGenre = p;\r
677                         continue;\r
678                 }\r
679                 // #HIDDENLEVEL \r
680                 if( IsCommand( &p, _T("HIDDENLEVEL") ) )\r
681                 {\r
682                         this->bHiddenLevel = ((*p==_T('o') || *p==_T('O')) && (*(p+1)==_T('n') || *(p+1)==_T('N'))) ? true : false;\r
683                         continue;\r
684                 }\r
685                 // #STAGEFILE \r
686                 if( IsCommand( &p, _T("STAGEFILE") ) )\r
687                 {\r
688                         this->strStage = p;\r
689                         continue;\r
690                 }\r
691                 // #PREVIEW \r
692                 if( IsCommand( &p, _T("PREVIEW") ) )\r
693                 {\r
694                         this->strPresound = p;\r
695                         continue;\r
696                 }\r
697                 // #PREIMAGE \r
698                 if( IsCommand( &p, _T("PREIMAGE") ) )\r
699                 {\r
700                         this->strPreimage = p;\r
701                         continue;\r
702                 }\r
703                 // #PREMOVIE \r
704                 if( IsCommand( &p, _T("PREMOVIE") ) )\r
705                 {\r
706                         this->strPremovie = p;\r
707                         continue;\r
708                 }\r
709                 // #BACKGROUND_GR \r
710                 if( IsCommand( &p, _T("BACKGROUND_GR") ) )\r
711                 {\r
712                         this->strBackgroundGR = p;\r
713                         continue;\r
714                 }\r
715                 // #BACKGROUND, #WALL \r
716                 if( IsCommand( &p, _T("BACKGROUND") ) || IsCommand( &p, _T("WALL") ) )\r
717                 {\r
718                         this->strBackground = p;\r
719                         continue;\r
720                 }\r
721                 // #RANDOM \r
722                 if( IsCommand( &p, _T("RANDOM") ) )\r
723                 {\r
724                         m_nRand = (rand() % _ttoi(p)) + 1;\r
725                         continue;\r
726                 }\r
727                 // #BPM \r
728                 if( (zz = GetCommand( &p, _T("BPM") ) ) != 0 )\r
729                 {\r
730                         // #BPM: \82Í #BPM00: \82Æ\8c©\82È\82·\81B\r
731                         if( zz < 0 ) zz = 0;\r
732 \r
733                         // BPM\92l\82ð\8eæ\93¾\81B\r
734                         double bpm = str2float( p );\r
735                         if( bpm <= 0.0 )\r
736                                 continue;       // #BPM \82É 0 \88È\89º\82Ì\92l\82Ü\82½\82Í\95s\90³\82È\95\8e\9a\97ñ\82ð\8ew\92è\82µ\82½ \81¨ \82±\82Ì #BPM \82ð\96³\8cø\r
737 \r
738                         // #BPM: \82È\82ç\91ã\95\ BPM \92l\82Æ\82µ\82Ä\95Û\91\r
739                         if( zz == 0 )\r
740                                 this->dbBPM = bpm;\r
741                         \r
742                         // BPM \83Z\83\8b\92Ç\89Á\r
743                         BPM *bc = new BPM();\r
744                         bc->num         = ++ m_nBPMNumCur;\r
745                         bc->vnum        = zz;\r
746                         bc->bpm         = bpm;\r
747                         bc->prev = bc->next = NULL;\r
748                         APPENDLIST( this->pBPM, this->pBPMLast, bc );\r
749 \r
750                         // \96³\8cÀ\92è\8b`\91Î\89\9e\81G\r
751                         // #BPMzz \82ª\8f\89\92è\8b`\81A\82©\82Â\81A\82±\82Ì#BPM\82æ\82è\82à\91O\82Ì\8ds\82É\83I\83u\83W\83F\83N\83g\8bL\8fq\82ª\82 \82è\81Azz \82ð\8eg\82Á\82½BPM\83`\83\83\83\93\83l\83\8b\82ª\82 \82é\82È\82ç\8dX\90V\82·\82é\81B\r
752                         if( m_nBPMNum[ zz ] == -zz )\r
753                         {\r
754                                 for( Chip* cp = this->pChip; cp != NULL; cp=cp->next )\r
755                                         if( ( GetChipParamType( cp->nChannel ) & DTXCPT_BPM ) && cp->nRealParam == -zz )\r
756                                                 cp->nRealParam = m_nBPMNumCur;  // BPM\8eÀ\94Ô\8d\86\r
757                         }\r
758                         \r
759                         // \8dÅ\8cã\82É BPM\8eÀ\94Ô\8d\86\82ð\8dX\90V\81B\r
760                         m_nBPMNum[ zz ] = m_nBPMNumCur;\r
761 \r
762                         continue;\r
763                 }\r
764 \r
765                 // bHeaderOnly = true \82Ì\8e\9e\82Í\81A\82±\82±\82©\82ç\89º\82Í\96³\8e\8b\81B\r
766                 if( this->bHeaderOnly ) continue;\r
767 \r
768                 // #MIDIFILE \r
769                 if( IsCommand( &p, _T("MIDIFILE") ) )\r
770                 {\r
771                         this->strMIDI = p;\r
772                         continue;\r
773                 }\r
774                 // #PANEL\r
775                 TCHAR *q = p;\r
776                 if( IsCommand( &p, _T("PANEL") ) )\r
777                 {\r
778                         int isNotNum = 0;                                                               // #26010 2011.12.23 yyagi: #PAN EL (WAV\94Ô\8d\86=EL\82Ì#PAN)\82ð#PANEL\82Æ\8cë\89ð\82µ\82È\82¢\82æ\82¤\81A\r
779                         for( int i = 0; i < strlen(p); i++) {                   // \91±\82«\82ª\90\94\92l\82©\82Ç\82¤\82©\82ð\94»\92f\82·\82é\r
780                                 if( !_istdigit( p[i] ) && p[i] != '-' && p[i] != '+' )\r
781                                 {\r
782                                         isNotNum = 1;\r
783                                         break;\r
784                                 }\r
785                         }\r
786                         if( isNotNum )                  // \95\8e\9a\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82½\82È\82ç#PANEL, \90\94\92l\82Ì\82Ý\82È\82ç#PAN\r
787                         {\r
788                                 this->strPanel = p;\r
789                                 continue;\r
790                         }\r
791                         p = q;\r
792                 }\r
793                 // #DTXVPLAYSPEED \r
794                 if( IsCommand( &p, _T("DTXVPLAYSPEED") ) && this->bDTXV )\r
795                 {\r
796                         this->fSpeed = str2float( p );\r
797                         continue;\r
798                 }\r
799                 // #MIDINOTE \r
800                 if( IsCommand( &p, _T("MIDINOTE") ) )\r
801                 {\r
802                         this->bMIDINote = ((*p==_T('o') || *p==_T('O')) && (*(p+1)==_T('n') || *(p+1)==_T('N'))) ? true : false;\r
803                         continue;\r
804                 }\r
805                 // #BLACKCOLORKEY \r
806                 if( IsCommand( &p, _T("BLACKCOLORKEY") ) )\r
807                 {\r
808                         this->bBlackColorKey = ((*p==_T('o') || *p==_T('O')) && (*(p+1)==_T('n') || *(p+1)==_T('N'))) ? true : false;\r
809                         continue;\r
810                 }\r
811                 // #RESULTIMAGE_SS \r
812                 if( IsCommand( &p, _T("RESULTIMAGE_SS") ) )     { SetResultImage( 0, p, m_nResultImagePriority ); continue; }   // SS \88È\8fã\r
813 \r
814                 // #RESULTIMAGE_S \r
815                 if( IsCommand( &p, _T("RESULTIMAGE_S") ) )      { SetResultImage( 1, p, m_nResultImagePriority ); continue; }   //  S \88È\8fã\r
816 \r
817                 // #RESULTIMAGE_A \r
818                 if( IsCommand( &p, _T("RESULTIMAGE_A") ) )      { SetResultImage( 2, p, m_nResultImagePriority ); continue; }   //  A \88È\8fã\r
819 \r
820                 // #RESULTIMAGE_B \r
821                 if( IsCommand( &p, _T("RESULTIMAGE_B") ) )      { SetResultImage( 3, p, m_nResultImagePriority ); continue;     }       //  B \88È\8fã\r
822 \r
823                 // #RESULTIMAGE_C \r
824                 if( IsCommand( &p, _T("RESULTIMAGE_C") ) )      { SetResultImage( 4, p, m_nResultImagePriority ); continue; }   //  C \88È\8fã\r
825 \r
826                 // #RESULTIMAGE_D \r
827                 if( IsCommand( &p, _T("RESULTIMAGE_D") ) )      { SetResultImage( 5, p, m_nResultImagePriority ); continue;     }       //  D \88È\8fã\r
828 \r
829                 // #RESULTIMAGE_E \r
830                 if( IsCommand( &p, _T("RESULTIMAGE_E") ) )      { SetResultImage( 6, p, m_nResultImagePriority ); continue; }   //  E \88È\8fã\r
831 \r
832                 // #RESULTIMAGE \r
833                 if( IsCommand( &p, _T("RESULTIMAGE") ) )\r
834                 {\r
835                         // \91SRANK\8f\91\82«\8a·\82¦\81i\90æ\82É\8ew\92è\82³\82ê\82Ä\82¢\82½\82à\82Ì\82Í\82·\82×\82Ä\8fã\8f\91\82«\82³\82ê\82È\82¢\81j\r
836                         for( int i = 0; i < 7; i++ )\r
837                                 if( m_nResultImagePriority[i] == 0 )\r
838                                         this->strResultImage[i] = p;\r
839                         continue;\r
840                 }\r
841                 // #RESULTMOVIE_SS \r
842                 if( IsCommand( &p, _T("RESULTMOVIE_SS") ) ) { SetResultMovie( 0, p, m_nResultMoviePriority ); continue; }       // SS \88È\8fã\r
843 \r
844                 // #RESULTMOVIE_S \r
845                 if( IsCommand( &p, _T("RESULTMOVIE_S") ) )      { SetResultMovie( 1, p, m_nResultMoviePriority ); continue; }   //  S \88È\8fã\r
846 \r
847                 // #RESULTMOVIE_A \r
848                 if( IsCommand( &p, _T("RESULTMOVIE_A") ) )      { SetResultMovie( 2, p, m_nResultMoviePriority ); continue; }   //  A \88È\8fã\r
849 \r
850                 // #RESULTMOVIE_B \r
851                 if( IsCommand( &p, _T("RESULTMOVIE_B") ) )      { SetResultMovie( 3, p, m_nResultMoviePriority ); continue; }   //  B \88È\8fã\r
852 \r
853                 // #RESULTMOVIE_C \r
854                 if( IsCommand( &p, _T("RESULTMOVIE_C") ) )      { SetResultMovie( 4, p, m_nResultMoviePriority ); continue; }   //  C \88È\8fã\r
855 \r
856                 // #RESULTMOVIE_D \r
857                 if( IsCommand( &p, _T("RESULTMOVIE_D") ) )      { SetResultMovie( 5, p, m_nResultMoviePriority ); continue; }   //  D \88È\8fã\r
858 \r
859                 // #RESULTMOVIE_E \r
860                 if( IsCommand( &p, _T("RESULTMOVIE_E") ) )      { SetResultMovie( 6, p, m_nResultMoviePriority ); continue; }   //  E \88È\8fã\r
861 \r
862                 // #RESULTMOVIE \r
863                 if( IsCommand( &p, _T("RESULTMOVIE") ) )\r
864                 {\r
865                         // \91SRANK\8f\91\82«\8a·\82¦\81i\90æ\82É\8ew\92è\82³\82ê\82Ä\82¢\82½\82à\82Ì\82Í\82·\82×\82Ä\8fã\8f\91\82«\82³\82ê\82È\82¢\81j\r
866                         for( int i = 0; i < 7; i++ )\r
867                                 if( m_nResultMoviePriority[i] == 0 )\r
868                                         this->strResultMovie[i] = p;\r
869                         continue;\r
870                 }\r
871                 // #RESULTSOUND_SS \r
872                 if( IsCommand( &p, _T("RESULTSOUND_SS") ) ) { SetResultSound( 0, p, m_nResultSoundPriority ); continue; }       // SS \88È\8fã\r
873 \r
874                 // #RESULTSOUND_S \r
875                 if( IsCommand( &p, _T("RESULTSOUND_S") ) )      { SetResultSound( 1, p, m_nResultSoundPriority ); continue; }   //  S \88È\8fã\r
876 \r
877                 // #RESULTSOUND_A \r
878                 if( IsCommand( &p, _T("RESULTSOUND_A") ) )      { SetResultSound( 2, p, m_nResultSoundPriority ); continue; }   //  A \88È\8fã\r
879 \r
880                 // #RESULTSOUND_B \r
881                 if( IsCommand( &p, _T("RESULTSOUND_B") ) )      { SetResultSound( 3, p, m_nResultSoundPriority ); continue; }   //  B \88È\8fã\r
882 \r
883                 // #RESULTSOUND_C \r
884                 if( IsCommand( &p, _T("RESULTSOUND_C") ) )      { SetResultSound( 4, p, m_nResultSoundPriority ); continue; }   //  C \88È\8fã\r
885 \r
886                 // #RESULTSOUND_D \r
887                 if( IsCommand( &p, _T("RESULTSOUND_D") ) )      { SetResultSound( 5, p, m_nResultSoundPriority ); continue; }   //  D \88È\8fã\r
888 \r
889                 // #RESULTSOUND_E \r
890                 if( IsCommand( &p, _T("RESULTSOUND_E") ) )      { SetResultSound( 6, p, m_nResultSoundPriority ); continue; }   //  E \88È\8fã\r
891 \r
892                 // #RESULTSOUND \r
893                 if( IsCommand( &p, _T("RESULTSOUND") ) )\r
894                 {\r
895                         // \91SRANK\8f\91\82«\8a·\82¦\81i\90æ\82É\8ew\92è\82³\82ê\82Ä\82¢\82½\82à\82Ì\82Í\82·\82×\82Ä\8fã\8f\91\82«\82³\82ê\82È\82¢\81j\r
896                         for( int i = 0; i < 7; i++ )\r
897                                 if( m_nResultSoundPriority[i] == 0 )\r
898                                         this->strResultSound[i] = p;\r
899                         continue;\r
900                 }\r
901                 // #BASEBPM \r
902                 if( IsCommand( &p, _T("BASEBPM") ) )\r
903                 {\r
904                         double n = str2float( p );\r
905 \r
906                         if( n < 0.0 )\r
907                                 continue;       // #BASEBPM \82É\95\89\90\94\82Ü\82½\82Í\95s\90³\82È\95\8e\9a\97ñ\82ð\8ew\92è\82µ\82½ \81¨ \82±\82Ì #BASEBPM \82ð\96³\8cø\r
908 \r
909                         this->dbBaseBPM = n;\r
910                         continue;\r
911                 }\r
912                 // #VOLUME, #WAVVOL \r
913                 if( ( zz = this->GetCommand( &p, _T("VOLUME") ) ) != 0 || ( zz = this->GetCommand( &p, _T("WAVVOL") ) ) != 0 )\r
914                 {\r
915                         if( zz < 0 || zz >= 36*36 )\r
916                                 continue;       // #VOLUME(WAVVOL)\82Ì\94Ô\8d\86\82ª\94Í\88Í\8aO\r
917 \r
918                         // \89¹\97Ê\92l\82Ì\8eæ\93¾\r
919                         int n = _ttoi( p );\r
920                         if( n > 100 ) n = 100;\r
921                         if( n <   0 ) n =   0;\r
922 \r
923                         // \96³\8cÀ\91Î\89\9e\81G\89ß\8b\8e\82É\92è\8b`\82µ\82½ #WAV \82Ì\82¤\82¿\81Avolume \82ª\96¢\92è\8b`\82Ì\82É\82Â\82¢\82Ä\8a\84\82è\93\96\82Ä\82é\81B\r
924                         if( this->m_nWaveVol[ zz ] == -zz )\r
925                         {\r
926                                 for( Wave* wp = this->pWave; wp != NULL; wp = wp->next )\r
927                                         if( wp->volume == -zz )\r
928                                                 wp->volume = n;\r
929                         }\r
930 \r
931                         // \8dÅ\8cã\82É\81AWAVVOL \83X\83^\83b\83N\82ð\8dX\90V\81B\r
932                         this->m_nWaveVol[ zz ] = n;\r
933                         continue;\r
934                 }\r
935                 // #PAN, #WAVPAN \r
936                 if( ( zz = this->GetCommand( &p, _T("PAN") ) ) != 0 || ( zz = this->GetCommand( &p, _T("WAVPAN") ) ) != 0 )\r
937                 {\r
938                         if( zz < 0 || zz >= 36*36 )\r
939                                 continue;       // #WAVPAN(PAN)\82Ì\94Ô\8d\86\82ª\94Í\88Í\8aO\r
940 \r
941                         // \90\94\92l\82Ì\8eæ\93¾\r
942                         int n = _ttoi( p );\r
943                         if( n >  100 ) n =  100;\r
944                         if( n < -100 ) n = -100;\r
945 \r
946                         // \96³\8cÀ\91Î\89\9e\81G\89ß\8b\8e\82É\92è\8b`\82µ\82½ #WAV \82Ì\82¤\82¿\81Apan \82ª\96¢\92è\8b`\82Ì\82É\82Â\82¢\82Ä\8a\84\82è\93\96\82Ä\82é\81B\r
947                         if( this->m_nWavePan[ zz ] == -10000-zz )\r
948                         {\r
949                                 for( Wave* wp = this->pWave; wp != NULL; wp = wp->next )\r
950                                         if( wp->pan == -10000-zz )\r
951                                                 wp->pan = n;\r
952                         }\r
953 \r
954                         // \8dÅ\8cã\82É\81AWAVPAN \83X\83^\83b\83N\82ð\8dX\90V\81B\r
955                         this->m_nWavePan[ zz ] = n;\r
956                         continue;\r
957                 }\r
958                 // #WAV \r
959                 if( ( zz = this->GetCommand( &p, _T("WAV") ) ) != 0 )\r
960                 {\r
961                         if( zz < 0 || zz >= 36*36 )\r
962                                 continue;       // WAV\94Ô\8d\86\82ª\94Í\88Í\8aO\r
963 \r
964                         // \83Z\83\8b\92Ç\89Á\81i\82±\82±\82Å\82Í\82Ü\82¾ Wave::sound[][] \82Í NULL \81j\r
965                         Wave *wc                = new Wave();\r
966                         wc->num                 = ++ m_nWaveNumCur;\r
967                         wc->vnum                = zz;\r
968                         wc->volume              = this->m_nWaveVol[ zz ];\r
969                         wc->pan                 = this->m_nWavePan[ zz ];\r
970                         wc->bUse                = false;\r
971                         wc->strFileName = p;\r
972                         for( int i = 0; i < 11; i++ )\r
973                         {\r
974                                 wc->bUseByLane[ i ]     = false;\r
975                                 wc->nCurSound[ i ]      = -1;\r
976                                 for( int j = 0; j < DTX_MAX_SOUND; j++ )\r
977                                 {\r
978                                         wc->sound[ i ][ j ]                     = NULL;\r
979                                         wc->bPlaying[ i ][ j ]          = false;\r
980                                         wc->dbStartTime[ i ][ j ]       = 0;\r
981                                         wc->dbPauseTime[ i ][ j ]       = 0;\r
982                                 }\r
983                         }\r
984                         wc->dwBufferSize        = 0;\r
985                         wc->dbTotalTime         = 0;\r
986                         wc->prev = wc->next = NULL;\r
987                         APPENDLIST( this->pWave, this->pWaveLast, wc ); \r
988 \r
989                         // #WAVzz \82ª\8f\89\92è\8b`\81A\82©\82Â\r
990                         // \82±\82Ì#WAV\82æ\82è\82à\91O\82Ì\8ds\82É\83I\83u\83W\83F\83N\83g\8bL\8fq\82ª\82 \82è\81Azz \82ð\8eg\82Á\82½WAV\83`\83\83\83\93\83l\83\8b\82ª\82 \82é\82È\82ç\8dX\90V\82·\82é\81B\r
991                         if( this->m_nWaveNum[ zz ] == -zz )\r
992                         {\r
993                                 for( Chip* cp = this->pChip; cp != NULL; cp=cp->next )\r
994                                         if( ( this->GetChipParamType( cp->nChannel ) & DTXCPT_WAV ) && cp->nRealParam == -zz )\r
995                                                 cp->nRealParam = this->m_nWaveNumCur;   // Wave\8eÀ\94Ô\8d\86\r
996                         }\r
997                                 \r
998                         // \8dÅ\8cã\82É Wave\8eÀ\94Ô\8d\86\82ð\8dX\90V\81B\r
999                         this->m_nWaveNum[ zz ] = this->m_nWaveNumCur;\r
1000                         continue;\r
1001                 }\r
1002                 // #BMPTEX \r
1003                 if( ( zz = this->GetCommand( &p, _T("BMPTEX") ) ) != 0 )\r
1004                 {\r
1005                         if( zz < 0 || zz >= 36*36 )\r
1006                                 continue;       // #BMPTEX\94Ô\8d\86\82ª\94Í\88Í\8aO\r
1007 \r
1008                         // \83Z\83\8b\92Ç\89Á\81i\82±\82±\82Å\82Í\82Ü\82¾ BMPTEX::pTexture \82Í NULL \81¨ \90Ý\92è\82Í\8cã\8f\88\97\9d\82Ì LoadBMP() \82Å \81j\r
1009                         BMPTEX *bm              = new BMPTEX();\r
1010                         bm->num                 = zz;\r
1011                         bm->bUse                = false;\r
1012                         bm->strFileName = p;\r
1013                         bm->pTexture    = NULL;\r
1014                         bm->prev = bm->next = NULL;\r
1015                         APPENDLIST( this->pBMPTEX, this->pBMPTEXLast, bm );\r
1016 \r
1017                         // BMPTEX\8eg\97p\83t\83\89\83OON\r
1018                         this->bUseBMPTEX = true;\r
1019                         continue;\r
1020                 }\r
1021                 // #BMP \r
1022                 if( ( zz = this->GetCommand( &p, _T("BMP") ) ) != 0 )\r
1023                 {\r
1024                         if( zz >= 36*36 )       // zz \82Í\8fÈ\97ª\89Â\81i\8fÈ\97ª\8e\9e\81Azz==-1\81j\r
1025                                 continue;               // #BMP\94Ô\8d\86\82ª\94Í\88Í\8aO\r
1026 \r
1027                         // \83Z\83\8b\92Ç\89Á\81i\82±\82±\82Å\82Í\82Ü\82¾ BMP::pSurface \82Í NULL \81¨ \90Ý\92è\82Í\8cã\8f\88\97\9d\82Ì LoadBMP() \82Å \81j\r
1028                         BMP *bm                 = new BMP();\r
1029                         bm->num                 = (zz < 0) ? 0 : zz;            // \94Ô\8d\862\8c\85\8fÈ\97ª \81¨ #BMP00: (\8f\89\8aúBMP\89æ\91\9c) (2006/04/23)\r
1030                         bm->bUse                = false;\r
1031                         bm->strFileName = p;\r
1032                         bm->pSurface    = NULL;\r
1033                         bm->prev = bm->next = NULL;\r
1034                         APPENDLIST( this->pBMP, this->pBMPLast, bm );\r
1035 \r
1036                         // BMP\8eg\97p\83t\83\89\83OON\r
1037                         this->bUseBMP = true;\r
1038                         continue;\r
1039                 }\r
1040                 // #BGAPAN \r
1041                 if( ( zz = this->GetCommand( &p, _T("BGAPAN") ) ) != 0 )\r
1042                 {\r
1043                         if( zz < 0 || zz >= 36*36 )\r
1044                                 continue;       // #BGAPAN\94Ô\8d\86\82ª\94Í\88Í\8aO\r
1045 \r
1046                         // \83p\83\89\83\81\81[\83^\8eæ\93¾\r
1047                         int bmp, sw, sh, ew, eh, ssx, ssy, sex, sey, dsx, dsy, dex, dey, len;\r
1048                         bmp = GetZex(p); SKIPZEX(p); SKIPSP_BGA(p);\r
1049                         sw  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1050                         sh  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1051                         ew  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1052                         eh  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1053                         ssx = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1054                         ssy = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1055                         sex = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1056                         sey = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1057                         dsx = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1058                         dsy = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1059                         dex = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1060                         dey = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1061                         len = GetDec(p);\r
1062                                 \r
1063                         // BMP\94Ô\8d\86\82Ì\8fÈ\97ª\82È\82ç\82Ñ\82É 00 \82Ì\8ew\92è\82Í\96³\8cø\r
1064                         if( bmp <= 0 )\r
1065                                 continue;       // \95s\90³\82ÈBMP\94Ô\8d\86\82ª\8ew\92è\82³\82ê\82Ä\82¢\82Ü\82·\81B\r
1066 \r
1067                         // \83N\83\8a\83b\83s\83\93\83O\r
1068                         // \81¨ BMP\82Ì\83T\83C\83Y\82Í\8eÀ\8ds\8e\9e\82Ü\82Å\94»\82ç\82È\82¢\82Ì\82Å\81A\83N\83\8a\83b\83s\83\93\83O\82Í\8eÀ\8ds\8e\9e\82É\8ds\82¤\81B\r
1069 \r
1070                         // \83Z\83\8b\92Ç\89Á\r
1071                         BGAPan *bc = new BGAPan();\r
1072                         bc->num = zz;\r
1073                         bc->bmp = bmp;\r
1074                         bc->sw  =  sw;  bc->sh  =  sh;\r
1075                         bc->ew  =  ew;  bc->eh  =  eh;\r
1076                         bc->ssx = ssx;  bc->ssy = ssy;\r
1077                         bc->sex = sex;  bc->sey = sey;\r
1078                         bc->dsx = dsx;  bc->dsy = dsy;\r
1079                         bc->dex = dex;  bc->dey = dey;\r
1080                         bc->len = len;\r
1081                         bc->prev = bc->next = NULL;\r
1082                         APPENDLIST( this->pBGAPan, this->pBGAPanLast, bc );\r
1083                         continue;\r
1084                 }\r
1085                 // #BGA \r
1086                 if( ( zz = this->GetCommand( &p, _T("BGA") ) ) != 0 )\r
1087                 {\r
1088                         if( zz < 0 || zz >= 36*36 )\r
1089                                 continue;       // #BGA\94Ô\8d\86\82ª\94Í\88Í\8aO\r
1090 \r
1091                         // \83p\83\89\83\81\81[\83^\8eæ\93¾\r
1092                         int bmp, x1, y1, x2, y2, ox, oy;\r
1093                         bmp = GetZex(p); SKIPZEX(p); SKIPSP_BGA(p);\r
1094                         x1  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1095                         y1  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1096                         x2  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1097                         y2  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1098                         ox  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1099                         oy  = GetDec(p);\r
1100 \r
1101                         // BMP\94Ô\8d\86\82Ì\8fÈ\97ª\82È\82ç\82Ñ\82É 00 \82Ì\8ew\92è\82Í\96³\8cø\r
1102                         if( bmp <= 0 ) \r
1103                                 continue;       // \95s\90³\82ÈBMP\94Ô\8d\86\82ª\8ew\92è\82³\82ê\82Ä\82¢\82é\r
1104 \r
1105                         // \8dÀ\95W\92²\90®\r
1106                         // \81¨ BMP\82Ì\83T\83C\83Y\82Í\8eÀ\8ds\8e\9e\82Ü\82Å\94»\82ç\82È\82¢\82Ì\82Å\81ABMP\91¤\82Ì\83N\83\8a\83b\83s\83\93\83O\82Í\8eÀ\8ds\8e\9e\82É\8ds\82¤\82à\82Ì\82Æ\82·\82é\81B\r
1107                         if( x1 > x2  ) {int t=x1; x1=x2; x2=t;}         // \95K\82¸(x1,y1)\82ª(x2,y2)\82Ì\8d\8fã\82É\97\88\82é\82æ\82¤\82É\82·\82é\r
1108                         if( y1 > y2  ) {int t=y1; y1=y2; y2=t;}\r
1109 \r
1110                         // \83Z\83\8b\92Ç\89Á\r
1111                         BGA *bc  = new BGA();\r
1112                         bc->num  = zz;\r
1113                         bc->bmp  = bmp;\r
1114                         bc->x1   = x1;  bc->y1 = y1;\r
1115                         bc->x2   = x2;  bc->y2 = y2;\r
1116                         bc->ox   = ox;  bc->oy = oy;\r
1117                         bc->prev = bc->next = NULL;\r
1118                         APPENDLIST( this->pBGA, this->pBGALast, bc);\r
1119                         continue;       \r
1120                 }\r
1121                 // #AVIPAN \r
1122                 if( ( zz = this->GetCommand( &p, _T("AVIPAN") ) ) != 0 )\r
1123                 {\r
1124                         if( zz < 0 || zz >= 36*36)\r
1125                                 continue;       // #AVIPAN\94Ô\8d\86\82ª\94Í\88Í\8aO\r
1126 \r
1127                         // \83p\83\89\83\81\81[\83^\8eæ\93¾\r
1128                         int avi, sw, sh, ew, eh, ssx, ssy, sex, sey, dsx, dsy, dex, dey, len;\r
1129                         avi = GetZex(p); SKIPZEX(p); SKIPSP_BGA(p);\r
1130                         sw  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1131                         sh  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1132                         ew  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1133                         eh  = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1134                         ssx = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1135                         ssy = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1136                         sex = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1137                         sey = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1138                         dsx = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1139                         dsy = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1140                         dex = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1141                         dey = GetDec(p); SKIPDEC(p); SKIPSP_BGA(p);\r
1142                         len = GetDec(p);\r
1143                                 \r
1144                         // AVI\94Ô\8d\86\82Ì\8fÈ\97ª\82È\82ç\82Ñ\82É 00 \82Ì\8ew\92è\82Í\96³\8cø\81B\r
1145                         if( avi == 0 ) \r
1146                                 continue;       // \95s\90³\82ÈAVI\94Ô\8d\86\82ª\8ew\92è\82³\82ê\82Ä\82¢\82é\r
1147 \r
1148                         // \83N\83\8a\83b\83s\83\93\83O\81G\r
1149                         // \81¨ AVI\82Ì\83T\83C\83Y\82Í\8eÀ\8ds\8e\9e\82Ü\82Å\94»\82ç\82È\82¢\82Ì\82Å\81A\83N\83\8a\83b\83s\83\93\83O\82Í\8eÀ\8ds\8e\9e\82É\8ds\82¤\81B\r
1150 \r
1151                         // \83Z\83\8b\92Ç\89Á\r
1152                         AVIPan *ac = new AVIPan();\r
1153                         ac->num = zz;\r
1154                         ac->avi = avi;\r
1155                         ac->sw  =  sw;  ac->sh  =  sh;\r
1156                         ac->ew  =  ew;  ac->eh  =  eh;\r
1157                         ac->ssx = ssx;  ac->ssy = ssy;\r
1158                         ac->sex = sex;  ac->sey = sey;\r
1159                         ac->dsx = dsx;  ac->dsy = dsy;\r
1160                         ac->dex = dex;  ac->dey = dey;\r
1161                         ac->len = len;\r
1162                         ac->prev = ac->next = NULL;\r
1163                         APPENDLIST( this->pAVIPan, this->pAVIPanLast, ac );\r
1164                         continue;\r
1165                 }\r
1166                 // #AVI, #VIDEO \r
1167                 if( ( zz = this->GetCommand( &p, _T("AVI") ) ) != 0 || ( zz = this->GetCommand( &p, _T("VIDEO") ) ) != 0 )\r
1168                 {\r
1169                         if( zz < 0 || zz >= 36*36 )\r
1170                                 continue;       // #AVI(VIDEO)\94Ô\8d\86\82ª\94Í\88Í\8aO\r
1171 \r
1172                         // \83Z\83\8b\92Ç\89Á\81i\82±\82±\82Å\82Í\82Ü\82¾ AVI::avi \82Í\8f\89\8aú\89»\82µ\82È\82¢\81j\r
1173                         AVI *ac = new AVI();\r
1174                         ac->num  = zz;//++ nAVINumCur;  --> #AVIPAN \93±\93ü\82É\82Æ\82à\82È\82¢\81A\96³\8cÀ\89»\82ð\89ð\8f\9c\81B(2006/5/5)\r
1175                         ac->bUse = false;\r
1176                         ac->strFileName = p;\r
1177                         ac->prev = ac->next = NULL;\r
1178                         APPENDLIST( this->pAVI, this->pAVILast, ac );\r
1179 \r
1180                         // AVI\8eg\97p\83t\83\89\83OON\r
1181                         this->bUseAVI = true;\r
1182                         continue;\r
1183                 }\r
1184 \r
1185                 // \82»\82Ì\91¼\81F\83`\83b\83v\94z\92\r
1186                 {\r
1187                         // (1) \8f¬\90ß\94Ô\8d\86\82ð\8eæ\93¾ \81¨ nPart \r
1188                         int nPart = GetDec3( p );\r
1189                         p += 3;\r
1190                         if( nPart < 0 )\r
1191                                 continue;       // \8f¬\90ß\94Ô\8d\86\82ª\95s\90³\r
1192 \r
1193                         nPart ++;       // 1\8f¬\90ß\82¸\82ç\82·\81i\8bÈ\8aJ\8en\8e\9e\82Ì -1 \8f¬\90ß\82ð\8dì\82é\82½\82ß\81j\r
1194 \r
1195                         // (2) \83`\83\83\83\93\83l\83\8b\94Ô\8d\86\8eæ\93¾ \81¨ nCh \r
1196                         int nCh = GetChannel( p );\r
1197                         p += 2;\r
1198                         if( nCh < 0 )\r
1199                                 continue;       // \83`\83\83\83\93\83l\83\8b\94Ô\8d\86\82ª\95s\90³\r
1200 \r
1201                         // (3) ':' \82Æ\8bó\94\92\82ð\83X\83L\83b\83\r
1202                         SKIPSP( p );\r
1203                         if( *p == _T(':') )\r
1204                         {\r
1205                                 p++;\r
1206                                 SKIPSP( p );\r
1207                         }\r
1208                         // (4) \8eg\97p\83t\83\89\83O\81G\8aY\93\96\82·\82é\82à\82Ì\82ð ON \r
1209                         if     ( nCh >= 0x11 && nCh <= 0x1A ) this->bUseDrum            = true;\r
1210                         else if( nCh >= 0x20 && nCh <= 0x27 ) this->bUseGuitar          = true;\r
1211                         else if( nCh >= 0xA0 && nCh <= 0xA7 ) this->bUseBass            = true;\r
1212                         if( nCh == 0x18 )                                         this->bUseHHOpen              = true;\r
1213                         if( nCh == 0x19 )                                         this->bUseRide                = true;\r
1214                         if( nCh == 0x1A )                                         this->bUseLeftCymal   = true;\r
1215 \r
1216                         // (5) \83p\83\89\83\81\81[\83^\8eæ\93¾(ch.02\82Ì\8fê\8d\87): \8eÀ\90\94\8ew\92è \r
1217                         if( nCh == 0x02 )\r
1218                         {\r
1219                                 double d = str2float( p );\r
1220                                 if( d <= 0.0 )\r
1221                                         continue;\r
1222 \r
1223                                 Chip *cell = new Chip();\r
1224                                 cell->dwPosition        = nPart * DTX_RESOLVE;\r
1225                                 cell->nChannel          = nCh;\r
1226                                 cell->dbParam           = d;\r
1227                                 this->InsertChip( cell );\r
1228                                 continue;\r
1229                         }\r
1230                         // (6) \83p\83\89\83\81\81[\83^\8eæ\93¾(ch.02\88È\8aO) \r
1231                         {       \r
1232                                 // (6-1) \83I\83u\83W\83F\83N\83g\97ñ\82Ì\92·\82³\82ð\90\94\82¦\82é \81¨ n\8c\85\90\94 \r
1233                                 int n\8c\85\90\94 = 0;\r
1234                                 TCHAR* q = p;\r
1235                                 while( *q != _T('\n') && *q != _T('\0') && *q != _T(' ') && *q != _T('\t') )\r
1236                                 {\r
1237                                         // '_' \82Í\96³\8e\8b\r
1238                                         if( *q == _T('_') ) {\r
1239                                                 q++;\r
1240                                                 continue;\r
1241                                         }\r
1242                                         if( ( *q >= _T('0') && *q <= _T('9') ) || ( *q >= _T('a') && *q <= _T('z') ) || (*q >= _T('A') && *q <= _T('Z') ) ) {\r
1243                                                 n\8c\85\90\94++;\r
1244                                                 q ++;\r
1245                                                 continue;\r
1246                                         }\r
1247                                         else \r
1248                                         {\r
1249                                                 n\8c\85\90\94 = -1;\r
1250                                                 break;          // \83I\83u\83W\83F\83N\83g\94z\92u\95\8e\9a\97ñ\82É 0\81`9,A\81`Z \88È\8aO\82Ì\95\8e\9a(%02x)\82ª\8eg\82í\82ê\82Ä\82¢\82é \81¨ \82±\82Ì\8ds\82ð\96³\8e\8b\r
1251                                         }\r
1252                                 }\r
1253                                 if( ( n\8c\85\90\94 % 2 ) != 0 )\r
1254                                         n\8c\85\90\94 --;               // \8c\85\90\94\82ª\8aï\90\94\82È\82ç\81A\8dÅ\8cã\82Ì\88ê\8c\85\82Í\96³\8e\8b\r
1255                                 if( n\8c\85\90\94 <= 0 )\r
1256                                         continue;               // \8c\85\82ª\82È\82¢\82©\83G\83\89\81[\82È\82ç\96³\8e\8b\r
1257 \r
1258                                 // (6-2) \83I\83u\83W\83F\83N\83g\82ð\82Q\8c\85\82¸\82 Chip \89» \r
1259                                 for( int i = 0; i < n\8c\85\90\94 / 2; i++ )\r
1260                                 {\r
1261                                         // (6-2-1) '_' \82Í\96³\8e\8b \r
1262                                         if( *p == _T('_') )\r
1263                                         {\r
1264                                                 p++; i--;\r
1265                                                 continue;\r
1266                                         }\r
1267                                         // (6-2-2) '00' \82È\82ç\96³\8e\8b \r
1268                                         if( *p == _T('0') && *(p+1) == _T('0') ) {\r
1269                                                 p += 2;\r
1270                                                 continue;\r
1271                                         }\r
1272 \r
1273                                         // (6-2-3) zz \92l\82Ì\8eæ\93¾\81GCh.03 \82Ì\82Ý16\90i\90\94\81A\82»\82Ì\91¼\82Í36\90i\90\94 \r
1274                                         int zz = ( nCh == 0x03 ) ? GetHex( p ) : GetZex( p );\r
1275                                         \r
1276                                         // (6-2-4) \83`\83b\83v\82ð\90\90¬ \r
1277                                         Chip *cc = new Chip();\r
1278                                         cc->dwPosition  = ( nPart * DTX_RESOLVE ) + ( DTX_RESOLVE * i) / ( n\8c\85\90\94 / 2 );\r
1279                                         cc->nChannel    = nCh;\r
1280                                         cc->nParam              = zz;\r
1281                                         cc->nRealParam  = zz; \r
1282                                         if( nCh >= 0x11 && nCh <= 0x1A ) cc->nType = 0;         // \83h\83\89\83\80\83`\83\83\83\93\83l\83\8b\r
1283                                         if( nCh >= 0x20 && nCh <= 0x27 ) cc->nType = 1;         // \83M\83^\81[\83`\83\83\83\93\83l\83\8b\r
1284                                         if( nCh >= 0xA0 && nCh <= 0xA7 ) cc->nType = 2;         // \83M\83^\81[\83`\83\83\83\93\83l\83\8b\r
1285                                         // (6-2-5) WAV\8cn\83`\83\83\83\93\83l\83\8b\82È\82ç zz \82ð WAVE\8eÀ\94Ô\8d\86\82É\95Ï\8a·\82·\82é \r
1286                                         if( this->GetChipParamType( cc->nChannel ) & DTXCPT_WAV )\r
1287                                                 cc->nRealParam = this->m_nWaveNum[ zz ];\r
1288                                         // (6-2-6) BPMEX\8cn\83`\83\83\83\93\83l\83\8b\82È\82ç zz \82ð BPM\8eÀ\94Ô\8d\86\82É\95Ï\8a·\82·\82é \r
1289                                         else if( this->GetChipParamType( cc->nChannel ) & DTXCPT_BPMEX )\r
1290                                                 cc->nRealParam = this->m_nBPMNum[ zz ];\r
1291                                         // (6-2-7) \83t\83B\83\8b\83C\83\93\8cn\83`\83\83\83\93\83l\83\8b\82È\82ç\83|\83W\83V\83\87\83\93\82ð\8fC\90³\82·\82é \r
1292                                         else if( nCh == 0x53 )\r
1293                                         {\r
1294                                                 if( zz > 0 && zz != 2 )                         // \83t\83B\83\8b\83C\83\93\8aJ\8e\81¨ \83|\83W\83V\83\87\83\93\82ð 32 \82¾\82¯\91O\82É\82¸\82ç\82·\r
1295                                                         cc->dwPosition -= 32;\r
1296                                                 else if( zz == 2 )                                      // \83t\83B\83\8b\83C\83\93\8fI\97¹ \81¨ \83|\83W\83V\83\87\83\93\82ð 32 \82¾\82¯\8cã\82É\82¸\82ç\82·\r
1297                                                         cc->dwPosition += 32;\r
1298                                         }\r
1299                                         // (6-2-8) \83`\83b\83v\82Ì\92Ç\89Á \r
1300                                         {\r
1301                                                 // InsertChip() \82Í cc->dwPosition \82Å\83\\81[\83g\82·\82é\82½\82ß\81Acc->dwPosition \82Ì\8fC\90³\82ª\8a®\97¹\82µ\82½\8cã\82É\8cÄ\82Ñ\8fo\82·\82±\82Æ\81B\r
1302                                                 this->InsertChip( cc );\r
1303                                         }\r
1304 \r
1305                                         p += 2;         // \8e\9f\82Ì\83I\83u\83W\83F\83N\83g\82Ö   \r
1306                                 }\r
1307                         }\r
1308                 }\r
1309         }\r
1310 \r
1311         SAFE_FREE( strLine );\r
1312 \r
1313         // (3) LoadDTX() \82¾\82¯\82Ì\8cã\8f\88\97\9d \r
1314         {\r
1315                 // (3-1) \8aJ\8enBPM\83`\83b\83v\82ð\92Ç\89Á\82·\82é\81B\r
1316                 {\r
1317                         // Chip\83\8a\83X\83g\82Ì\90æ\93ª\82É\81A#00008:00 \82Ì\83`\83b\83v\82ð\92Ç\89Á\82·\82é\81B\81i#BPM: \82ð\8bÈ\82Ì\93ª\82Å\97L\8cø\82É\82·\82é\82½\82ß\81\r
1318                         BPM* pb;\r
1319                         for( pb = this->pBPMLast; pb != NULL; pb = pb->prev )   // #BPM: \82ª\95¡\90\94\82 \82é\8fê\8d\87\82Í\8cã\92u\97D\90æ\r
1320                                 if( pb->vnum == 0 )     break;\r
1321                 \r
1322                         // (A) #BPM: \82ª\91\8dÝ\82µ\82È\82¢ \81¨ #BPM00:120 \82ð BPM\83\8a\83X\83g\82Ì\96\96\94ö\82É\92Ç\89Á\82µ\81A\82»\82ÌBPM\8eÀ\94Ô\8d\86\82ð\8e\9d\82Á\82½ Chip \82ð\92Ç\89Á\82·\82é\81\r
1323                         if( pb == NULL )\r
1324                         {\r
1325                                 pb = new BPM();\r
1326                                 pb->num         = ++ m_nBPMNumCur;\r
1327                                 pb->vnum        = 0;\r
1328                                 pb->bpm         = 120.0;\r
1329                                 pb->prev = pb->next = NULL;\r
1330                                 APPENDLIST( this->pBPM, this->pBPMLast, pb );\r
1331                                 \r
1332                                 Chip *cc = new Chip();\r
1333                                 cc->dwPosition  = 0;\r
1334                                 cc->nChannel    = 0x08;\r
1335                                 cc->nParam              = 0;\r
1336                                 cc->nRealParam  = pb->num;      // #BPM00: \82Ì BPM \8eÀ\94Ô\8d\86\r
1337                                 this->InsertChip( cc );\r
1338                         }\r
1339                         // (B) #BPM: \82ª\91\8dÝ\82·\82é \81¨ \82»\82ÌBPM\8eÀ\94Ô\8d\86\82ð\8e\9d\82Á\82½Chip\82ð\92Ç\89Á\82·\82é\81\r
1340                         else\r
1341                         {\r
1342                                 Chip *cc = new Chip();\r
1343                                 cc->dwPosition  = 0;\r
1344                                 cc->nChannel    = 0x08;\r
1345                                 cc->nParam              = 0;\r
1346                                 cc->nRealParam  = pb->num;      // #BPM00: \82Ì BPM \8eÀ\94Ô\8d\86\r
1347                                 this->InsertChip( cc );\r
1348                         }\r
1349                 }\r
1350                 // (3-2) WAVVOL \82Æ WAVPAN \82Ì\8fÈ\97ª\82³\82ê\82Ä\82¢\82é Wave \82É\82Â\82¢\82Ä\83f\83t\83H\83\8b\83g\92l\82ð\93K\97p\82·\82é\81\r
1351                 {\r
1352                         for( Wave* wp = this->pWave; wp != NULL; wp = wp->next )\r
1353                         {\r
1354                                 if( wp->volume < 0 )\r
1355                                         wp->volume = 100;\r
1356                                 if( wp->pan < -10000 )\r
1357                                         wp->pan = 0;\r
1358                         }\r
1359                 }\r
1360                 // (3-3) \8bó\91Å\82¿\8ew\92è\82ª\82 \82é\8fê\8d\87\81A\8dÅ\8f\89\82Ì\8bó\91Å\82¿\8ew\92è\83`\83b\83v\82ð\8bÈ\82Ì\90æ\93ª\82Ö\95¡\8eÊ\82·\82é\81\r
1361                 {\r
1362                         for( int i = 0xB1; i <= 0xBB; i++ )\r
1363                         {\r
1364                                 for( Chip* c = this->pChip; c != NULL; c = c->next )\r
1365                                 {\r
1366                                         if( c->nChannel == i ) \r
1367                                         {\r
1368                                                 Chip *cc = new Chip();\r
1369                                                 cc->dwPosition  = 0;            // \90æ\93ª\r
1370                                                 cc->nChannel    = c->nChannel;\r
1371                                                 cc->nParam              = c->nParam;\r
1372                                                 cc->nRealParam  = c->nRealParam;\r
1373                                                 this->InsertChip( cc );\r
1374                                                 break;\r
1375                                         }\r
1376                                 }\r
1377                         }\r
1378                 }\r
1379                 // (3-4) \8f\89\8aúBMP\89æ\91\9c(#BMP00:)\82ª\82 \82é\8fê\8d\87\81ABMP\83`\83b\83v\82ð\8bÈ\82Ì\90æ\93ª\82É\91}\93ü\82·\82é\81\r
1380                 {\r
1381                         for( BMP* pBmp = this->pBMPLast; pBmp != NULL; pBmp = pBmp->prev )\r
1382                         {\r
1383                                 if( pBmp->num == 0 )\r
1384                                 {\r
1385                                         Chip *cc = new Chip();\r
1386                                         cc->dwPosition  = 0;                    // \90æ\93ª\r
1387                                         cc->nChannel    = 0x04;                 // ch.04\r
1388                                         cc->nParam              = 0;\r
1389                                         cc->nRealParam  = 0;\r
1390                                         this->InsertChip( cc );\r
1391                                         break;\r
1392                                 }\r
1393                         }\r
1394                 }\r
1395         }\r
1396 \r
1397         fclose( fp );\r
1398 }\r
1399 void DTX::InsertChip( Chip *cell )\r
1400 {\r
1401         // \95\\81F\93¯\88Ê\92u\82Ì\8fê\8d\87\82Ì\83`\83\83\83\93\83l\83\8b\8aÔ\82Ì\97D\90æ\8f\87\88Ê\81i\8f¬\82³\82¢\90\94\8e\9a\82Ù\82Ç\91O\82É\91}\93ü\82³\82ê\82é\81\r
1402         static const UCHAR byPriority[ 256 ] = {\r
1403                 5,5,3,3,5,5,5,5,3,5,5,5,5,5,5,5,        // 0x   \8f¬\90ß\90ü\95Ï\8dX\81ABPM \82Í\97D\90æ\r
1404                 5,7,7,7,7,7,7,7,7,7,7,5,5,5,5,5,        // 1x   \83`\83b\83v\82Í\8cã\82ë\82Ö\81i\8cã\82ë\82Ì\82à\82Ì\82Ù\82Ç\8fã\88Ê\95`\89æ\81j\r
1405                 7,7,7,7,7,7,7,7,5,5,5,5,5,5,5,5,        // 2x\r
1406                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 3x\r
1407                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 4x\r
1408                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 5x\r
1409                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 6x\r
1410                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 7x\r
1411                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 8x\r
1412                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // 9x\r
1413                 7,7,7,7,7,7,7,7,5,5,5,5,5,5,5,5,        // Ax\r
1414                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // Bx\r
1415                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // Cx\r
1416                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // Dx\r
1417                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,        // Ex\r
1418                 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5         // Fx\r
1419         };\r
1420 \r
1421         // (1) \8dÅ\8f\89\82Ì\83Z\83\8b\82Ì\8fê\8d\87 \81¨ \83\8a\83X\83g\82Ì\90æ\93ª\82É\92Ç\89Á\81\r
1422         if( this->pChipLast == NULL ) {\r
1423                 this->pChip = this->pChipLast = cell;\r
1424                 return;\r
1425         }\r
1426         // (2) \93K\90Ø\82È\8fê\8f\8a\82ð\83\8a\83X\83g\81u\8dÅ\8cã\94ö\81v\82©\82ç\8c\9f\8dõ\82µ\81A\91}\93ü\82·\82é\81\r
1427         for( Chip *t = this->pChipLast; t != NULL; t = t->prev )\r
1428         {\r
1429                 if( t->dwPosition < cell->dwPosition ||\r
1430                         ( t->dwPosition == cell->dwPosition     && byPriority[ t->nChannel ] <= byPriority[ cell->nChannel ] ) )\r
1431                 {\r
1432                         // t \82Ì\92¼\8cã\82É\91}\93ü\82·\82é\r
1433                         cell->prev = t;\r
1434                         cell->next = t->next;\r
1435                         if( t->next == NULL ) {\r
1436                                 t->next = cell;\r
1437                                 this->pChipLast = cell;\r
1438                         } else {\r
1439                                 t->next->prev = cell;\r
1440                                 t->next = cell;\r
1441                         }\r
1442                         return; // \8a®\97¹\r
1443                 }\r
1444         }\r
1445         // (3) \90æ\93ª\82Ü\82Å\92B\82µ\82½ \81¨ \83\8a\83X\83g\82Ì\90æ\93ª\82É\91}\93ü\82·\82é\81\r
1446         cell->prev = NULL;\r
1447         cell->next = this->pChip;\r
1448         if( this->pChip != NULL ) {\r
1449                 this->pChip->prev = cell;\r
1450                 this->pChip = cell;\r
1451         } else {\r
1452                 this->pChip = this->pChipLast = cell;\r
1453         }\r
1454 }\r
1455 void DTX::InsertMIDIChip( Chip *cell )\r
1456 {\r
1457         // (1) \8dÅ\8f\89\82Ì\83Z\83\8b\82Ì\8fê\8d\87 \81¨ \83\8a\83X\83g\82Ì\90æ\93ª\82É\92Ç\89Á\81\r
1458         if( this->pChipLast == NULL )\r
1459         {\r
1460                 this->pChip = this->pChipLast = cell;\r
1461                 return;\r
1462         }\r
1463         // (2) \93K\90Ø\82È\8fê\8f\8a\82ð\83\8a\83X\83g\82Ì\81u\8dÅ\8cã\94ö\81v\82©\82ç\8c\9f\8dõ\82µ\81A\91}\93ü\82·\82é\81\r
1464         for( Chip *t = this->pChipLast; t != NULL; t = t->prev )\r
1465         {\r
1466                 // \88Ê\92u\82ª\93¯\82\82Ì\8fê\8d\87\82É\82Í\81A0x11\81`0x1A \82Í\8cã\82ë\82É\8e\9d\82Á\82Ä\82¢\82­\81B\81i\8cã\82Å\95`\89æ\82³\82ê\82é\81¨\82æ\82è\8fã\82É\95`\89æ\82³\82ê\82é\81j\r
1467                 if( t->dbTime < cell->dbTime || ( t->dbTime == cell->dbTime && ( cell->nChannel >= 0x11 && cell->nChannel <= 0x1A ) ) )\r
1468                 {\r
1469                         // t \81¨ cell \81¨ ... \82Ì\8f\87\82É\82È\82é\82æ\82¤\91}\93ü\82·\82é\r
1470                         cell->prev      = t;\r
1471                         cell->next      = t->next;\r
1472                         if (t->next == NULL) {\r
1473                                 t->next          = cell;\r
1474                                 this->pChipLast = cell;\r
1475                         } else {\r
1476                                 t->next->prev = cell;\r
1477                                 t->next           = cell;\r
1478                         }\r
1479                         return; // \8a®\97¹\r
1480                 }\r
1481         }\r
1482         // (3) \90æ\93ª\82Ü\82Å\92B\82µ\82½ \81¨ \83\8a\83X\83g\82Ì\90æ\93ª\82É\91}\93ü\82·\82é\81\r
1483         cell->prev = NULL;\r
1484         cell->next = this->pChip;\r
1485         if( this->pChip->prev != NULL ) {\r
1486                 this->pChip->prev = cell;\r
1487                 this->pChip = cell;\r
1488         } else {\r
1489                 this->pChip = this->pChipLast = cell;\r
1490         }\r
1491 }\r
1492 void DTX::InsertLines()\r
1493 {\r
1494         if( !this->pChip || !this->pChipLast )\r
1495                 return;         // \83`\83b\83v\82ª\82È\82¢\r
1496 \r
1497         double  dbBai = 1.0;    // \8f¬\90ß\92·\94{\97¦\r
1498         DWORD   dwLast;                 // \8dÅ\8cã\82Ì\83`\83b\83v\82ª\91\8dÝ\82·\82é\8f¬\90ß\82Ì\81A\82»\82Ì\8e\9f\82Ì\8f¬\90ß\82Ì\90æ\93ª\88Ê\92u\r
1499         dwLast  = this->pChipLast->dwPosition;\r
1500         dwLast += DTX_RESOLVE - ( dwLast % DTX_RESOLVE );\r
1501 \r
1502         // (1) \8f¬\90ß\90ü\82Ì\91}\93ü \r
1503         {\r
1504                 for( DWORD pos = 0; pos <= dwLast; pos += DTX_RESOLVE )\r
1505                 {\r
1506                         Chip *nc = new Chip();\r
1507                         nc->dwPosition  = pos;\r
1508                         nc->nChannel    = 0x50;\r
1509                         nc->nParam              = 36*36-1;              // \83V\83X\83e\83\80\82ª\92u\82¢\82½\90ü\82Í nParam = zz\r
1510                         InsertChip( nc );\r
1511                 }\r
1512         }\r
1513         // (2) \94\8f\90ü\82Ì\91}\93ü \r
1514         {\r
1515                 Chip *p02 = this->pChip;        // for ch.02\81i\8f¬\90ß\92·\94{\97¦\95Ï\8dX\81j\r
1516                 Chip *pC1 = this->pChip;        // for ch.C1\81i\94\8f\90ü\83V\83t\83g\81G02 \82ð\92u\82­\82Æ\81A\82»\82Ì\8f¬\90ß\93à\82É\8cÀ\82è\81A\82»\82±\82©\82ç\94\8f\90ü\82ª\8en\82Ü\82é\81j\r
1517                 \r
1518                 for( DWORD pos = 0; pos < dwLast; pos += DTX_RESOLVE )          // pos \82Í\8f¬\90ß\92P\88Ê\82Å\91\9d\89Á\r
1519                 {\r
1520                         // \94\8f\90ü\83V\83t\83g\81G\r
1521                         // \82±\82Ì\8f¬\90ß\93à\81ipos \81` pos+DTX_RESOLVE \82Ì\94Í\88Í\93à\81j\82É ch.C1\83Z\83\8b \82ª\82 \82é\82©\82Ç\82¤\82©\82ð\81A\90æ\93Ç\82Ý\82µ\82Ä\8am\94F\82·\82é\81B\r
1522                         // \82 \82Á\82½\82ç\81Adw\8aJ\8en\88Ê\92\82É\82»\82Ì\91\8a\91Î\88Ê\92u\81i\8f¬\90ß\83A\83^\83}\82©\82ç\82Ì\8b\97\97£[ct]\81j\82ð\8ai\94[\82µ\82Ä\82¨\82­\81B\r
1523                         // \82È\82¯\82ê\82Î\81Adw\8aJ\8en\88Ê\92\82Í 0 \81B\r
1524                         \r
1525                         DWORD dw\8aJ\8en\88Ê\92u = 0;\r
1526 \r
1527                         while( pC1 && pC1->dwPosition < pos + DTX_RESOLVE )\r
1528                         {\r
1529                                 if( pC1->nChannel == 0xC1 )\r
1530                                         dw\8aJ\8en\88Ê\92u = pC1->dwPosition - pos;\r
1531                                 pC1 = pC1->next;\r
1532                         }\r
1533 \r
1534                         // \8f¬\90ß\92·\94{\97¦\95Ï\8dX\82»\82Ì\87@\81G BMS\82Å\82Ì\8e©\91R\95\9c\8bA\r
1535                         // BMS,BME \82Å\82Í\81A\82P\8f¬\90ß\82²\82Æ\82É\8f¬\90ß\92·\94{\97¦\82ª 1.0 \82É\96ß\82é\81B\r
1536 \r
1537                         if( this->scoreType == SCORETYPE_BMS )\r
1538                                 dbBai = 1.0;\r
1539 \r
1540                         // \8f¬\90ß\92·\94{\97¦\95Ï\8dX\82»\82Ì\87A\81G Ch.02 \82Å\82Ì\95Ï\8dX\82ª\82 \82ê\82Î\91Î\89\9e\82·\82é\81B\r
1541                         while( p02 && p02->dwPosition <= pos )  // Ch.02 \82Í\8f¬\90ß\93ª\82É\82µ\82©\8c»\82ê\82È\82¢\81i\81\81 dwPosition \82ª\95K\82¸ DTX_RESOLVE \82Å\8a\84\82è\90Ø\82ê\82é\81j\r
1542                         {\r
1543                                 if( p02->nChannel == 0x02 )\r
1544                                         dbBai = p02->dbParam;\r
1545                                 p02 = p02->next;\r
1546                         }\r
1547 \r
1548                         // \94\8f\90ü\82Ì\91}\93ü\r
1549 \r
1550                         for( int n\94\8f\90ü\98A\94Ô = 0; n\94\8f\90ü\98A\94Ô < 100; n\94\8f\90ü\98A\94Ô++ )  // < 100 \82Í\96³\8cÀ\83\8b\81[\83v\96h\8e~\82Ì\95Û\8c¯\r
1551                         {\r
1552                                 DWORD dw\94\8f\90ü\88Ê\92u = (DWORD)( ( DTX_RESOLVE * n\94\8f\90ü\98A\94Ô ) / ( 4.0 * dbBai ) );\r
1553                                 \r
1554                                 // \88Ê\92u\82ª\8f¬\90ß\82ð\89z\82¦\82½\82ç\94²\82¯\82é\r
1555                                 if( dw\94\8f\90ü\88Ê\92u + dw\8aJ\8en\88Ê\92u >= DTX_RESOLVE )\r
1556                                         break;\r
1557 \r
1558                                 // \94\8f\90ü\83`\83b\83v\82Ì\8dì\90¬\82Æ\91}\93ü\r
1559                                 if( ( dw\94\8f\90ü\88Ê\92u + dw\8aJ\8en\88Ê\92u ) % DTX_RESOLVE != 0 )    // \8f¬\90ß\90ü\82Æ\93¯\82\8fê\8f\8a\82É\82Í\92u\82©\82È\82¢\r
1560                                 {\r
1561                                         Chip *nc = new Chip();\r
1562                                         nc->dwPosition  = pos + dw\94\8f\90ü\88Ê\92u + dw\8aJ\8en\88Ê\92u;\r
1563                                         nc->nChannel    = 0x51;\r
1564                                         nc->nParam              = 36*36-1;      // \83V\83X\83e\83\80\82ª\92u\82¢\82½\90ü\82Í nParam = zz\r
1565                                         InsertChip( nc );\r
1566                                 }\r
1567                         }\r
1568                 }\r
1569         }\r
1570         // (3) \94\8f\90ü\81E\8f¬\90ß\90ü\82Ì\94ñ\95\\8e¦\8ew\8e¦(ch.C2)\82ª\82 \82é\82È\82ç\91Î\89\9e\82·\82é\81\r
1571         {\r
1572                 bool b\90ü\82ª\89Â\8e\8b = true;\r
1573 \r
1574                 // \82·\82×\82Ä\82Ì\83`\83b\83v\82É\82Â\82¢\82Ä...\r
1575                 for( Chip* cp = this->pChip; cp != NULL; cp = cp->next )\r
1576                 {\r
1577                         // \93¯\82¶ position \82É\95¡\90\94\82Ì\83`\83b\83v\82ª\82 \82é\8fê\8d\87\82Í\81Ach.C2 \82ð\97D\90æ\93I\82É\93Ç\82Þ\81B\r
1578                         for( Chip* p\93¯\88Ê\92uChip = cp; p\93¯\88Ê\92uChip && p\93¯\88Ê\92uChip->dwPosition == cp->dwPosition; p\93¯\88Ê\92uChip = p\93¯\88Ê\92uChip->next )\r
1579                         {\r
1580                                 if( p\93¯\88Ê\92uChip->nChannel == 0xC2 && p\93¯\88Ê\92uChip->nParam == 1 ) b\90ü\82ª\89Â\8e\8b = true;\r
1581                                 if( p\93¯\88Ê\92uChip->nChannel == 0xC2 && p\93¯\88Ê\92uChip->nParam == 2 ) b\90ü\82ª\89Â\8e\8b = false;\r
1582                         }\r
1583                         \r
1584                         // \82»\82Ì\8e\9f\82É\81A\94\8f\90ü\81E\8f¬\90ß\90ü\82Ì\89Â\8e\8b\91®\90«\82ð\90Ý\92è\82·\82é\81B\82½\82¾\82µ\81A\83\86\81[\83U\82ª\92u\82¢\82½\82à\82Ì\81inParam!=ZZ \82Ì\82à\82Ì\81j\82Í\89e\8b¿\82ð\8eó\82¯\82È\82¢\81B\r
1585                         if( ( cp->nChannel == 0x50 || cp->nChannel == 0x51 ) && cp->nParam == 36*36-1 )\r
1586                                 cp->bVisible = b\90ü\82ª\89Â\8e\8b;\r
1587                 }\r
1588         }\r
1589 }\r
1590 void DTX::CalcChipTime()\r
1591 {\r
1592         // MID \8c`\8e®\82Í\8eZ\8fo\95s\97v\81iDrumMIDI \91¤\82Å\82·\82Å\82É\8e\9e\8d\8f\82ª\8cv\8eZ\8dÏ\82Ý\81j\r
1593         if( this->scoreType == SCORETYPE_MID )\r
1594                 return;\r
1595 \r
1596         double db\8c»\8dÝ\82ÌBPM                      = 120.0;        // [\94\8f/\95ª]\r
1597         double db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦       = 1.0;\r
1598         DWORD  dw\8aî\8f\80\83J\83E\83\93\83g\92l         = 0;            // db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦, db\8c»\8dÝ\82ÌBPM \82Ì\8dÅ\8cã\82É\95Ï\89»\82µ\82½\83J\83E\83\93\83g\92l\81i\82P\8f¬\90ß\81\81 DTX_RESOLVE \83J\83E\83\93\83g\82Å\8cÅ\92è\81j\r
1599         double db\8aî\8f\80\8e\9e\8d\8f                       = 0;            // \81@\81@\81@\81@\81@\81@\81@\81@\81@\81@\81@\81V\81@\81@\81@\81@\81@\81@\81@\81@\81@\81@\81@\81@\8e\9e\8d\8f[ms]\r
1600         DWORD  dw\91O\8f¬\90ß                         = 0;            // \8f¬\90ß\92·\95Ï\8dX\97p\r
1601 \r
1602         // \82·\82×\82Ä\82Ì\83`\83b\83v\82É\82Â\82¢\82Ä...\r
1603         for( Chip* cell = this->pChip; cell != NULL; cell = cell->next )\r
1604         {\r
1605                 // (1) \94­\90º\8e\9e\8d\8f\82Ì\8cv\8e\81¨ cell->dbTime \r
1606                 cell->dbTime = (DWORD)( db\8aî\8f\80\8e\9e\8d\8f + ((240000 / DTX_RESOLVE) * (cell->dwPosition - dw\8aî\8f\80\83J\83E\83\93\83g\92l) * db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦) / (db\8c»\8dÝ\82ÌBPM * this->fSpeed) );\r
1607 \r
1608                 // (2) \8f¬\90ß\82ª\95Ï\82í\82Á\82½\82ç\81A\8f¬\90ß\92·\82ð 1.0 \82É\96ß\82·\81B(BMS\82Ì\82Ý) \r
1609                 if( this->scoreType == SCORETYPE_BMS && db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦ != 1.0 && (cell->dwPosition / DTX_RESOLVE) != dw\91O\8f¬\90ß )\r
1610                 {\r
1611                         dw\8aî\8f\80\83J\83E\83\93\83g\92l        = cell->dwPosition;\r
1612                         db\8aî\8f\80\8e\9e\8d\8f                      = cell->dbTime;\r
1613                         db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦      = 1.0;\r
1614                 }\r
1615                 dw\91O\8f¬\90ß = cell->dwPosition / DTX_RESOLVE;\r
1616 \r
1617                 // (3) \88È\89º\81A\83`\83\83\83\93\83l\83\8b\82²\82Æ\82Ì\8cÂ\95Ê\8f\88\97\9d\r
1618                 switch( cell->nChannel )\r
1619                 {\r
1620                 // (3-1) \8f¬\90ß\92·\95Ï\8d\r
1621                 case 0x02: \r
1622                         {\r
1623                                 dw\8aî\8f\80\83J\83E\83\93\83g\92l        = cell->dwPosition;\r
1624                                 db\8aî\8f\80\8e\9e\8d\8f                      = cell->dbTime;\r
1625                                 db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦      = cell->dbParam;\r
1626                         }\r
1627                         break;\r
1628 \r
1629                 // (3-2) BPM\95Ï\8dX(1)\90®\90\94BPM \r
1630                 case 0x03: \r
1631                         {\r
1632                                 dw\8aî\8f\80\83J\83E\83\93\83g\92l        = cell->dwPosition;\r
1633                                 db\8aî\8f\80\8e\9e\8d\8f                      = cell->dbTime;\r
1634                                 db\8c»\8dÝ\82ÌBPM                     = this->dbBaseBPM + (double)cell->nParam;\r
1635                         }\r
1636                         break;\r
1637 \r
1638                 // (3-3) BPM\95Ï\8dX(2)\8eÀ\90\94BPM \r
1639                 case 0x08: \r
1640                         {\r
1641                                 dw\8aî\8f\80\83J\83E\83\93\83g\92l = cell->dwPosition;\r
1642                                 db\8aî\8f\80\8e\9e\8d\8f               = cell->dbTime;\r
1643 \r
1644                                 for( BPM *bc = this->pBPMLast; bc != NULL; bc = bc->prev )\r
1645                                 {\r
1646                                         if( bc->num == cell->nRealParam )\r
1647                                         {\r
1648                                                 db\8c»\8dÝ\82ÌBPM = ( ( bc->vnum == 0 ) ? 0 : this->dbBaseBPM ) + bc->bpm;    // bc->vnum = 0 \82Ì\82Æ\82«\81i#BPM:\82Ì\82Æ\82«\81j\82Í BaseBPM \82Í\89Á\82¦\82È\82¢\81I\r
1649                                                 break;\r
1650                                         }\r
1651                                 }\r
1652                         }\r
1653                         break;\r
1654 \r
1655                 // (3-4) BGAPAN \r
1656                 case 0x04: case 0x07:\r
1657                 case 0x55: case 0x56: case 0x57: case 0x58: case 0x59: case 0x60:\r
1658                         {\r
1659                                 for( BGAPan *bp = this->pBGAPanLast; bp != NULL; bp = bp->prev )\r
1660                                 {\r
1661                                         if( bp->num == cell->nParam )\r
1662                                         {\r
1663                                                 double st = db\8aî\8f\80\8e\9e\8d\8f + ((240000 / DTX_RESOLVE) * (cell->dwPosition           - dw\8aî\8f\80\83J\83E\83\93\83g\92l) * db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦) / db\8c»\8dÝ\82ÌBPM;\r
1664                                                 double et = db\8aî\8f\80\8e\9e\8d\8f + ((240000 / DTX_RESOLVE) * (cell->dwPosition + bp->len - dw\8aî\8f\80\83J\83E\83\93\83g\92l) * db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦) / db\8c»\8dÝ\82ÌBPM;\r
1665                                                 cell->dbLong = et - st;\r
1666                                                 break;\r
1667                                         }\r
1668                                 }\r
1669                         }\r
1670                         break;\r
1671 \r
1672                 // (3-5) AVIPAN \r
1673                 case 0x54:\r
1674                         {\r
1675                                 for( AVIPan *ap = this->pAVIPanLast; ap != NULL; ap = ap->prev )\r
1676                                 {\r
1677                                         if( ap->num == cell->nParam )\r
1678                                         {\r
1679                                                 double st = db\8aî\8f\80\8e\9e\8d\8f + ((240000 / DTX_RESOLVE) * (cell->dwPosition           - dw\8aî\8f\80\83J\83E\83\93\83g\92l) * db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦) / db\8c»\8dÝ\82ÌBPM;\r
1680                                                 double et = db\8aî\8f\80\8e\9e\8d\8f + ((240000 / DTX_RESOLVE) * (cell->dwPosition + ap->len - dw\8aî\8f\80\83J\83E\83\93\83g\92l) * db\8c»\8dÝ\82Ì\8f¬\90ß\92·\94{\97¦) / db\8c»\8dÝ\82ÌBPM;\r
1681                                                 cell->dbLong = et - st;\r
1682                                                 break;\r
1683                                         }\r
1684                                 }\r
1685                         }\r
1686                         break;\r
1687                 }\r
1688         }\r
1689 }\r
1690 void DTX::AdujstChipTimeByPlaySpeed( double dbPlaySpeed )\r
1691 {\r
1692         if( dbPlaySpeed <= 0 )\r
1693                 return;\r
1694 \r
1695         // \82·\82×\82Ä\82Ì\83`\83b\83v\82Ì\94­\90º\8e\9e\8d\8f\82ð\8fC\90³\r
1696         for( Chip* p = this->pChip; p != NULL; p = p->next )\r
1697                 p->dbTime = p->dbTime / dbPlaySpeed;\r
1698 }\r
1699 // BMP, AVI, WAV \82Ì\93Ç\82Ý\8d\9e\82Ý\r
1700 void DTX::LoadBMP()\r
1701 {\r
1702         this->dwBMPWidthMax             = this->dwBMPHeightMax          = -1;\r
1703         this->dwBMPTEXWidthMax  = this->dwBMPTEXHeightMax       = -1;\r
1704 \r
1705         // (1) \8ae\83}\83l\81[\83W\83\83\82Ì\83L\83\83\83b\83V\83\85\93à\82Ì\83t\83\89\83O\82ð\83\8a\83Z\83b\83\r
1706         this->textureManager.ResetCache();\r
1707         this->surfaceManager.ResetCache();\r
1708 \r
1709         // (2) BMPTEX \82Ì\93Ç\82Ý\8d\9e\82Ý\81GVRAM \97D\90æ\82Ì\82½\82ß\81ABMP \82æ\82è\90æ\82É\93Ç\82Ý\8d\9e\82Þ\81\r
1710         {\r
1711                 int n\83e\83N\83X\83`\83\83\90\90¬\90\94 = 0;\r
1712 \r
1713                 for( BMPTEX *btc = this->pBMPTEX; btc != NULL; btc = btc->next )\r
1714                 {\r
1715                         // #PATH_WAV \82Ì\8ew\92è\82ª\82 \82é\8fê\8d\87\82Í\82»\82±\82©\82ç\81A\82»\82ê\88È\8aO\82Í DTX \82Ì\82 \82é\8fê\8f\8a\82©\82ç\93Ç\82Ý\8d\9e\82Þ\81B\r
1716                         tstring path = ( this->strPathWav.empty() ) ? this->strFolder : this->strPathWav;\r
1717                         path += btc->strFileName;\r
1718 \r
1719                         // \83e\83N\83X\83`\83\83\82Ì\90\90¬\r
1720                         TCHAR name[ 32 ];\r
1721                         _stprintf_s( name, 32, _T("BMPTEX(%d)\89æ\91\9c"), btc->num );\r
1722                         if( ( btc->pTexture = this->textureManager.GetCachedTexture( name, path.c_str(), 0, 0 ) ) == NULL )\r
1723                                 continue;       // \8dì\90¬\82É\8e¸\94s\r
1724                         btc->bUse = true;\r
1725 \r
1726                         // \8dÅ\91å\95\9d\81E\8d\82\82³\82Ì\8dX\90V\r
1727                         if( btc->pTexture->dwWidth  > this->dwBMPTEXWidthMax ) this->dwBMPTEXWidthMax  = btc->pTexture->dwWidth;\r
1728                         if( btc->pTexture->dwHeight > this->dwBMPTEXHeightMax) this->dwBMPTEXHeightMax = btc->pTexture->dwHeight;\r
1729 \r
1730                         n\83e\83N\83X\83`\83\83\90\90¬\90\94 ++;\r
1731                 }\r
1732         }\r
1733         // (3) BMP \82Ì\93Ç\82Ý\8d\9e\82Ý \r
1734         {\r
1735                 int n\83T\81[\83t\83F\83C\83X\90\90¬\90\94 = 0;\r
1736 \r
1737                 for( BMP *bc = this->pBMP; bc != NULL; bc = bc->next )\r
1738                 {\r
1739                         // #PATH_WAV \82Ì\8ew\92è\82ª\82 \82é\8fê\8d\87\82Í\82»\82±\82©\82ç\81A\82»\82ê\88È\8aO\82Í DTX \82Ì\82 \82é\8fê\8f\8a\82©\82ç\93Ç\82Ý\8d\9e\82Þ\81B\r
1740                         tstring path = ( this->strPathWav.empty() ) ? this->strFolder : this->strPathWav;\r
1741                         path += bc->strFileName;\r
1742 \r
1743                         // \83T\81[\83t\83F\83C\83X\82Ì\90\90¬\r
1744                         TCHAR name[ 32 ];\r
1745                         _stprintf_s( name, 32, _T("BMP(%d)\89æ\91\9c"), bc->num );\r
1746                         if( ( bc->pSurface = this->surfaceManager.GetCachedSurface( name, path.c_str(), 0, 0, LOADTO_VIDEO_OR_SYSTEM ) ) == NULL )\r
1747                                 continue;       // \8dì\90¬\82É\8e¸\94s\r
1748                         bc->bUse = true;\r
1749 \r
1750                         // \8dÅ\91å\95\9d\81E\8d\82\82³\82Ì\8dX\90V\r
1751                         if( bc->pSurface->dwWidth  > this->dwBMPWidthMax ) this->dwBMPWidthMax  = bc->pSurface->dwWidth;\r
1752                         if( bc->pSurface->dwHeight > this->dwBMPHeightMax) this->dwBMPHeightMax = bc->pSurface->dwHeight;\r
1753 \r
1754                         n\83T\81[\83t\83F\83C\83X\90\90¬\90\94 ++;\r
1755                 }\r
1756         }\r
1757         // (4) \8ae\83}\83l\81[\83W\83\83\82Ì\83L\83\83\83b\83V\83\85\82©\82ç\95s\97v\82È\83\8a\83\\81[\83X\82ð\8dí\8f\9c \r
1758         this->surfaceManager.RemoveUnusedSurfaces();\r
1759         this->textureManager.RemoveUnusedTextures();\r
1760 \r
1761         \r
1762         // \83w\83b\83_\93Ç\82Ý\8d\9e\82Ý\82Ì\82Ý\82È\82ç\82±\82±\82Å\8fI\97¹\r
1763         if( this->bHeaderOnly ) return;\r
1764 \r
1765         // (5) BMP, BMPTEX, BGA, BGAPAN \82Ì\8e\96\91O\8dÅ\93K\89» \r
1766         for( Chip *c = this->pChip; c != NULL; c = c->next )\r
1767         {\r
1768                 // (5-1) BGA\83\8c\83C\83\84\83`\83\83\83l\83\8b\83`\83b\83v\82É\81ABMP/BMPTEX/BGA/BGAPAN\82Ö\82Ì\83|\83C\83\93\83^\82ð\8a\84\82è\93\96\82Ä\82é\81\r
1769                 if( c->nChannel == 0x04 || c->nChannel == 0x07 || ( c->nChannel >= 0x55 && c->nChannel <= 0x59 ) || c->nChannel == 0x60 )\r
1770                 {\r
1771                         // \8f\89\8aú\89» \r
1772                         c->BGAtype      = BGATYPE_UNKNOWN;\r
1773                         c->pBMP         = NULL;\r
1774                         c->pBMPTEX      = NULL;\r
1775                         c->pBGA         = NULL;\r
1776                         c->pBGAPan      = NULL;\r
1777 \r
1778                         // (5-1-1) BGAPAN \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1779                         for( BGAPan *bgapan = this->pBGAPanLast; bgapan != NULL; bgapan = bgapan->prev )\r
1780                         {\r
1781                                 if( bgapan->num == c->nParam )\r
1782                                 {\r
1783                                         BMPTEX* bmptex;\r
1784                                         for( bmptex = this->pBMPTEXLast; bmptex != NULL; bmptex = bmptex->prev )\r
1785                                         {\r
1786                                                 if( bmptex->num == bgapan->bmp && bmptex->bUse )\r
1787                                                 {\r
1788                                                         c->BGAtype      = BGATYPE_BGAPAN;\r
1789                                                         c->pBMPTEX      = bmptex;\r
1790                                                         c->pBGAPan      = bgapan;\r
1791                                                         break;\r
1792                                                 }\r
1793                                         }\r
1794                                         if( bmptex ) break;\r
1795                                         BMP* bmp;\r
1796                                         for( bmp = this->pBMPLast; bmp != NULL; bmp = bmp->prev )\r
1797                                         {\r
1798                                                 if( bmp->num == bgapan->bmp && bmp->bUse )\r
1799                                                 {\r
1800                                                         c->BGAtype      = BGATYPE_BGAPAN;\r
1801                                                         c->pBMP         = bmp;\r
1802                                                         c->pBGAPan      = bgapan;\r
1803                                                         break;\r
1804                                                 }\r
1805                                         }\r
1806                                         if( bmp ) break;\r
1807                                 }\r
1808                         }\r
1809                         if( c->BGAtype != BGATYPE_UNKNOWN )\r
1810                                 continue;\r
1811 \r
1812                         // (5-1-2) BGA \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1813                         for( BGA *bga = this->pBGALast; bga != NULL; bga = bga->prev ) {\r
1814                                 if( bga->num == c->nParam )     {\r
1815                                         BMPTEX* bmptex;\r
1816                                         for( bmptex = this->pBMPTEXLast; bmptex != NULL; bmptex = bmptex->prev ) {\r
1817                                                 if( bmptex->num == bga->bmp && bmptex->bUse ) {\r
1818                                                         c->BGAtype      = BGATYPE_BGA;\r
1819                                                         c->pBMPTEX      = bmptex;\r
1820                                                         c->pBGA         = bga;\r
1821                                                         break;\r
1822                                                 }\r
1823                                         }\r
1824                                         if( bmptex ) break;\r
1825                                         BMP* bmp;\r
1826                                         for( bmp = this->pBMPLast; bmp != NULL; bmp = bmp->prev ) {\r
1827                                                 if( bmp->num == bga->bmp && bmp->bUse ) {\r
1828                                                         c->BGAtype      = BGATYPE_BGA;\r
1829                                                         c->pBMP         = bmp;\r
1830                                                         c->pBGA         = bga;\r
1831                                                         break;\r
1832                                                 }\r
1833                                         }\r
1834                                         if( bmp ) break;\r
1835                                 }\r
1836                         }\r
1837                         if( c->BGAtype != BGATYPE_UNKNOWN )\r
1838                                 continue;\r
1839 \r
1840                         // (5-1-3) BMPTEX \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1841                         for( BMPTEX* bmptex = this->pBMPTEXLast; bmptex != NULL; bmptex = bmptex->prev ) {\r
1842                                 if( bmptex->num == c->nParam && bmptex->bUse ) {\r
1843                                         c->BGAtype      = BGATYPE_BMPTEX;\r
1844                                         c->pBMPTEX      = bmptex;\r
1845                                         break;\r
1846                                 }\r
1847                         }\r
1848                         if( c->BGAtype != BGATYPE_UNKNOWN )\r
1849                                 continue;\r
1850 \r
1851                         // (5-1-4) BMP \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1852                         for( BMP* bmp = this->pBMPLast; bmp != NULL; bmp = bmp->prev ) {\r
1853                                 if( bmp->num == c->nParam && bmp->bUse ) {\r
1854                                         c->BGAtype      = BGATYPE_BMP;\r
1855                                         c->pBMP         = bmp;\r
1856                                         break;\r
1857                                 }\r
1858                         }\r
1859                 }\r
1860                 // (5-2) DTX::Chip \82Ì BGA\83X\83R\81[\83v\89æ\91\9c\90Ø\91Ö\83`\83\83\83\93\83l\83\8b\83Z\83\8b\82É\81ABMP/BMPTEX \82Ö\82Ì\83|\83C\83\93\83^\82ð\8a\84\82è\93\96\82Ä\82é\81\r
1861                 if( c->nChannel == 0xC4 || c->nChannel == 0xC7 || ( c->nChannel >= 0xD5 && c->nChannel <= 0xD9 ) || c->nChannel == 0xE0 )\r
1862                 {\r
1863                         // \8f\89\8aú\89» \r
1864                         c->BGAtype      = BGATYPE_UNKNOWN;\r
1865                         c->pBMP         = NULL;\r
1866                         c->pBMPTEX      = NULL;\r
1867                         c->pBGA         = NULL;\r
1868                         c->pBGAPan      = NULL;\r
1869 \r
1870                         // (5-2-1) BMPTEX \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1871                         for( BMPTEX* bmptex = this->pBMPTEXLast; bmptex != NULL; bmptex = bmptex->prev )\r
1872                         {\r
1873                                 // \81¦BGA\83X\83R\81[\83v\89æ\91\9c\90Ø\91Ö\83`\83\83\83\93\83l\83\8b\82Ì\8fê\8d\87\81AnParam \82Í "BMP\94Ô\8d\86\82Å\82 \82è\81ABGA, BGAPAN \82Ì\94Ô\8d\86\82Í\96³\8aÖ\8cW\82Å\82 \82é\81B\r
1874                                 if( bmptex->num == c->nParam && bmptex->bUse )\r
1875                                 {\r
1876                                         c->BGAtype      = BGATYPE_BMPTEX;\r
1877                                         c->pBMPTEX      = bmptex;\r
1878                                         break;\r
1879                                 }\r
1880                         }\r
1881                         if( c->BGAtype != BGATYPE_UNKNOWN )\r
1882                                 continue;\r
1883 \r
1884                         // (5-2-2) BMP \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1885                         for( BMP* bmp = this->pBMPLast; bmp != NULL; bmp = bmp->prev )\r
1886                         {\r
1887                                 // \81¦BGA\83X\83R\81[\83v\89æ\91\9c\90Ø\91Ö\83`\83\83\83\93\83l\83\8b\82Ì\8fê\8d\87\81AnParam \82Í "BMP\94Ô\8d\86\82Å\82 \82è\81ABGA, BGAPAN \82Ì\94Ô\8d\86\82Í\96³\8aÖ\8cW\82Å\82 \82é\81B\r
1888                                 if( bmp->num == c->nParam && bmp->bUse ) {\r
1889                                         c->BGAtype      = BGATYPE_BMP;\r
1890                                         c->pBMP         = bmp;\r
1891                                         break;\r
1892                                 }\r
1893                         }\r
1894                 }\r
1895         }\r
1896 }\r
1897 void DTX::LoadAVI()\r
1898 {\r
1899         // (1) AVI \82Ì\83I\81[\83v\83\93 \r
1900         int nAVI\83I\81[\83v\83\93\90\94 = 0;\r
1901         for( AVI *ac = this->pAVI; ac != NULL; ac = ac->next )\r
1902         {\r
1903                 // #PATH_WAV \82Ì\8ew\92è\82ª\82 \82é\8fê\8d\87\82Í\82»\82±\82©\82ç\81A\82»\82ê\88È\8aO\82Í DTX \82Ì\82 \82é\8fê\8f\8a\82©\82ç\93Ç\82Ý\8d\9e\82Þ\81B\r
1904                 tstring path = ( this->strPathWav.empty() ) ? this->strFolder : this->strPathWav;\r
1905                 path += ac->strFileName;\r
1906 \r
1907                 // AVI \82ð\83I\81[\83v\83\93\r
1908                 ac->avi._\8f\89\8aú\89»();\r
1909                 ac->bUse = ( SUCCEEDED( ac->avi.Open( path ) ) ) ? true : false;                // open \82É\90¬\8c÷\82µ\82½\82ç true\r
1910 \r
1911                 if( ac->bUse )\r
1912                         nAVI\83I\81[\83v\83\93\90\94 ++;\r
1913                 else\r
1914                         ac->avi.Close();        // \8e¸\94s\r
1915         }\r
1916 \r
1917         // \83w\83b\83_\93Ç\82Ý\8d\9e\82Ý\82Ì\82Ý\82È\82ç\82±\82±\82Å\8fI\97¹\r
1918         if( this->bHeaderOnly ) return;\r
1919 \r
1920         // (2) AVIPAN \82Ì\8e\96\91O\8dÅ\93K\89» \r
1921         for( Chip *c = this->pChip; c != NULL; c = c->next )\r
1922         {\r
1923                 // AVI\83`\83\83\83l\83\8b\83`\83b\83v\82É\81AAVI/AVIPAN\82Ö\82Ì\83|\83C\83\93\83^\82ð\8a\84\82è\93\96\82Ä\82é\81B\r
1924                 if( c->nChannel == 0x54 ) \r
1925                 {\r
1926                         // \8f\89\8aú\89» \r
1927                         c->AVItype      = AVITYPE_UNKNOWN;\r
1928                         c->pAVI         = NULL;\r
1929                         c->pAVIPan      = NULL;\r
1930 \r
1931                         // (1) AVIPAN \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1932                         for( AVIPan *avipan = this->pAVIPanLast; avipan != NULL; avipan = avipan->prev )\r
1933                         {\r
1934                                 if( avipan->num == c->nParam )\r
1935                                 {\r
1936                                         AVI* avi;\r
1937                                         for( avi = this->pAVILast; avi != NULL; avi = avi->prev )\r
1938                                         {\r
1939                                                 if( avi->num == avipan->avi && avi->bUse )\r
1940                                                 {\r
1941                                                         c->AVItype      = AVITYPE_AVIPAN;\r
1942                                                         c->pAVI         = avi;\r
1943                                                         c->pAVIPan      = avipan;\r
1944                                                         break;\r
1945                                                 }\r
1946                                         }\r
1947                                         if( avi ) break;\r
1948                                 }\r
1949                         }\r
1950                         if( c->AVItype != AVITYPE_UNKNOWN )\r
1951                                 continue;\r
1952 \r
1953                         // (2) AVI \82©\82ç\8c\9f\8dõ\82µ\81A\82 \82ê\82Î\8f\88\97\9d\82·\82é\81\r
1954                         for( AVI* avi = this->pAVILast; avi != NULL; avi = avi->prev )\r
1955                         {\r
1956                                 if( avi->num == c->nParam && avi->bUse )\r
1957                                 {\r
1958                                         c->AVItype      = AVITYPE_AVI;\r
1959                                         c->pAVI         = avi;\r
1960                                         break;\r
1961                                 }\r
1962                         }\r
1963                 }\r
1964         }\r
1965 }\r
1966 void DTX::LoadWAV()\r
1967 {\r
1968         // (1) \83T\83E\83\93\83h\83}\83l\81[\83W\83\83\82Ì\83L\83\83\83b\83V\83\85\82Ì\83\8a\83Z\83b\83\r
1969         this->soundManager.t\8eg\97p\83t\83\89\83O\82ð\83N\83\8a\83A\82µ\95¡\90»\83Z\83\8b\82ð\8dí\8f\9c\82·\82é();\r
1970 \r
1971         // (2) \91S\83T\83E\83\93\83h\82ð\93Ç\82Ý\8d\9e\82Þ \r
1972         for( Wave *wc = this->pWave; wc != NULL; wc = wc->next )\r
1973         {\r
1974                 // path \82ð\8c\88\92è\81G#PATH_WAV \82Ì\8ew\92è\82ª\82 \82é\8fê\8d\87\82Í\82»\82±\82©\82ç\81A\82»\82ê\88È\8aO\82Í DTX \82Ì\82 \82é\8fê\8f\8a\82©\82ç\93Ç\82Ý\8d\9e\82Þ\81\r
1975                 tstring path = ( this->strPathWav.empty() ) ? this->strFolder : this->strPathWav;\r
1976                 path += wc->strFileName;\r
1977 \r
1978                 // \83T\83E\83\93\83h\82ð\8eg\97p\82·\82é\83\8c\81[\83\93\82²\82Æ\82É\90\90¬\82·\82é\r
1979                 for( int i = 0; i < 11; i++ )\r
1980                 {\r
1981                         if( ! wc->bUseByLane[i] ) continue;             // \82±\82Ì\83\8c\81[\83\93\82Å\8eg\97p\82³\82ê\82È\82¢\82È\82ç\83X\83L\83b\83v\r
1982 \r
1983                         // \82P\83\8c\81[\83\93\82É\95t\82«MAX_SOUND \8cÂ\82Ì\83o\83b\83t\83@\82ð\8dì\90¬\82·\82é\r
1984                         for( int j = 0; j < DTX_MAX_SOUND; j++ )\r
1985                         {\r
1986                                 // \83T\83E\83\93\83h\82ð\90\90¬\82·\82é\r
1987                                 if( ( wc->sound[i][j] = this->soundManager.p\83L\83\83\83b\83V\83\85\91Î\89\9e\83T\83E\83\93\83h\82ð\8dì\90¬\82µ\82Ä\95Ô\82·( path.c_str() ) ) == NULL )\r
1988                                 {\r
1989                                         wc->bUse = false;       // \82P\8cÂ\82Å\82à\8e¸\94s\82µ\82½\82ç\82±\82ÌWAV\8e©\91Ì\8eg\82í\82È\82¢\r
1990                                         break;\r
1991                                 }\r
1992                                 wc->bUse = true;\r
1993 \r
1994                                 // \89¹\97Ê\82Ì\8f\89\8aú\89»\r
1995                                 wc->sound[i][j]->SetVolume( 100 );\r
1996 \r
1997                                 // \91\8d\89\89\91t\8e\9e\8aÔ[ms]\82Ì\8cv\8eZ\r
1998                                 wc->dwBufferSize = wc->sound[i][j]->GetDirectSoundBufferSize();\r
1999                                 DWORD dwSize;\r
2000                                 wc->sound[i][j]->GetDirectSoundBuffer()->GetFormat( NULL, 0, &dwSize );\r
2001                                 LPWAVEFORMATEX pWF = (LPWAVEFORMATEX) malloc( dwSize );\r
2002                                 wc->sound[i][j]->GetDirectSoundBuffer()->GetFormat( pWF, dwSize, NULL );\r
2003                                 wc->dbTotalTime = (double)( wc->dwBufferSize / ( pWF->nAvgBytesPerSec * 0.001 ) );\r
2004                                 SAFE_FREE( pWF );\r
2005                         }\r
2006                         if( ! wc->bUse )\r
2007                                 break;  // \93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82½\82Ì\82Å\94²\82¯\82é\r
2008                 }\r
2009         }\r
2010         // (3) \83T\83E\83\93\83h\83}\83l\81[\83W\83\83\82Ì\83L\83\83\83b\83V\83\85\82©\82ç\96¢\8eg\97p\83T\83E\83\93\83h\82ð\8dí\8f\9c\82·\82é\81\r
2011         this->soundManager.t\96¢\8eg\97p\83T\83E\83\93\83h\82ð\8dí\8f\9c\82·\82é();\r
2012 }\r
2013 // \93r\92\86\82©\82ç\82Ì\8dÄ\90\8aJ\8en\r
2014 void DTX::SkipStart( double dbStartTime )\r
2015 {\r
2016         // Wave \82É\8aÖ\98A\95t\82¯\82ç\82ê\82é\83`\83b\83v\82Í 1, BMP\8aÖ\8cW\82Í 2\81B\r
2017         // \82½\82¾\82µ\83X\83L\83b\83v\8dÄ\90\82µ\82È\82¢\82Æ\82«\82Í 0 \82É\82µ\82Ä\82¨\82­\81B\r
2018         // \8bó\91Å\82¿\8ew\92è\82È\82Ç\81A\94­\90º\82³\82ê\82È\82¢WAV\8aÖ\8cW\82Í\96³\8e\8b\81B\r
2019         static const char bTarget[ 256 ] = {\r
2020                 0,1,0,0,2,0,0,2,0,0,0,0,0,0,0,0,        // 0x   01: BGM / 04,07: BGA\r
2021                 0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,        // 1x   11\81`1A: Drums\r
2022                 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,        // 2x   20\81`27: Guitar\r
2023                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        // 3x\r
2024                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        // 4x\r
2025                 0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,        // 5x   55\81`59,60: BGA\r
2026                 2,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,        // 6x   61\81`69,\r
2027                 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,        // 7x   70\81`79,\r
2028                 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,        // 8x   80\81`89,\r
2029                 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,        // 9x   90\81`92: BGM\r
2030                 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,        // ax   a0\81`a7: Bass\r
2031                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        // bx\r
2032                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        // cx\r
2033                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        // dx\r
2034                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        // ex\r
2035                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};       // fx\r
2036 \r
2037         for( Chip* cell = this->pChip; cell != NULL; cell = cell->next )\r
2038         {\r
2039                 // \8aJ\8en\8e\9e\8d\8f\82æ\82è\8cã\82ë\82È\82ç\81A\82»\82Ì\83`\83b\83v\82Å\92²\8d¸\91Å\82¿\90Ø\82è\81B\r
2040                 if( cell->dbTime > dbStartTime ) \r
2041                         break;\r
2042 \r
2043                 // \8f\88\97\9d\95ª\8aò\r
2044                 switch( bTarget[ cell->nChannel % 0xff ] )\r
2045                 {\r
2046                 case 1:\r
2047                         SkipStartWave( dbStartTime, cell );             // WAVE \82Ì\83X\83L\83b\83v\8dÄ\90\r
2048                         break;\r
2049 \r
2050                 case 2:\r
2051                         SkipStartBGA( dbStartTime, cell );              // BGA \82Ì\83X\83L\83b\83v\8dÄ\90\r
2052                         break;\r
2053                 }\r
2054         }\r
2055 }\r
2056 \r
2057 void DTX::SkipStartWave( double dbStartTime, Chip* cell )\r
2058 {\r
2059         // (1) \83\8c\81[\83\93\94Ô\8d\86\8eZ\8f\81¨ l \r
2060         int ch = cell->nChannel;\r
2061         int l;\r
2062         if( ch >= 0x11 && ch <= 0x1A )\r
2063                 l = s_nChannelToLane[ ch - 0x11 ];              // Drums\r
2064 \r
2065         else if( ch >= 0x20 && ch <= 0x27 )\r
2066                 l = 8;  // Guitar\r
2067 \r
2068         else if( ch >= 0xA0 && ch <= 0xA7 )\r
2069                 l = 9;  // Bass\r
2070 \r
2071         else if( ch == 0x01 || (ch >= 0x61 && ch <= 0x69) || (ch >= 0x70 && ch <= 0x79) || (ch >= 0x80 && ch <= 0x89) || (ch >= 0x90 && ch <= 0x92) )\r
2072                 l = 10; // BGM\r
2073 \r
2074         else            \r
2075                 return; // \82»\82ê\88È\8aO\81i\94­\90º\82È\82µ\81j\r
2076 \r
2077         // (2) \91Î\89\9e\82·\82éWave\82ð\8c\9f\8dõ \81¨ wc \r
2078         Wave* wc;\r
2079         for( wc = this->pWave; wc != NULL; wc = wc->next )\r
2080         {\r
2081                 if( wc->num == cell->nRealParam && wc->bUse )\r
2082                         break;\r
2083         }\r
2084         if( wc == NULL )\r
2085                 return;         // \91Î\89\9e\82·\82éWave\82ª\82È\82©\82Á\82½\r
2086         if( ! wc->bUseByLane[ l ] )\r
2087                 return;         // \82±\82Ì\83\8c\81[\83\93\82Å\82Í\8dÄ\90\82µ\82È\82¢\r
2088         if( cell->dbTime + ( wc->dbTotalTime / this->fSpeed ) <= dbStartTime )\r
2089                 return;         // \8dÄ\90\92\86\82\82á\82È\82¢\r
2090 \r
2091         // (3) \8ew\92è\88Ê\92u\82É\88Ú\93®\82µ\81A\91¦\8dÀ\82É\8dÄ\90\82ð\8aJ\8en\82·\82é\81\r
2092         if( ++ wc->nCurSound[ l ] >= DTX_MAX_SOUND )\r
2093                 wc->nCurSound[ l ] = 0;\r
2094         if( wc->sound[l][ wc->nCurSound[l] ] )\r
2095         {\r
2096                 wc->sound[l][ wc->nCurSound[l] ]->SetVolume( (long)((DTX_AUTOVOLUME * wc->volume)/100.0) );\r
2097                 wc->sound[l][ wc->nCurSound[l] ]->SetPan( wc->pan );\r
2098                 wc->sound[l][ wc->nCurSound[l] ]->Play();\r
2099                 wc->sound[l][ wc->nCurSound[l] ]->SetPosition( wc->sound[l][ wc->nCurSound[l] ]->GetPositionFromTime( dbStartTime - cell->dbTime ) );\r
2100         }\r
2101         wc->dbStartTime[l][ wc->nCurSound[l] ] = cell->dbTime;          // \8dÄ\90\8aJ\8en\8e\9e\8d\8f\r
2102         wc->bPlaying[l][ wc->nCurSound[l] ] = true;\r
2103 }\r
2104 void DTX::SkipStartBGA( double dbStartTime, Chip* cell )\r
2105 {\r
2106         // \8eÀ\91\95\82Í BGA \83\82\83W\83\85\81[\83\8b\81i\83A\83v\83\8a\91¤\81j\82É\88Ë\91\82·\82é\82½\82ß\81A\82±\82±\82Å\82Í\89½\82à\82µ\82È\82¢\81B\83A\83v\83\8a\91¤\82Å\8eÀ\91\95\82·\82é\82±\82Æ\81B\r
2107 }\r
2108 // \83`\83b\83v(WAV)\82Ì\8dÄ\90\81A\92â\8e~\r
2109 void DTX::PlayChip( Chip* pChip, int nLane, long lVol, bool bMIDIMonitor, bool bBad )\r
2110 {\r
2111         // (0) \8e\96\91O\83`\83F\83b\83\r
2112         if( this->pTimer == NULL ) return;\r
2113         if( pChip == NULL ) return;\r
2114         if( pChip->nRealParam < 0 ) return;\r
2115         if( nLane < 0 || nLane > 10 ) return;\r
2116 \r
2117         // (1) \83\8a\83X\83g\82Ì\96\96\94ö\82©\82ç\8c\9f\8dõ\82µ\81A\8dÄ\90\82·\82é\81i\93¯\88ê\94Ô\8d\86\82Å\82Ì\8fd\95¡\93o\98^\82ª\82 \82é\8fê\8d\87\81A\8cã\95û\82Ì\90Ý\92è\82ª\97D\90æ\82³\82ê\82é\81\r
2118         for( Wave *wc = this->pWaveLast; wc != NULL; wc = wc->prev )\r
2119         {\r
2120                 if( wc->num == pChip->nRealParam && wc->bUse && wc->bUseByLane[ nLane ] )\r
2121                 {\r
2122                         // (1-1) \83T\83E\83\93\83h\83\8d\81[\83e\81[\83V\83\87\83\93\r
2123                         if( ++ wc->nCurSound[ nLane ] >= DTX_MAX_SOUND )\r
2124                                 wc->nCurSound[ nLane ] = 0;\r
2125 \r
2126                         // (1-2) \8dÄ\90\r
2127                         int s = wc->nCurSound[ nLane ];\r
2128                         if( wc->sound[ nLane ][ s ] )\r
2129                         {\r
2130                                 wc->sound[ nLane ][ s ]->SetVolume( (long)((lVol * wc->volume)/100.0) );\r
2131                                 wc->sound[ nLane ][ s ]->SetPan( wc->pan );\r
2132 \r
2133                                 if( ! bBad )\r
2134                                 {\r
2135                                         wc->sound[ nLane ][ s ]->SetPitch( 1.0f );\r
2136                                         wc->sound[ nLane ][ s ]->Play();\r
2137                                 }\r
2138                                 else\r
2139                                 {\r
2140                                         // BAD \82Í\8eü\94g\90\94\95Ï\92²\r
2141                                         wc->sound[ nLane ][ s ]->SetPitch( ( 100+ (((rand()%3)+1)*7) * (1-(rand()%2)*2) )  /100.0f );\r
2142                                         wc->sound[ nLane ][ s ]->Play();\r
2143                                 }\r
2144                         }\r
2145                         wc->dbStartTime[ nLane ][ s ] = this->pTimer->db\91O\89ñReset\82µ\82½\8e\9e\8d\8f() + pChip->dbTime;    // \8dÄ\90\8aJ\8en\8e\9e\8d\8f \81\8c»\8dÝ\8e\9e\8d\8f\82Å\82Í\82È\82­\81AChip::dbTime \82É\88ê\92v\82³\82¹\82é(FPS\92x\89\84\82Ì\96h\8e~)(2007.6.9)\r
2146                         wc->bPlaying[ nLane ][ s ] = true;\r
2147 \r
2148                         // (1-3) pChip->dbTime \82Æ\8eÀ\8e\9e\8aÔ\82Æ\82Ì\8d·\82ð\96\84\82ß\82é\82½\82ß\81A\82¢\82«\82È\82èWAVE\8dÄ\90\88Ê\92u\8fC\90³\81B\r
2149                         this->AdjustWave( wc, wc->dbStartTime[ nLane ][ s ], wc->sound[ nLane ][ s ] );\r
2150 \r
2151                         break;\r
2152                 }\r
2153         }\r
2154         // (2) MIDI Note ON \82Ì\8fê\8d\87\82Í MIDI \83m\81[\83g\82Æ\82µ\82Ä\82à\94­\90º\81iDTXV \82Å\82Í\96¢\91Î\89\9e(2004.01.12)\81\r
2155         if( ! this->bDTXV )\r
2156         {\r
2157                 DWORD dwMsg = pChip->message.dwMsg;\r
2158                 if( this->bMIDINote && dwMsg != 0 )\r
2159                 {\r
2160                         if( bMIDIMonitor )                                                              // bMonitor = true \82Ì\8e\9e\82Í\r
2161                                 dwMsg = (dwMsg & 0x00FFFF) | 0x7F0000;          // \89¹\97Ê\82ð127\82É\82·\82é\r
2162                         midiOutShortMsg( this->hMidiOut, dwMsg );\r
2163                 }\r
2164         }\r
2165 }\r
2166 void DTX::StopWave( int nWave, int nLane )\r
2167 {\r
2168         if( nLane < 0 || nLane > 10 ) return;\r
2169 \r
2170         for( Wave *wc = this->pWaveLast; wc != NULL; wc = wc->prev )\r
2171         {\r
2172                 if( wc->num == nWave && wc->bUse && wc->bUseByLane[ nLane ] )\r
2173                 {\r
2174                         for( int i = 0; i < DTX_MAX_SOUND; i++ ) {\r
2175                                 if( wc->sound[ nLane ][ i ] )\r
2176                                         wc->sound[ nLane ][ i ]->Stop();\r
2177                                 wc->bPlaying[ nLane ][ i ] = false;\r
2178                         }\r
2179                         wc->nCurSound[ nLane ] = -1;\r
2180                         break;\r
2181                 }\r
2182         }\r
2183 }\r
2184 \r
2185 void DTX::StopAllWaves()\r
2186 {\r
2187         for( Wave* pw = this->pWave; pw != NULL; pw = pw->next ) {\r
2188                 for( int i = 0; i < 11; i++ ) {\r
2189                         for( int j = 0; j < DTX_MAX_SOUND; j++ ) {\r
2190                                 if( pw->bPlaying[i][j] && pw->sound[i][j] )\r
2191                                         pw->sound[i][j]->Stop();\r
2192                         }\r
2193                 }\r
2194         }\r
2195 }\r
2196 \r
2197 void DTX::PauseWaves()\r
2198 {\r
2199         for( Wave *wc = this->pWaveLast; wc != NULL; wc = wc->prev ) {\r
2200                 if( wc->bUse ) {\r
2201                         for( int j = 0; j < 11; j++ ) {\r
2202                                 if( wc->bUseByLane[j] ) {\r
2203                                         for( int i = 0; i < DTX_MAX_SOUND; i++ ) {\r
2204                                                 if( wc->sound[ j ][ i ] )\r
2205                                                         wc->sound[ j ][ i ]->Pause();\r
2206                                                 wc->bPlaying[ j ][ i ] = false;\r
2207                                                 wc->dbPauseTime[ j ][ i ] = this->pTimer->GetSysTime(); // \8eÀ\8e\9e\8aÔ\r
2208                                         }\r
2209                                 }\r
2210                         }\r
2211                 }\r
2212         }\r
2213 }\r
2214 \r
2215 void DTX::ContWaves()\r
2216 {\r
2217         for( Wave *wc = this->pWaveLast; wc != NULL; wc = wc->prev ) {\r
2218                 if( wc->bUse ) {\r
2219                         for( int j = 0; j < 11; j++ ) {\r
2220                                 if( wc->bUseByLane[j] ) {\r
2221                                         for( int i = 0; i < DTX_MAX_SOUND; i++ ) {\r
2222                                                 if( wc->sound[ j ][ i ] ) {\r
2223                                                         wc->sound[ j ][ i ]->Cont( wc->dbPauseTime[j][i] - wc->dbStartTime[j][i] );     // Pause() \82³\82ê\82Ä\82È\82¢\8fê\8d\87\82Í\89½\82à\89e\8b¿\82È\82µ\r
2224                                                         wc->dbStartTime[j][i] += this->pTimer->GetSysTime() - wc->dbPauseTime[j][i];\r
2225                                                 }\r
2226                                                 wc->bPlaying[ j ][ i ] = true;\r
2227                                         }\r
2228                                 }\r
2229                         }\r
2230                 }\r
2231         }\r
2232 }\r
2233 \r
2234 //\r
2235 void DTX::AdjustWaves()\r
2236 {\r
2237         for( Wave *wc = this->pWave; wc != NULL; wc = wc->next )\r
2238         {\r
2239                 if( wc->bUse )\r
2240                 {\r
2241                         for( int j = 0; j < 11; j++ )\r
2242                         {\r
2243                                 if( ! wc->bUseByLane[j] )\r
2244                                         continue;\r
2245 \r
2246                                 for( int i = 0; i < DTX_MAX_SOUND; i++ )\r
2247                                 {\r
2248                                         if( ! wc->sound[j][i] || ! wc->sound[j][i]->IsPlay() ) {\r
2249                                                 wc->bPlaying[j][i] = false;             // \8dÄ\90\92\86\82\82á\82È\82¢\r
2250                                                 continue;\r
2251                                         }\r
2252 \r
2253                                         // \8dÄ\90\88Ê\92u\95â\90³\r
2254                                         this->AdjustWave( wc, wc->dbStartTime[j][i], wc->sound[j][i] );\r
2255                                 }\r
2256                         }\r
2257                 }\r
2258         }\r
2259 }\r
2260 void DTX::AdjustWave( DTX::Wave* pWave, double dbStartTime, CSound* pSound )\r
2261 {\r
2262         if( !pWave || dbStartTime < 0.0 || !pSound)\r
2263                 return;\r
2264 \r
2265         // \91\8d\89\89\91t\8e\9e\8aÔ\82ª 5000ms \88È\8fã\82Ì\89¹\82Ì\82Ý\92²\90®\82·\82é \r
2266         if( pWave->dbTotalTime < 5000.0 )\r
2267                 return;\r
2268 \r
2269         // \81¦\83T\83E\83\93\83h\82Ì\8dÄ\90\82ÍCPU\82Æ\82Í\96³\8aÖ\8cW\82É\90i\82ñ\82Å\82¢\82­\82Ì\82Å\81A\r
2270         //   \91S\83T\83E\83\93\83h\82Å\82P\82Â\82Ì dbNow \82\82á\82È\82­\81A\82P\82Â\82P\82Â\82Ì\83T\83E\83\93\83h\82²\82Æ\82É g_Timer.GetSysTime() \82µ\82Ä\94ä\82×\82é\95K\97v\82ª\82 \82é\81B(2007.6.9)\r
2271         double dbNow = this->pTimer->GetSysTime();\r
2272 \r
2273         if( dbNow > dbStartTime )\r
2274         {\r
2275                 // \81¦ this->fSpeed \82Í CSound::GetPositionFromTime() \93à\82Å\8dl\97\82³\82ê\82é\82Ì\82Å\82±\82±\82Å\82Í\82¢\82ç\82È\82¢\81B\r
2276                 double dbPos = ( dbNow - dbStartTime ) * 1/*this->fSpeed*/;\r
2277                 pSound->SetPosition( pSound->GetPositionFromTime( dbPos ) );\r
2278         }\r
2279 }\r
2280 //\r
2281 void DTX::SetVolume( int nWave, long lVolume, int nLane )\r
2282 {\r
2283         if( nLane < 0 || nLane > 10 ) return;\r
2284 \r
2285         for( Wave *wc = this->pWaveLast; wc != NULL; wc = wc->prev )            // \83\8a\83X\83g\82Ì\96\96\94ö\82©\82ç\8c\9f\8dõ... \93¯\88ê\94Ô\8d\86\82Å\82Ì\8fd\95¡\93o\98^\82ª\82 \82é\8fê\8d\87\81A\8cã\95û\82Ì\90Ý\92è\82ª\97D\90æ\82³\82ê\82é\81B\r
2286         {\r
2287                 if( wc->num == nWave && wc->bUse && wc->bUseByLane[ nLane ] )\r
2288                 {\r
2289                         int next = wc->nCurSound[ nLane ] + 1;                                  // \8e\9f\82É\94­\90º\82·\82×\82«\83T\83E\83\93\83h\82É\82Â\82¢\82Ä\90Ý\92è\r
2290                         if( next >= DTX_MAX_SOUND )\r
2291                                 next = 0;\r
2292                         if( wc->sound[ nLane ][ next ] )\r
2293                                 wc->sound[ nLane ][ next ]->SetVolume( lVolume );\r
2294                         break;\r
2295                 }\r
2296         }\r
2297 }\r
2298 \r
2299 void DTX::SetWAVCache( bool bON )\r
2300 {\r
2301         this->bWAVCache = bON;\r
2302 }\r
2303 void DTX::SetBMPCache( bool bON )\r
2304 {\r
2305         this->bBMPCache = bON;\r
2306 }\r
2307 void DTX::SetResultImage( int rank, LPCTSTR fname, int arPriority[] )\r
2308 {\r
2309         if( rank < 0 || rank > 6 )\r
2310                 return;\r
2311 \r
2312         for( int i = rank; i >= 0; i-- )\r
2313         {\r
2314                 if( arPriority[i] < 7-rank )\r
2315                 {\r
2316                         arPriority[i] = 7-rank;\r
2317                         this->strResultImage[i] = fname;\r
2318                 }\r
2319         }\r
2320 }\r
2321 \r
2322 void DTX::SetResultMovie( int rank, LPCTSTR fname, int arPriority[] )\r
2323 {\r
2324         if( rank < 0 || rank > 6 )\r
2325                 return;\r
2326 \r
2327         for( int i = rank; i >= 0; i-- )\r
2328         {\r
2329                 if( arPriority[i] < 7-rank )\r
2330                 {\r
2331                         arPriority[i] = 7-rank;\r
2332                         this->strResultMovie[i] = fname;\r
2333                 }\r
2334         }\r
2335 }\r
2336 \r
2337 void DTX::SetResultSound( int rank, LPCTSTR fname, int arPriority[] )\r
2338 {\r
2339         if( rank < 0 || rank > 6 )\r
2340                 return;\r
2341 \r
2342         for( int i = rank; i >= 0; i-- )\r
2343         {\r
2344                 if( arPriority[i] < 7-rank )\r
2345                 {\r
2346                         arPriority[i] = 7-rank;\r
2347                         this->strResultSound[i] = fname;\r
2348                 }\r
2349         }\r
2350 }\r
2351 //\r
2352 bool DTX::IsCommand( LPTSTR *p, LPCTSTR cmd )\r
2353 {\r
2354         static TCHAR buf[256];\r
2355         int len = lstrlen( cmd );\r
2356         if( len > 255 ) len = 255;\r
2357         TCHAR *q = *p;\r
2358         \r
2359         int i = 0;\r
2360         while( *q != _T(':') && *q != _T('\n') && *q != _T(' ') && *q != _T('\t') && i < len )\r
2361                 buf[i++] = *q++;\r
2362         buf[i] = _T('\0');\r
2363 \r
2364         if( i != len || _tcsnicmp( buf, cmd, i ) != 0 )\r
2365                 return false;\r
2366 \r
2367         SKIPSP( q );\r
2368         if( *q == _T(':') ) {\r
2369                 q++;\r
2370                 SKIPSP( q );\r
2371         }\r
2372         *p = q;\r
2373         return true;\r
2374 }\r
2375 \r
2376 int  DTX::GetCommand( LPTSTR *p, LPCTSTR cmd )\r
2377 {\r
2378         static TCHAR buf[256];                  // \83R\83}\83\93\83h\82Í\8dÅ\91å256\95\8e\9a\r
2379         int len = lstrlen( cmd );\r
2380         if( len > 255 ) len = 255;\r
2381 \r
2382         TCHAR *q = *p;\r
2383         int i;\r
2384         for( i = 0; *q != _T(':') && *q != _T('\n') && *q != _T(' ') && *q != _T('\t') && i < len; i++ )        // buf\82Ö\82Ícmd\82Æ\93¯\82\95\8e\9a\90\94\82¾\82¯\83R\83s\81[\82·\82é\r
2385                 buf[i] = *q++;\r
2386         buf[i] = _T('\0');\r
2387 \r
2388         if( lstrcmpi( buf, cmd ) != 0 ) return 0;\r
2389 \r
2390         int zz = GetZex( q );\r
2391 \r
2392         if( zz >= 0 )\r
2393                 while((*q>=_T('0')&&*q<=_T('9'))||(*q>=_T('a')&&*q<=_T('z'))||(*q>=_T('A')&&*q<=_T('Z'))||*q==_T('-')||*q==_T('+')) q++;\r
2394 \r
2395         SKIPSP( q );\r
2396         if( *q == _T(':') )\r
2397         {\r
2398                 q++;\r
2399                 SKIPSP( q );\r
2400         }\r
2401         *p = q;\r
2402         return ( zz < 0 ) ? -1 : zz;\r
2403 }\r
2404 \r
2405 int  DTX::GetZex( LPCTSTR p )\r
2406 {\r
2407         int num = 0;\r
2408         for( int i = 0; i < 2; i++ )\r
2409         {\r
2410                 num *= 36;\r
2411                 if( *p >= _T('0') && *p <= _T('9') )            num += *p - _T('0');\r
2412                 else if( *p >= _T('a') && *p <= _T('z') )       num += *p - _T('a') + 10;\r
2413                 else if( *p >= _T('A') && *p <= _T('Z') )       num += *p - _T('A') + 10;\r
2414                 else\r
2415                         return -1;      // 0\81`9,A\81`Z \88È\8aO\82Ì\95\8e\9a\82ª\8eg\82í\82ê\82Ä\82¢\82é\r
2416                 p++;\r
2417         }\r
2418         return num;\r
2419 }\r
2420 \r
2421 int  DTX::GetHex( LPCTSTR p )\r
2422 {\r
2423         int num = 0;\r
2424         for( int i = 0; i < 2; i++ )\r
2425         {\r
2426                 num *= 16;\r
2427                 if( *p >= _T('0') && *p <= _T('9') )            num += *p - _T('0');\r
2428                 else if( *p >= _T('a') && *p <= _T('f') )       num += *p - _T('a') + 10;\r
2429                 else if( *p >= _T('A') && *p <= _T('F') )       num += *p - _T('A') + 10;\r
2430                 else \r
2431                         return -1;      // 0\81`9,A\81`F \88È\8aO\82Ì\95\8e\9a\82ª\8eg\82í\82ê\82Ä\82¢\82é\r
2432                 p++;\r
2433         }\r
2434         return num;\r
2435 }\r
2436 \r
2437 int  DTX::GetDec( LPCTSTR p )\r
2438 {\r
2439         int f = 1;\r
2440         if( *p == _T('-') )\r
2441         {\r
2442                 f = -1;\r
2443                 p++;\r
2444         }\r
2445         else if( *p == _T('+') )\r
2446         {\r
2447                 f = 1;\r
2448                 p++;\r
2449         }\r
2450         int num = 0;\r
2451         while( *p >= _T('0') && *p <= _T('9') )\r
2452         {\r
2453                 num = num * 10 + (*p - _T('0'));\r
2454                 p++;\r
2455         }\r
2456         return num * f;\r
2457 }\r
2458 \r
2459 int  DTX::GetDec3( LPCTSTR p )\r
2460 {\r
2461         int num = 0;\r
2462         for( int i = 0; i < 3; i++ )\r
2463         {\r
2464                 num *= 10;\r
2465                 if( *p >= _T('0') && *p <= _T('9') )                            num += *p - _T('0');\r
2466                 else if( i == 0 && *p >= _T('a') && *p <= _T('z') )     num += *p - _T('a') + 10;\r
2467                 else if( i == 0 && *p >= _T('A') && *p <= _T('Z') ) num += *p - _T('A') + 10;\r
2468                 else\r
2469                         return -1;      // 0\81`9 \88È\8aO\82Ì\95\8e\9a\82ª\8eg\82í\82ê\82Ä\82¢\82é\r
2470                 p++;\r
2471         }\r
2472         return num;\r
2473 }\r
2474 \r
2475 int  DTX::GetChannel( LPCTSTR p )\r
2476 {\r
2477         // GDA, G2D \88È\8aO\82Í16 \90i\90\94\82Q\83P\83^\r
2478         if( this->scoreType != SCORETYPE_GDA && this->scoreType != SCORETYPE_G2D )\r
2479                 return GetHex( p );\r
2480 \r
2481         // GDA, G2D \82Í\93Á\8eê\95\8e\9a\97ñ\r
2482         #define GDACH   ( 5*12+1 )      //\82±\82Ì\90\94\82Í\82±\82ê\8eQ\8fÆ--------------------------------\81«\r
2483         static const struct ChMap {\r
2484                 LPCTSTR strCh;\r
2485                 int nCh;\r
2486         } chmap[ GDACH ] = {\r
2487                 {"TC", 0x03}, {"BL", 0x02}, {"GS", 0x29}, {"DS", 0x30}, {"FI", 0x53},   // 1\r
2488                 {"HH", 0x11}, {"SD", 0x12}, {"BD", 0x13}, {"HT", 0x14}, {"LT", 0x15},   // 2\r
2489                 {"CY", 0x16}, {"G1", 0x21}, {"G2", 0x22}, {"G3", 0x23}, {"G4", 0x24},   // 3\r
2490                 {"G5", 0x25}, {"G6", 0x26}, {"G7", 0x27}, {"GW", 0x28}, {"01", 0x61},   // 4\r
2491                 {"02", 0x62}, {"03", 0x63}, {"04", 0x64}, {"05", 0x65}, {"06", 0x66},   // 5\r
2492                 {"07", 0x67}, {"08", 0x68}, {"09", 0x69}, {"0A", 0x70}, {"0B", 0x71},   // 6\r
2493                 {"0C", 0x72}, {"0D", 0x73}, {"0E", 0x74}, {"0F", 0x75}, {"10", 0x76},   // 7\r
2494                 {"11", 0x77}, {"12", 0x78}, {"13", 0x79}, {"14", 0x80}, {"15", 0x81},   // 8\r
2495                 {"16", 0x82}, {"17", 0x83}, {"18", 0x84}, {"19", 0x85}, {"1A", 0x86},   // 9\r
2496                 {"1B", 0x87}, {"1C", 0x88}, {"1D", 0x89}, {"1E", 0x90}, {"1F", 0x91},   // 10\r
2497                 {"20", 0x92}, {"B1", 0xA1}, {"B2", 0xA2}, {"B3", 0xA3}, {"B4", 0xA4},   // 11\r
2498                 {"B5", 0xA5}, {"B6", 0xA6}, {"B7", 0xA7}, {"BW", 0xA8}, {"G0", 0x20},   // 12\r
2499                 {"B0", 0xA0}                                                                                                                    // +1\r
2500         };\r
2501 \r
2502         if( *p == _T('\0') || *(p+1) == _T('\0') )\r
2503                 return -1;      // \83`\83\83\83\93\83l\83\8b\94Ô\8d\86\82ª\82Q\83P\83^\82È\82¢\r
2504 \r
2505         TCHAR buf[3];\r
2506         buf[0] = *p++;\r
2507         buf[1] = *p++;\r
2508         buf[2] = _T('\0');\r
2509         for( int i = 0; i < GDACH; i++ )\r
2510         {\r
2511                 if( lstrcmpi( chmap[i].strCh, buf ) == 0 )\r
2512                         return chmap[i].nCh;\r
2513         }\r
2514         return -1;\r
2515 }\r
2516 \r
2517 void DTX::SetSpeed( float fSpeed )\r
2518 {\r
2519         for( Wave *w = this->pWave; w != NULL; w = w->next )\r
2520         {\r
2521                 if( w->bUse )\r
2522                 {\r
2523                         for( int i = 0; i < 11; i++ )\r
2524                         {\r
2525                                 if( w->bUseByLane[ i ] )\r
2526                                 {\r
2527                                         for( int j = 0; j < DTX_MAX_SOUND; j++ )\r
2528                                         {\r
2529                                                 if( w->sound[ i ][ j ] != NULL )\r
2530                                                         w->sound[ i ][ j ]->SetSpeed( fSpeed );\r
2531                                         }\r
2532                                 }\r
2533                         }\r
2534                 }\r
2535         }\r
2536 }\r
2537 \r
2538 void DTX::CalcHash()\r
2539 {\r
2540         CFileMM file;\r
2541 \r
2542         // \83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\r
2543         if( ! file.Load( this->strFullPath ) )\r
2544                 return;         // \8e¸\94s\r
2545 \r
2546         // \83t\83@\83C\83\8b\93à\97e\82Ì\83n\83b\83V\83\85\92l\82ð\8cv\8eZ\82µ\82Ä this->strHash \82Ö\8ai\94[\r
2547         MD5 md5;\r
2548         md5.Init();\r
2549         md5.Update( file.GetData(), file.GetSize() );\r
2550         md5.Final( this->strHash );\r
2551 \r
2552         file.Term();\r
2553 }\r
2554 \r
2555 static int s_nChangeRGB[6][8] = {\r
2556         { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 },             // RGB \81¨ RGB\r
2557         { 0x00, 0x02, 0x01, 0x03, 0x04, 0x06, 0x05, 0x07 },             //        RBG\r
2558         { 0x00, 0x01, 0x04, 0x05, 0x02, 0x03, 0x06, 0x07 },             //        GRB\r
2559         { 0x00, 0x02, 0x04, 0x06, 0x01, 0x03, 0x05, 0x07 },             //        GBR\r
2560         { 0x00, 0x04, 0x01, 0x05, 0x02, 0x06, 0x03, 0x07 },             //        BRG\r
2561         { 0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07 }              //        BGR\r
2562 };\r
2563 void DTX::Random( int nType, bool bSuper )\r
2564 {\r
2565         int nPart    = -10000;  // \8f¬\90ß\94Ô\8d\86\r
2566         int nPattern = 0;               // \8f¬\90ß\92P\88Ê\82Ì\93ü\82ê\91Ö\82¦\96@\91¥\r
2567 \r
2568         int n\93K\97p\83`\83b\83v\90\94 = 0;\r
2569 \r
2570         for( Chip* cp = this->pChip; cp != NULL; cp = cp->next )\r
2571         {\r
2572                 // \8f¬\90ß\82ª\95Ï\82í\82Á\82½\82ç\93ü\82ê\91Ö\82¦\96@\91¥\82ð\95Ï\8dX\r
2573                 if( (int)(cp->dwPosition / DTX_RESOLVE) != nPart ) {\r
2574                         nPart = (int)(cp->dwPosition / DTX_RESOLVE);\r
2575                         nPattern = rand() % 6;\r
2576                 }\r
2577 \r
2578                 // \83\8c\81[\83\93\93ü\82ê\91Ö\82¦\r
2579                 int ch = cp->nChannel;\r
2580                 if( ( nType == 0 && ch >= 0x20 && ch <= 0x27 ) || ( nType == 1 && ch >= 0xA0 && ch <= 0xA7 ) )\r
2581                 {\r
2582                         if( bSuper )\r
2583                                 cp->nChannel = (ch & 0xF0) | ( s_nChangeRGB[ rand() % 6 ][ ch & 0x07 ] );\r
2584                         else\r
2585                                 cp->nChannel = (ch & 0xF0) | ( s_nChangeRGB[ nPattern   ][ ch & 0x07 ] );\r
2586 \r
2587                         n\93K\97p\83`\83b\83v\90\94 ++;\r
2588                 }\r
2589         }\r
2590 }\r
2591 \r
2592 DWORD DTX::GetChipParamType( int nCh )\r
2593 {\r
2594         switch( nCh )\r
2595         {\r
2596                 // \83o\83b\83N\83R\81[\83\89\83X\r
2597                 case 0x01:\r
2598                         return DTXCPT_WAV;\r
2599 \r
2600                 // BPM\95Ï\8dX\r
2601                 case 0x03:\r
2602                         return DTXCPT_BPM;\r
2603 \r
2604                 // BPM\95Ï\8dX\81i\8ag\92£\81j\r
2605                 case 0x08:\r
2606                         return DTXCPT_BPMEX;\r
2607 \r
2608                 // \82a\82f\82`\r
2609                 case 0x04: case 0x07: case 0x55: case 0x56: case 0x57: case 0x58: case 0x59: case 0x60:\r
2610                         return DTXCPT_BMP | DTXCPT_BMPTEX | DTXCPT_BGA | DTXCPT_BGAPAN;\r
2611 \r
2612                 // \82a\82f\82`\83X\83R\81[\83v\89æ\91\9c\90Ø\91Ö\r
2613                 case 0xC4: case 0xC7: case 0xD5: case 0xD6: case 0xD7: case 0xD8: case 0xD9: case 0xE0:\r
2614                         return DTXCPT_BMP | DTXCPT_BMPTEX;\r
2615 \r
2616                 // \83h\83\89\83\80\83p\81[\83g\81i\92Ê\8fí\81A\95s\89Â\8e\8b\81A\8bó\82¤\82¿\81j\r
2617                 case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A:\r
2618                 case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A:\r
2619                 case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: case 0xB8: case 0xB9: case 0xBC:\r
2620                         return DTXCPT_WAV;\r
2621 \r
2622                 // \83M\83^\81[\83p\81[\83g\81i\92Ê\8fí\81A\8bó\82¤\82¿\81j\r
2623                 case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\r
2624                 case 0xBA:\r
2625                         return DTXCPT_WAV;\r
2626 \r
2627                 // \83x\81[\83X\83p\81[\83g\81i\92Ê\8fí\81A\8bó\91Å\82¿\81j\r
2628                 case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7:\r
2629                 case 0xBB:\r
2630                         return DTXCPT_WAV;\r
2631 \r
2632                 // \82a\82f\82l\r
2633                 case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x70:\r
2634                 case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x80:\r
2635                 case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x90:\r
2636                 case 0x91: case 0x92:\r
2637                         return DTXCPT_WAV;\r
2638 \r
2639                 // AVI\r
2640                 case 0x54:\r
2641                         return DTXCPT_AVI;\r
2642 \r
2643                 // \8a½\90º\r
2644                 case 0x1F: case 0x2F: case 0xAF:\r
2645                         return DTXCPT_WAV;\r
2646         }\r
2647         \r
2648         return 0;\r
2649 }\r
2650 \r
2651         }//General\r
2652 }//FDK