From: <sag...@us...> - 2010-02-14 01:10:46
|
Revision: 493 http://modplug.svn.sourceforge.net/modplug/?rev=493&view=rev Author: saga-games Date: 2010-02-14 00:22:40 +0000 (Sun, 14 Feb 2010) Log Message: ----------- [Mod] Added dialog resources for Sample Generator [Ref] Mostly cosmetic changes to ITP and GDM loader as well as tagging code Modified Paths: -------------- trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/tagging.cpp trunk/OpenMPT/mptrack/tagging.h trunk/OpenMPT/soundlib/IT_DEFS.H trunk/OpenMPT/soundlib/Load_gdm.cpp trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/mptrack/mptrack.rc 2010-02-14 00:22:40 UTC (rev 493) @@ -13,7 +13,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// German (Germany) resources +// Deutsch (Deutschland) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 @@ -99,7 +99,50 @@ LTEXT "Enabling instrument, volume or octave change will enable the keyboard split feature. These options are applied to the lower section of the keyboard.",IDC_STATIC,6,78,174,24 END +IDD_SAMPLE_GENERATOR DIALOGEX 0, 0, 304, 191 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Sample Generator" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Mathematical Formula",IDC_STATIC,6,6,294,30 + EDITTEXT IDC_EDIT_FORMULA,12,18,270,12,ES_AUTOHSCROLL + PUSHBUTTON "6",IDC_BUTTON_SHOW_EXPRESSIONS,282,18,12,12 + GROUPBOX "Sample Parameters",IDC_STATIC,6,42,294,48 + LTEXT "Sample Length:",IDC_STATIC,12,56,60,8 + EDITTEXT IDC_EDIT_SAMPLE_LENGTH,108,54,42,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Sample Frequency:",IDC_STATIC,12,74,66,8 + EDITTEXT IDC_EDIT_SAMPLE_FREQ,108,72,42,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Sample Length in Seconds:",IDC_STATIC,156,56,90,8 + EDITTEXT IDC_EDIT_SAMPLE_LENGTH_SEC,252,54,42,12,ES_AUTOHSCROLL + LTEXT "Size: 9999 KB",IDC_STATIC_SMPSIZE_KB,156,72,138,12 + GROUPBOX "Clipping Options",IDC_STATIC,6,96,294,66 + CONTROL "Normalize - All values are accepted and normalized.",IDC_RADIO_SMPCLIP3, + "Button",BS_AUTORADIOBUTTON,12,114,270,12 + CONTROL "Clip - Values in [-1,1] are accepted, other values are clipped.",IDC_RADIO_SMPCLIP1, + "Button",BS_AUTORADIOBUTTON,12,126,270,12 + CONTROL "Overflow - Values in [-1,1] are accepted, other values are wrapped around.",IDC_RADIO_SMPCLIP2, + "Button",BS_AUTORADIOBUTTON,12,138,270,12 + DEFPUSHBUTTON "OK",IDOK,192,168,50,14 + PUSHBUTTON "Cancel",IDCANCEL,246,168,50,14 + PUSHBUTTON "Presets...",IDC_BUTTON_SAMPLEGEN_PRESETS,6,168,50,14 +END +IDD_SAMPLE_GENERATOR_PRESETS DIALOGEX 0, 0, 316, 101 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Sample Generator Presets" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,258,78,50,14 + LISTBOX IDC_LIST_SAMPLEGEN_PRESETS,6,6,108,90,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_EDIT_PRESET_NAME,120,18,186,12,ES_AUTOHSCROLL + LTEXT "Name:",IDC_STATIC,120,6,186,8 + EDITTEXT IDC_EDIT_PRESET_EXPR,120,54,186,12,ES_AUTOHSCROLL + LTEXT "Expression:",IDC_STATIC,120,42,186,8 + PUSHBUTTON "Remove",IDC_BUTTON_REMOVE,120,78,50,14 + PUSHBUTTON "Add",IDC_BUTTON_ADD,174,78,50,14 +END + + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -139,15 +182,31 @@ TOPMARGIN, 7 BOTTOMMARGIN, 130 END + + IDD_SAMPLE_GENERATOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 297 + TOPMARGIN, 7 + BOTTOMMARGIN, 184 + END + + IDD_SAMPLE_GENERATOR_PRESETS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 309 + TOPMARGIN, 7 + BOTTOMMARGIN, 94 + END END #endif // APSTUDIO_INVOKED -#endif // German (Germany) resources +#endif // Deutsch (Deutschland) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// Englisch (USA) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 @@ -467,7 +526,7 @@ END IDD_CONTROL_SAMPLES DIALOGEX 0, 0, 544, 106 -STYLE DS_SETFONT | WS_CHILD +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,4,4,55,17 @@ -2311,12 +2370,12 @@ IDS_SOUNDTOUCH_LOADFAILURE "Unable to load OpenMPT_soundtouch_i16.dll." END -#endif // English (U.S.) resources +#endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.K.) resources +// Englisch (GB) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) #ifdef _WIN32 @@ -2685,7 +2744,7 @@ // IDR_BUILTIN_TUNINGS TUNING "res\\built-inTunings.tc" -#endif // English (U.K.) resources +#endif // Englisch (GB) resources ///////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/mptrack/resource.h 2010-02-14 00:22:40 UTC (rev 493) @@ -132,6 +132,8 @@ #define IDD_CLEANUP_SONG 521 #define IDD_CHANNEL_NAME 522 #define IDD_KEYBOARD_SPLIT 523 +#define IDD_SAMPLE_GENERATOR 524 +#define IDD_SAMPLE_GENERATOR_PRESETS 525 #define IDC_BUTTON1 1001 #define IDC_BUTTON2 1002 #define IDC_BUTTON3 1003 @@ -930,6 +932,22 @@ #define IDC_STATIC_CHANNEL_NAME 2410 #define IDC_EDIT_CHANNEL_NAME 2411 #define IDC_STATIC_PATTERNNAME 2412 +#define IDC_EDIT_SAMPLE_LENGTH 2413 +#define IDC_EDIT_SAMPLE_FREQ 2414 +#define IDC_EDIT_FORMULA 2415 +#define IDC_EDIT_SAMPLE_LENGTH2 2416 +#define IDC_EDIT_SAMPLE_LENGTH_SEC 2416 +#define IDC_RADIO_SMPCLIP1 2417 +#define IDC_RADIO_SMPCLIP2 2418 +#define IDC_RADIO_SMPCLIP3 2419 +#define IDC_STATIC_SMPSIZE_KB 2420 +#define IDC_BUTTON_SHOW_EXPRESSIONS 2421 +#define IDC_SAMPLEGEN_PRESETS 2422 +#define IDC_BUTTON_SAMPLEGEN_PRESETS 2422 +#define IDC_EDIT_PRESET_NAME 2423 +#define IDC_EDIT_PRESET_EXPR 2424 +#define IDC_LIST_SAMPLEGEN_PRESETS 2425 +#define IDC_CHECK_UNDO 2426 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1178,7 +1196,10 @@ #define ID_EDIT_SPLITKEYBOARDSETTINGS 59240 #define ID_EDIT_PASTESPECIAL 59241 #define ID_CHANGE_PCNOTE_PARAM 59242 -#define ID_MODTREE_CLOSE 60243 +#define ID_MODTREE_CLOSE 60243 +#define ID_SAMPLE_GENERATOR_MENU 60244 +#define ID_SAMPLE_GENERATOR_PRESET_MENU 60344 +#define ID_SAMPLE_GENERATE 60445 // Next default values for new objects // @@ -1186,8 +1207,8 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 526 -#define _APS_NEXT_COMMAND_VALUE 60244 -#define _APS_NEXT_CONTROL_VALUE 2426 +#define _APS_NEXT_COMMAND_VALUE 60446 +#define _APS_NEXT_CONTROL_VALUE 2427 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/mptrack/tagging.cpp =================================================================== --- trunk/OpenMPT/mptrack/tagging.cpp 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/mptrack/tagging.cpp 2010-02-14 00:22:40 UTC (rev 493) @@ -13,6 +13,7 @@ // CFileTagging - helper class for writing tags CFileTagging::CFileTagging() +//-------------------------- { encoder = "OpenMPT " MPT_VERSION_STR; } @@ -23,10 +24,11 @@ // Convert Integer to Synchsafe Integer (see ID3v2.4 specs) // Basically, it's a BigEndian integer, but the MSB of all bytes is 0. // Thus, a 32-bit integer turns into a 28-bit integer. -UINT32 CFileTagging::intToSynchsafe(UINT32 iIn) +uint32 CFileTagging::intToSynchsafe(uint32 iIn) +//--------------------------------------------- { iIn = LittleEndian(iIn); - UINT32 iOut = 0, iSteps = 0; + uint32 iOut = 0, iSteps = 0; do { iOut |= (iIn & 0x7F) << iSteps; iSteps += 8; @@ -36,6 +38,7 @@ // Write Tags void CFileTagging::WriteID3v2Tags(FILE *f) +//---------------------------------------- { if(!f) return; @@ -81,6 +84,7 @@ // Write a ID3v2 frame void CFileTagging::WriteID3v2Frame(char cFrameID[4], string sFramecontent, FILE *f) +//--------------------------------------------------------------------------------- { if(!strcmp(cFrameID, "") || sFramecontent.empty() || !f) return; @@ -108,6 +112,7 @@ // Write RIFF tags void CFileTagging::WriteWaveTags(WAVEDATAHEADER *wdh, WAVEFILEHEADER *wfh, FILE *f) +//--------------------------------------------------------------------------------- { if(!f || !wdh || !wfh) return; Modified: trunk/OpenMPT/mptrack/tagging.h =================================================================== --- trunk/OpenMPT/mptrack/tagging.h 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/mptrack/tagging.h 2010-02-14 00:22:40 UTC (rev 493) @@ -58,18 +58,18 @@ typedef struct _TAGID3v2HEADER { - BYTE signature[3]; - BYTE version[2]; - BYTE flags; - UINT32 size; + uint8 signature[3]; + uint8 version[2]; + uint8 flags; + uint32 size; // Total: 10 bytes } TAGID3v2HEADER; typedef struct _TAGID3v2FRAME { - UINT32 frameid; - UINT32 size; - UINT16 flags; + uint32 frameid; + uint32 size; + uint16 flags; // Total: 10 bytes } TAGID3v2FRAME; @@ -106,11 +106,11 @@ private: // Convert Integer to Synchsafe Integer (see ID3v2.4 specs) - UINT32 intToSynchsafe(UINT32 in); + uint32 intToSynchsafe(UINT32 in); // Write a frame void WriteID3v2Frame(char cFrameID[4], string sFramecontent, FILE *f); // Size of our tag - UINT32 totalID3v2Size; + uint32 totalID3v2Size; }; #pragma pack() Modified: trunk/OpenMPT/soundlib/IT_DEFS.H =================================================================== --- trunk/OpenMPT/soundlib/IT_DEFS.H 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/soundlib/IT_DEFS.H 2010-02-14 00:22:40 UTC (rev 493) @@ -140,19 +140,19 @@ extern BYTE autovibit2xm[8]; extern BYTE autovibxm2it[8]; -#endif +#define ITP_VERSION 0x00000102 // v1.02 -//plastiq.manyChannels enum IT_ReaderBitMasks { - // pattern row parsing, the channel data is read to obtain - // number of channels active in the pattern. These bit masks are - // to blank out sections of the byte of data being read. + // pattern row parsing, the channel data is read to obtain + // number of channels active in the pattern. These bit masks are + // to blank out sections of the byte of data being read. - IT_bitmask_patternChanField_c = 0x7f, - IT_bitmask_patternChanMask_c = 0x3f, - IT_bitmask_patternChanEnabled_c = 0x80, - IT_bitmask_patternChanUsed_c = 0x0f + IT_bitmask_patternChanField_c = 0x7f, + IT_bitmask_patternChanMask_c = 0x3f, + IT_bitmask_patternChanEnabled_c = 0x80, + IT_bitmask_patternChanUsed_c = 0x0f }; -//end plastiq.manyChannels \ No newline at end of file + +#endif \ No newline at end of file Modified: trunk/OpenMPT/soundlib/Load_gdm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_gdm.cpp 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/soundlib/Load_gdm.cpp 2010-02-14 00:22:40 UTC (rev 493) @@ -19,57 +19,63 @@ typedef struct _GDMHEADER { - DWORD ID; // ID: 'GDM\xFE' - CHAR SongTitle[32]; // Music's title - CHAR SongMusician[32]; // Name of music's composer - CHAR DOSEOF[3]; // 13, 10, 26 - DWORD ID2; // ID: 'GMFS' - BYTE FormMajorVer; // Format major version - BYTE FormMinorVer; // Format minor version - UINT16 TrackID; // Composing Tracker ID code (00 = 2GDM) - BYTE TrackMajorVer; // Tracker's major version - BYTE TrackMinorVer; // Tracker's minor version - BYTE PanMap[32]; // 0-Left to 15-Right, 255-N/U - BYTE MastVol; // Range: 0...64 - BYTE Tempo; // Initial music tempo (6) - BYTE BPM; // Initial music BPM (125) - UINT16 FormOrigin; // Original format ID: + uint32 ID; // ID: 'GDM\xFE' + char SongTitle[32]; // Music's title + char SongMusician[32]; // Name of music's composer + char DOSEOF[3]; // 13, 10, 26 + uint32 ID2; // ID: 'GMFS' + uint8 FormMajorVer; // Format major version + uint8 FormMinorVer; // Format minor version + uint16 TrackID; // Composing Tracker ID code (00 = 2GDM) + uint8 TrackMajorVer; // Tracker's major version + uint8 TrackMinorVer; // Tracker's minor version + uint8 PanMap[32]; // 0-Left to 15-Right, 255-N/U + uint8 MastVol; // Range: 0...64 + uint8 Tempo; // Initial music tempo (6) + uint8 BPM; // Initial music BPM (125) + uint16 FormOrigin; // Original format ID: // 1-MOD, 2-MTM, 3-S3M, 4-669, 5-FAR, 6-ULT, 7-STM, 8-MED // (versions of 2GDM prior to v1.15 won't set this correctly) - UINT32 OrdOffset; - BYTE NOO; // Number of orders in module - 1 - UINT32 PatOffset; - BYTE NOP; // Number of patterns in module - 1 - UINT32 SamHeadOffset; - UINT32 SamOffset; - BYTE NOS; // Number of samples in module - 1 - UINT32 MTOffset; // Offset of song message - UINT32 MTLength; - UINT32 SSOffset; // Offset of scrolly script (huh?) - UINT16 SSLength; - UINT32 TGOffset; // Offset of text graphic (huh?) - UINT16 TGLength; + uint32 OrdOffset; + uint8 NOO; // Number of orders in module - 1 + uint32 PatOffset; + uint8 NOP; // Number of patterns in module - 1 + uint32 SamHeadOffset; + uint32 SamOffset; + uint8 NOS; // Number of samples in module - 1 + uint32 MTOffset; // Offset of song message + uint32 MTLength; + uint32 SSOffset; // Offset of scrolly script (huh?) + uint16 SSLength; + uint32 TGOffset; // Offset of text graphic (huh?) + uint16 TGLength; } GDMHEADER, *PGDMHEADER; typedef struct _GDMSAMPLEHEADER { - CHAR SamName[32]; // sample's name - CHAR FileName[12]; // sample's filename - BYTE EmsHandle; // useless - UINT32 Length; // length in bytes - UINT32 LoopBegin; // loop start in samples - UINT32 LoopEnd; // loop end in samples - BYTE Flags; // misc. flags - UINT16 C4Hertz; // frequency - BYTE Volume; // default volume - BYTE Pan; // default pan + char SamName[32]; // sample's name + char FileName[12]; // sample's filename + uint8 EmsHandle; // useless + uint32 Length; // length in bytes + uint32 LoopBegin; // loop start in samples + uint32 LoopEnd; // loop end in samples + uint8 Flags; // misc. flags + uint16 C4Hertz; // frequency + uint8 Volume; // default volume + uint8 Pan; // default pan } GDMSAMPLEHEADER, *PGDMSAMPLEHEADER; #pragma pack() +#define GDMHeader_Origin_Count 8 +static MODTYPE GDMHeader_Origin[GDMHeader_Origin_Count] = +{ + MOD_TYPE_NONE, MOD_TYPE_MOD, MOD_TYPE_S3M, MOD_TYPE_669, MOD_TYPE_FAR, MOD_TYPE_ULT, MOD_TYPE_STM, MOD_TYPE_MED +}; + bool CSoundFile::ReadGDM(const LPCBYTE lpStream, const DWORD dwMemLength) -//----------------------------------------------------------- +//----------------------------------------------------------------------- { if ((!lpStream) || (dwMemLength < sizeof(GDMHEADER))) return false; @@ -82,11 +88,13 @@ // there are no other format versions... if(pHeader->FormMajorVer != 1 || pHeader->FormMinorVer != 0) - { - ::MessageBox(0, TEXT("GDM file seems to be valid, but this format version is currently not supported."), TEXT("OpenMPT GDM import"), MB_ICONERROR); return false; - } + // 1-MOD, 2-MTM, 3-S3M, 4-669, 5-FAR, 6-ULT, 7-STM, 8-MED + m_nType = GDMHeader_Origin[pHeader->FormOrigin % GDMHeader_Origin_Count]; + if(m_nType == MOD_TYPE_NONE) + return false; + // interesting question: Is TrackID, TrackMajorVer, TrackMinorVer relevant? The only TrackID should be 0 - 2GDM.exe, so the answer would be no. // song name @@ -121,43 +129,10 @@ m_nSamplePreAmp = 48; // dito m_nVSTiVolume = 48; // dito - // 1-MOD, 2-MTM, 3-S3M, 4-669, 5-FAR, 6-ULT, 7-STM, 8-MED - - switch(LittleEndianW(pHeader->FormOrigin)) - { - case 1: - m_nType = MOD_TYPE_MOD; - break; - case 2: - m_nType = MOD_TYPE_MTM; - break; - case 3: - m_nType = MOD_TYPE_S3M; - break; - case 4: - m_nType = MOD_TYPE_669; - break; - case 5: - m_nType = MOD_TYPE_FAR; - break; - case 6: - m_nType = MOD_TYPE_ULT; - break; - case 7: - m_nType = MOD_TYPE_STM; - break; - case 8: - m_nType = MOD_TYPE_MED; - break; - default: - ::MessageBox(0, TEXT("GDM file seems to be valid, but the original format is currently not supported.\nThis should not happen."), TEXT("OpenMPT GDM import"), MB_ICONERROR); - return false; - break; - } - UINT32 iSampleOffset = LittleEndian(pHeader->SamOffset), + uint32 iSampleOffset = LittleEndian(pHeader->SamOffset), iPatternsOffset = LittleEndian(pHeader->PatOffset); - const UINT32 iOrdOffset = LittleEndian(pHeader->OrdOffset), iSamHeadOffset = LittleEndian(pHeader->SamHeadOffset), + const uint32 iOrdOffset = LittleEndian(pHeader->OrdOffset), iSamHeadOffset = LittleEndian(pHeader->SamHeadOffset), iMTOffset = LittleEndian(pHeader->MTOffset), iMTLength = LittleEndian(pHeader->MTLength), iSSOffset = LittleEndian(pHeader->SSOffset), iSSLength = LittleEndianW(pHeader->SSLength), iTGOffset = LittleEndian(pHeader->TGOffset), iTGLength = LittleEndianW(pHeader->TGLength); @@ -243,24 +218,16 @@ if(pSample->Flags & 0x02) // 16 bit { if(pSample->Flags & 0x20) // stereo - { iSampleFormat = RS_PCM16U; // should be RS_STPCM16U but that breaks the sample reader - } else - { iSampleFormat = RS_PCM16U; - } } else // 8 bit { if(pSample->Flags & 0x20) // stereo - { iSampleFormat = RS_PCM8U; // should be RS_STPCM8U - dito - } else - { iSampleFormat = RS_PCM8U; - } } // according to zilym, LZW support has never been finished, so this is also practically useless. Just ignore the flag. @@ -283,7 +250,7 @@ { if(iPatternsOffset + 2 > dwMemLength) break; - UINT16 iPatternLength = LittleEndianW(*(UINT16 *)(lpStream + iPatternsOffset)); // pattern length including the two "length" bytes + uint16 iPatternLength = LittleEndianW(*(uint16 *)(lpStream + iPatternsOffset)); // pattern length including the two "length" bytes if(iPatternLength > dwMemLength || iPatternsOffset > dwMemLength - iPatternLength) break; if(Patterns.Insert(iPat, 64)) Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-13 19:58:05 UTC (rev 492) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-14 00:22:40 UTC (rev 493) @@ -458,6 +458,9 @@ version = id; streamPos += sizeof(DWORD); + if(version > ITP_VERSION) + return false; + // Song name // name string length @@ -1554,7 +1557,7 @@ DWORD id = 0x2e697470; // .itp ASCII fwrite(&id, 1, sizeof(id), f); - id = 0x00000102; // v1.02 + id = ITP_VERSION; fwrite(&id, 1, sizeof(id), f); // Song name This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |