From: <sag...@us...> - 2009-08-05 22:07:06
|
Revision: 315 http://modplug.svn.sourceforge.net/modplug/?rev=315&view=rev Author: saga-games Date: 2009-08-05 22:06:42 +0000 (Wed, 05 Aug 2009) Log Message: ----------- [Fix] IT Compatibility: OpenMPT was loading the volume column command hx (vibrato depth) as ux (vibrato speed) and also saving it like this. In the pattern editor, ux was allowed, hx was not but it should be the other way around. Now, hx is always used but ux is still loaded correctly for old modules made with MPT/OpenMPT. [Fix] Module Creation / Loading: Sane default volume settings for MOD / S3M files again(128 global volume, 48 sample volume) [Imp] Module Conversion: Full volume column conversion, resetting default global volume / tempo / speed for MOD files [Ref] Module Conversion: Moved all pattern conversion into one block to avoid too much redundancy [Ref] Module Creation: Moved default sample variables to ctrlSmp, minor code rewriting [Imp] Pattern Editor: Proper display of Pxy effect in the note editor window Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/modcommand.h trunk/OpenMPT/soundlib/modsmp_ctrl.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -909,7 +909,7 @@ tx_col = MODCOLOR_PANNING; break; case VOLCMD_VIBRATOSPEED: - case VOLCMD_VIBRATO: + case VOLCMD_VIBRATODEPTH: case VOLCMD_TONEPORTAMENTO: case VOLCMD_PORTAUP: case VOLCMD_PORTADOWN: Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -13,6 +13,7 @@ #include "mod2midi.h" #include "vstplug.h" #include "version.h" +#include "modsmp_ctrl.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -617,20 +618,43 @@ // New module ? if (!m_SndFile.m_nChannels) { -// -> CODE#0006 -// -> DESC="misc quantity changes" -// m_SndFile.m_nChannels = (m_SndFile.m_nType & MOD_TYPE_MOD) ? 8 : 16; - m_SndFile.m_nChannels = (m_SndFile.m_nType & MOD_TYPE_MOD) ? 8 : 32; -// -! BEHAVIOUR_CHANGE#0006 - if (m_SndFile.Order[0] >= m_SndFile.Patterns.Size()) m_SndFile.Order[0] = 0; + switch(GetModType()) + { + case MOD_TYPE_MOD: + m_SndFile.m_nChannels = 8; + break; + case MOD_TYPE_S3M: + m_SndFile.m_nChannels = 16; + break; + default: + m_SndFile.m_nChannels = 32; + break; + } + + if (m_SndFile.Order[0] >= m_SndFile.Patterns.Size()) + m_SndFile.Order[0] = 0; + if (!m_SndFile.Patterns[0]) { m_SndFile.Patterns.Insert(0, 64); } + strcpy(m_SndFile.m_szNames[0], "untitled"); + m_SndFile.m_nMusicTempo = m_SndFile.m_nDefaultTempo = 125; m_SndFile.m_nMusicSpeed = m_SndFile.m_nDefaultSpeed = 6; - m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = 128; + + if(m_SndFile.m_nMixLevels == mixLevels_original) + { + m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = 256; + m_SndFile.m_nSamplePreAmp = m_SndFile.m_nVSTiVolume = 48; + } + else + { + m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = 128; + m_SndFile.m_nSamplePreAmp = m_SndFile.m_nVSTiVolume = 128; + } + for (UINT init=0; init<MAX_BASECHANNELS; init++) { m_SndFile.ChnSettings[init].dwFlags = 0; @@ -646,10 +670,9 @@ { strcpy(m_SndFile.m_szNames[1], "untitled"); m_SndFile.m_nSamples = 1; - m_SndFile.Ins[1].nVolume = 256; - m_SndFile.Ins[1].nGlobalVol = 64; - m_SndFile.Ins[1].nPan = 128; - m_SndFile.Ins[1].nC4Speed = 8363; + + ctrlSmp::ResetSamples(m_SndFile, ctrlSmp::SmpResetInit); + if ((!m_SndFile.m_nInstruments) && (m_SndFile.m_nType & MOD_TYPE_XM)) { m_SndFile.m_nInstruments = 1; @@ -2341,6 +2364,7 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: + case CMD_PANNINGSLIDE: nmax = (nType & MOD_TYPE_S3MITMPT) ? 58 : 30; break; case CMD_PANNING8: @@ -2376,6 +2400,7 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: + case CMD_PANNINGSLIDE: if (m_SndFile.m_nType & MOD_TYPE_S3MITMPT) { if (!param) pos = 29; else @@ -2413,6 +2438,7 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: + case CMD_PANNINGSLIDE: if (m_SndFile.m_nType & MOD_TYPE_S3MITMPT) { if (pos < 15) param = 15-pos; else @@ -2439,6 +2465,9 @@ if ((!pszName) || (ndx >= MAX_FXINFO) || (!gFXInfo[ndx].pszName)) return FALSE; wsprintf(pszName, "%s: ", gFXInfo[ndx].pszName); s[0] = 0; + + string sPlusChar = "+", sMinusChar = "-"; + switch(gFXInfo[ndx].dwEffect) { case CMD_ARPEGGIO: @@ -2522,24 +2551,39 @@ case CMD_VIBRATOVOL: case CMD_GLOBALVOLSLIDE: case CMD_CHANNELVOLSLIDE: + case CMD_PANNINGSLIDE: + if(gFXInfo[ndx].dwEffect == CMD_PANNINGSLIDE) + { + if(m_SndFile.m_nType & MOD_TYPE_XM) + { + sPlusChar = "-> "; + sMinusChar = "<- "; + } + else + { + sPlusChar = "<- "; + sMinusChar = "-> "; + } + } + if (!param) { wsprintf(s, "continue"); } else if ((m_SndFile.m_nType & MOD_TYPE_S3MITMPT) && ((param & 0x0F) == 0x0F) && (param & 0xF0)) { - wsprintf(s, "fine +%d", param >> 4); + wsprintf(s, "fine %s%d", sPlusChar.c_str(), param >> 4); } else if ((m_SndFile.m_nType & MOD_TYPE_S3MITMPT) && ((param & 0xF0) == 0xF0) && (param & 0x0F)) { - wsprintf(s, "fine -%d", param & 0x0F); + wsprintf(s, "fine %s%d", sMinusChar.c_str(), param & 0x0F); } else if (param & 0x0F) { - wsprintf(s, "-%d", param & 0x0F); + wsprintf(s, "%s%d", sMinusChar.c_str(), param & 0x0F); } else { - wsprintf(s, "+%d", param >> 4); + wsprintf(s, "%s%d", sPlusChar.c_str(), param >> 4); } break; @@ -2775,19 +2819,19 @@ { {VOLCMD_VOLUME, MOD_TYPE_NOMOD, "v: Set Volume"}, {VOLCMD_PANNING, MOD_TYPE_NOMOD, "p: Set Panning"}, - {VOLCMD_VOLSLIDEUP, MOD_TYPE_XMITMPT, "c: Volume slide up"}, - {VOLCMD_VOLSLIDEDOWN, MOD_TYPE_XMITMPT, "d: Volume slide down"}, - {VOLCMD_FINEVOLUP, MOD_TYPE_XMITMPT, "a: Fine volume up"}, - {VOLCMD_FINEVOLDOWN, MOD_TYPE_XMITMPT, "b: Fine volume down"}, - {VOLCMD_VIBRATOSPEED, MOD_TYPE_XMITMPT, "u: Vibrato speed"}, - {VOLCMD_VIBRATO, MOD_TYPE_XM, "h: Vibrato depth"}, + {VOLCMD_VOLSLIDEUP, MOD_TYPE_XMITMPT, "c: Volume slide up"}, + {VOLCMD_VOLSLIDEDOWN, MOD_TYPE_XMITMPT, "d: Volume slide down"}, + {VOLCMD_FINEVOLUP, MOD_TYPE_XMITMPT, "a: Fine volume up"}, + {VOLCMD_FINEVOLDOWN, MOD_TYPE_XMITMPT, "b: Fine volume down"}, + {VOLCMD_VIBRATOSPEED, MOD_TYPE_XM, "u: Vibrato speed"}, + {VOLCMD_VIBRATODEPTH, MOD_TYPE_XMITMPT, "h: Vibrato depth"}, {VOLCMD_PANSLIDELEFT, MOD_TYPE_XM, "l: Pan slide left"}, {VOLCMD_PANSLIDERIGHT, MOD_TYPE_XM, "r: Pan slide right"}, - {VOLCMD_TONEPORTAMENTO, MOD_TYPE_XMITMPT, "g: Tone portamento"}, + {VOLCMD_TONEPORTAMENTO, MOD_TYPE_XMITMPT, "g: Tone portamento"}, {VOLCMD_PORTAUP, MOD_TYPE_ITMPT, "f: Portamento up"}, {VOLCMD_PORTADOWN, MOD_TYPE_ITMPT, "e: Portamento down"}, {VOLCMD_VELOCITY, MOD_TYPE_ITMPT, ":: velocity"}, //rewbs.velocity - {VOLCMD_OFFSET, MOD_TYPE_ITMPT, "o: offset"}, //rewbs.volOff + {VOLCMD_OFFSET, MOD_TYPE_ITMPT, "o: offset"}, //rewbs.volOff }; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -154,15 +154,22 @@ EndWaitCursor(); } //End if (((m_SndFile.m_nInstruments) || (b64)) && (nNewType & (MOD_TYPE_MOD|MOD_TYPE_S3M))) BeginWaitCursor(); - // Adjust pattern data - if(oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) + + + ///////////////////////////// + // Converting pattern data + + for (UINT nPat=0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) { - for (UINT nPat=0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) + MODCOMMAND *m = m_SndFile.Patterns[nPat]; + for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len; m++, len--) { - MODCOMMAND *m = m_SndFile.Patterns[nPat]; - for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len; m++, len--) + + ///////////////////////////////////////// + // Convert MOD / XM to S3M / IT / MPTM + if(oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) { - if (m->command) switch(m->command) + switch(m->command) { case CMD_MODCMDEX: m->command = CMD_S3MCMDEX; @@ -217,18 +224,17 @@ m->param = 0xD0 | (m->param & 0x0F); } break; + default: + break; } - } - } - } else - if (oldTypeIsS3M_IT_MPT && newTypeIsMOD_XM) - { - for (UINT nPat=0; nPat<m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) - { - MODCOMMAND *m = m_SndFile.Patterns[nPat]; - for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len--; m++) + } // End if(oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) + + + ///////////////////////////////////////// + // Convert S3M / IT / MPTM to MOD / XM + else if (oldTypeIsS3M_IT_MPT && newTypeIsMOD_XM) { - if (m->command) switch(m->command) + switch(m->command) { case CMD_S3MCMDEX: m->command = CMD_MODCMDEX; @@ -288,18 +294,263 @@ if (m->param > spdmax) m->param = spdmax; } break; + default: + break; } - } + } // End if (oldTypeIsS3M_IT_MPT && newTypeIsMOD_XM) + + /////////////////////// + // Convert S3M to IT + if (oldTypeIsS3M && newTypeIsIT_MPT) + { + switch(m->command) + { + case CMD_PANNING8: + if(m->param == 0xA4) + { + // surround remap + m->command = CMD_S3MCMDEX; + m->param = 0x91; + } + else + { + m->param = min(m->param << 1, 0xFF); + } + break; + default: + break; + } + } // End if (oldTypeIsS3M && newTypeIsIT_MPT) + + /////////////////////// + // Convert IT to S3M + else if (oldTypeIsIT_MPT && newTypeIsS3M) + { + switch(m->command) + { + case CMD_PANNING8: + m->param = (m->param + 1) >> 1; + break; + case CMD_S3MCMDEX: + if(m->param == 0x91) + { + // surround remap (this is the "official" command) + m->command = CMD_PANNING8; + m->param = 0xA4; + } + break; + case CMD_SMOOTHMIDI: + m->command = CMD_MIDI; + break; + default: + break; + } + } // End if (oldTypeIsIT_MPT && newTypeIsS3M) + + /////////////////////////////////////////////////// + // Convert anything to MOD - remove volume column + if (newTypeIsMOD) + { + if(!m->command) switch(m->volcmd) + { + case VOLCMD_VOLUME: + m->command = CMD_VOLUME; + m->param = m->vol; + break; + case VOLCMD_PANNING: + m->command = CMD_PANNING8; + m->param = CLAMP(m->vol << 2, 0, 0xFF); + break; + case VOLCMD_VOLSLIDEDOWN: + m->command = CMD_VOLUMESLIDE; + m->param = m->vol; + break; + case VOLCMD_VOLSLIDEUP: + m->command = CMD_VOLUMESLIDE; + m->param = m->vol << 4; + break; + case VOLCMD_FINEVOLDOWN: + m->command = CMD_MODCMDEX; + m->param = 0xB0 | m->vol; + break; + case VOLCMD_FINEVOLUP: + m->command = CMD_MODCMDEX; + m->param = 0xA0 | m->vol; + break; + case VOLCMD_PORTADOWN: + m->command = CMD_PORTAMENTODOWN; + m->param = m->vol << 2; + break; + case VOLCMD_PORTAUP: + m->command = CMD_PORTAMENTOUP; + m->param = m->vol << 2; + break; + case VOLCMD_TONEPORTAMENTO: + m->command = CMD_TONEPORTAMENTO; + m->param = m->vol << 2; + break; + case VOLCMD_VIBRATODEPTH: + m->command = CMD_VIBRATO; + m->param = m->vol; + break; + case VOLCMD_VIBRATOSPEED: + m->command = CMD_VIBRATO; + m->param = m->vol << 4; + break; + // OpenMPT-specific commands + case VOLCMD_OFFSET: + m->command = CMD_OFFSET; + m->param = m->vol << 3; + break; + case VOLCMD_VELOCITY: + m->command = CMD_VOLUME; + m->param = m->vol * 7; + break; + default: + break; + } + m->volcmd = CMD_NONE; + } // End if (newTypeIsMOD) + + /////////////////////////////////////////////////// + // Convert anything to S3M - adjust volume column + if (newTypeIsS3M) + { + if(!m->command) switch(m->volcmd) + { + case VOLCMD_VOLSLIDEDOWN: + m->command = CMD_VOLUMESLIDE; + m->param = m->vol; + m->volcmd = CMD_NONE; + break; + case VOLCMD_VOLSLIDEUP: + m->command = CMD_VOLUMESLIDE; + m->param = m->vol << 4; + m->volcmd = CMD_NONE; + break; + case VOLCMD_FINEVOLDOWN: + m->command = CMD_VOLUMESLIDE; + m->param = 0xF0 | m->vol; + m->volcmd = CMD_NONE; + break; + case VOLCMD_FINEVOLUP: + m->command = CMD_VOLUMESLIDE; + m->param = (m->vol << 4) | 0x0F; + m->volcmd = CMD_NONE; + break; + case VOLCMD_PORTADOWN: + m->command = CMD_PORTAMENTODOWN; + m->param = m->vol << 2; + m->volcmd = CMD_NONE; + break; + case VOLCMD_PORTAUP: + m->command = CMD_PORTAMENTOUP; + m->param = m->vol << 2; + m->volcmd = CMD_NONE; + break; + case VOLCMD_TONEPORTAMENTO: + m->command = CMD_TONEPORTAMENTO; + m->param = m->vol << 2; + m->volcmd = CMD_NONE; + break; + case VOLCMD_VIBRATODEPTH: + m->command = CMD_VIBRATO; + m->param = m->vol; + m->volcmd = CMD_NONE; + break; + case VOLCMD_VIBRATOSPEED: + m->command = CMD_VIBRATO; + m->param = m->vol << 4; + m->volcmd = CMD_NONE; + break; + case VOLCMD_PANSLIDELEFT: + m->command = CMD_PANNINGSLIDE; + m->param = m->vol << 4; + m->volcmd = CMD_NONE; + break; + case VOLCMD_PANSLIDERIGHT: + m->command = CMD_PANNINGSLIDE; + m->param = m->vol; + m->volcmd = CMD_NONE; + break; + // OpenMPT-specific commands + case VOLCMD_OFFSET: + m->command = CMD_OFFSET; + m->param = m->vol << 3; + m->volcmd = CMD_NONE; + break; + case VOLCMD_VELOCITY: + m->volcmd = CMD_VOLUME; + m->vol *= 7; + break; + default: + break; + } + } // End if (newTypeIsS3M) + + /////////////////////////////////////////////////// + // Convert anything to XM - adjust volume column + if (newTypeIsXM) + { + if(!m->command) switch(m->volcmd) + { + case VOLCMD_PORTADOWN: + m->command = CMD_PORTAMENTODOWN; + m->param = m->vol << 2; + m->volcmd = CMD_NONE; + break; + case VOLCMD_PORTAUP: + m->command = CMD_PORTAMENTOUP; + m->param = m->vol << 2; + m->volcmd = CMD_NONE; + break; + // OpenMPT-specific commands + case VOLCMD_OFFSET: + m->command = CMD_OFFSET; + m->param = m->vol << 3; + m->volcmd = CMD_NONE; + break; + case VOLCMD_VELOCITY: + m->volcmd = CMD_VOLUME; + m->vol *= 7; + break; + default: + break; + } + } // End if (newTypeIsXM) + + /////////////////////////////////////////////////// + // Convert anything to IT - adjust volume column + if (newTypeIsIT_MPT) + { + if(!m->command) switch(m->volcmd) + { + case VOLCMD_PANSLIDELEFT: + m->command = CMD_PANNINGSLIDE; + m->param = m->vol << 4; + m->volcmd = CMD_NONE; + break; + case VOLCMD_PANSLIDERIGHT: + m->command = CMD_PANNINGSLIDE; + m->param = m->vol; + m->volcmd = CMD_NONE; + break; + case VOLCMD_VIBRATOSPEED: + m->command = CMD_VIBRATO; + m->param = m->vol << 4; + m->volcmd = CMD_NONE; + break; + default: + break; + } + } // End if (newTypeIsIT) } } - // Convert XM to MOD - if (oldTypeIsXM && newTypeIsMOD) - { - } else - // Convert MOD to XM - if (oldTypeIsMOD && newTypeIsXM) - { - } else + + //////////////////////////////////////////////// + // Converting instrument / sample / etc. data + + // Convert MOD/XM to S3M/IT/MPT if (oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) { @@ -311,6 +562,7 @@ } if (oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; } else + // Convert S3M/IT/MPT to XM if (oldTypeIsS3M_IT_MPT && newTypeIsXM) { @@ -338,71 +590,24 @@ penv->nIFR &= 0x7F; } } - if (bBrokenNoteMap) AddToLog("WARNING: Note Mapping will be lost when saving as XM\n"); - } else - // Convert S3M to IT - if (oldTypeIsS3M && newTypeIsIT_MPT) + if (bBrokenNoteMap) AddToLog("WARNING: Note Mapping will be lost when saving as XM.\n"); + } + + if(newTypeIsMOD) { - for (UINT nPat=0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) - { - MODCOMMAND *m = m_SndFile.Patterns[nPat]; - for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len--; m++) - { - switch(m->command) - { - case CMD_PANNING8: - if(m->param == 0xA4) - { - // surround remap - m->command = CMD_S3MCMDEX; - m->param = 0x91; - } - else - { - m->param = min(m->param << 1, 0xFF); - } - break; - default: - break; - } - } - } - } else - // Convert IT to S3M - if (oldTypeIsIT_MPT && newTypeIsS3M) - { - for (UINT nPat=0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) - { - MODCOMMAND *m = m_SndFile.Patterns[nPat]; - for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len--; m++) - { - switch(m->command) - { - case CMD_PANNING8: - m->param = (m->param + 1) >> 1; - break; - case CMD_S3MCMDEX: - if(m->param == 0x91) - { - // surround remap (this is the "official" command) - m->command = CMD_PANNING8; - m->param = 0xA4; - } - break; - case CMD_SMOOTHMIDI: - m->command = CMD_MIDI; - break; - default: - break; - } - } - } + // Not supported in MOD format + m_SndFile.m_nDefaultSpeed = 6; + m_SndFile.m_nDefaultTempo = 125; + m_SndFile.m_nDefaultGlobalVolume = 256; + m_SndFile.m_nSamplePreAmp = 48; + m_SndFile.m_nVSTiVolume = 48; + AddToLog("WARNING: Default speed, tempo and global volume will be lost.\n"); } // Too many samples? if (newTypeIsMOD && (m_SndFile.m_nSamples > 31)) { - AddToLog("WARNING: Samples above 31 will be lost when saving this file as MOD!\n"); + AddToLog("WARNING: Samples above 31 will be lost when saving as MOD!\n"); } BEGIN_CRITICAL(); m_SndFile.ChangeModTypeTo(nNewType); @@ -432,7 +637,7 @@ SetModified(); ClearUndo(); - UpdateAllViews(NULL, HINT_MODTYPE); + UpdateAllViews(NULL, HINT_MODTYPE | HINT_MODGENERAL); EndWaitCursor(); return TRUE; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -3690,8 +3690,8 @@ case kcSetVolumeVolSlideDown: volcmd = VOLCMD_VOLSLIDEDOWN; break; case kcSetVolumeFineVolUp: volcmd = VOLCMD_FINEVOLUP; break; case kcSetVolumeFineVolDown: volcmd = VOLCMD_FINEVOLDOWN; break; - case kcSetVolumeVibratoSpd: volcmd = VOLCMD_VIBRATOSPEED; break; - case kcSetVolumeVibrato: volcmd = VOLCMD_VIBRATO; break; + case kcSetVolumeVibratoSpd: if (pSndFile->m_nType & MOD_TYPE_XM) volcmd = VOLCMD_VIBRATOSPEED; break; + case kcSetVolumeVibrato: volcmd = VOLCMD_VIBRATODEPTH; break; case kcSetVolumeXMPanLeft: if (pSndFile->m_nType & MOD_TYPE_XM) volcmd = VOLCMD_PANSLIDELEFT; break; case kcSetVolumeXMPanRight: if (pSndFile->m_nType & MOD_TYPE_XM) volcmd = VOLCMD_PANSLIDERIGHT; break; case kcSetVolumePortamento: volcmd = VOLCMD_TONEPORTAMENTO; break; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -1445,8 +1445,13 @@ if (vol < 125) { m[ch].volcmd = VOLCMD_PORTAUP; m[ch].vol = vol - 115; } else // 193-202: Portamento To if ((vol >= 193) && (vol <= 202)) { m[ch].volcmd = VOLCMD_TONEPORTAMENTO; m[ch].vol = vol - 193; } else - // 203-212: Vibrato - if ((vol >= 203) && (vol <= 212)) { m[ch].volcmd = VOLCMD_VIBRATOSPEED; m[ch].vol = vol - 203; } else + // 203-212: Vibrato depth + if ((vol >= 203) && (vol <= 212)) { + m[ch].volcmd = VOLCMD_VIBRATODEPTH; m[ch].vol = vol - 203; + // Old versions of ModPlug seemed to save this as vibrato speed instead so let's fix that + if(m_dwLastSavedWithVersion <= MAKE_VERSION_NUMERIC(1, 17, 02, 54) && interpretModplugmade) + m[ch].volcmd = VOLCMD_VIBRATOSPEED; + } else // 213-222: Velocity //rewbs.velocity if ((vol >= 213) && (vol <= 222)) { m[ch].volcmd = VOLCMD_VELOCITY; m[ch].vol = vol - 213; } else //rewbs.velocity // 223-232: Offset //rewbs.VolOffset @@ -2215,8 +2220,8 @@ case VOLCMD_VOLSLIDEDOWN: vol = 95 + ConvertVolParam(m->vol); break; case VOLCMD_FINEVOLUP: vol = 65 + ConvertVolParam(m->vol); break; case VOLCMD_FINEVOLDOWN: vol = 75 + ConvertVolParam(m->vol); break; - case VOLCMD_VIBRATO: vol = 203; break; - case VOLCMD_VIBRATOSPEED: vol = 203 + ConvertVolParam(m->vol); break; + case VOLCMD_VIBRATODEPTH: vol = 203 + ConvertVolParam(m->vol); break; + case VOLCMD_VIBRATOSPEED: vol = 0xFF /*203 + ConvertVolParam(m->vol)*/; break; // not supported! case VOLCMD_TONEPORTAMENTO: vol = 193 + ConvertVolParam(m->vol); break; case VOLCMD_PORTADOWN: vol = 105 + ConvertVolParam(m->vol); break; case VOLCMD_PORTAUP: vol = 115 + ConvertVolParam(m->vol); break; @@ -2845,8 +2850,8 @@ case VOLCMD_VOLSLIDEDOWN: vol = 95 + ConvertVolParam(m->vol); break; case VOLCMD_FINEVOLUP: vol = 65 + ConvertVolParam(m->vol); break; case VOLCMD_FINEVOLDOWN: vol = 75 + ConvertVolParam(m->vol); break; - case VOLCMD_VIBRATO: vol = 203; break; - case VOLCMD_VIBRATOSPEED: vol = 203 + ConvertVolParam(m->vol); break; + case VOLCMD_VIBRATODEPTH: vol = 203 + ConvertVolParam(m->vol); break; + case VOLCMD_VIBRATOSPEED: vol = 0xFF; break; case VOLCMD_TONEPORTAMENTO: vol = 193 + ConvertVolParam(m->vol); break; case VOLCMD_PORTADOWN: vol = 105 + ConvertVolParam(m->vol); break; case VOLCMD_PORTAUP: vol = 115 + ConvertVolParam(m->vol); break; Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -252,7 +252,7 @@ // A0-AF: Set Vibrato Speed case 0xA0: p->volcmd = VOLCMD_VIBRATOSPEED; break; // B0-BF: Vibrato - case 0xB0: p->volcmd = VOLCMD_VIBRATO; break; + case 0xB0: p->volcmd = VOLCMD_VIBRATODEPTH; break; // C0-CF: Set Panning case 0xC0: p->volcmd = VOLCMD_PANNING; p->vol = (vol << 2) + 2; break; // D0-DF: Panning Slide Left @@ -752,7 +752,7 @@ case VOLCMD_FINEVOLDOWN: vol = 0x80 + (p->vol & 0x0F); break; case VOLCMD_FINEVOLUP: vol = 0x90 + (p->vol & 0x0F); break; case VOLCMD_VIBRATOSPEED: vol = 0xA0 + (p->vol & 0x0F); break; - case VOLCMD_VIBRATO: vol = 0xB0 + (p->vol & 0x0F); break; + case VOLCMD_VIBRATODEPTH: vol = 0xB0 + (p->vol & 0x0F); break; case VOLCMD_PANNING: vol = 0xC0 + (p->vol >> 2); if (vol > 0xCF) vol = 0xCF; break; case VOLCMD_PANSLIDELEFT: vol = 0xD0 + (p->vol & 0x0F); break; case VOLCMD_PANSLIDERIGHT: vol = 0xE0 + (p->vol & 0x0F); break; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -1415,7 +1415,7 @@ Vibrato(pChn, vol << 4); break; - case VOLCMD_VIBRATO: + case VOLCMD_VIBRATODEPTH: Vibrato(pChn, vol); break; Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -496,8 +496,8 @@ m_nRestartPos = 0; m_nMinPeriod = 16; m_nMaxPeriod = 32767; - m_nSamplePreAmp = 128; - m_nVSTiVolume = 128; + m_nSamplePreAmp = 48; + m_nVSTiVolume = 48; m_nPatternNames = 0; m_nMaxOrderPosition = 0; m_lpszPatternNames = NULL; Modified: trunk/OpenMPT/soundlib/modcommand.h =================================================================== --- trunk/OpenMPT/soundlib/modcommand.h 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/modcommand.h 2009-08-05 22:06:42 UTC (rev 315) @@ -77,7 +77,7 @@ #define VOLCMD_FINEVOLUP 5 #define VOLCMD_FINEVOLDOWN 6 #define VOLCMD_VIBRATOSPEED 7 -#define VOLCMD_VIBRATO 8 +#define VOLCMD_VIBRATODEPTH 8 #define VOLCMD_PANSLIDELEFT 9 #define VOLCMD_PANSLIDERIGHT 10 #define VOLCMD_TONEPORTAMENTO 11 Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.cpp =================================================================== --- trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-08-05 22:06:42 UTC (rev 315) @@ -198,8 +198,12 @@ const UINT nSamples = rSndFile.GetNumSamples(); for(UINT i = 1; i <= nSamples; i++) { - if(resetflag == SmpResetCompo) + switch(resetflag) { + case SmpResetInit: + rSndFile.Ins[i].nC4Speed = 8363; + // note: break is left out intentionally. keep this order or c&p the stuff from below if you change anything! + case SmpResetCompo: rSndFile.Ins[i].nPan = 128; rSndFile.Ins[i].nGlobalVol = 64; rSndFile.Ins[i].nVolume = 256; @@ -208,6 +212,9 @@ rSndFile.Ins[i].nVibSweep = 0; rSndFile.Ins[i].nVibType = 0; rSndFile.Ins[i].uFlags &= ~CHN_PANNING; + break; + default: + break; } } } Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.h =================================================================== --- trunk/OpenMPT/soundlib/modsmp_ctrl.h 2009-08-05 16:13:09 UTC (rev 314) +++ trunk/OpenMPT/soundlib/modsmp_ctrl.h 2009-08-05 22:06:42 UTC (rev 315) @@ -14,7 +14,8 @@ enum ResetFlag { - SmpResetCompo = 1 + SmpResetCompo = 1, + SmpResetInit = 2, }; // Insert silence to given location. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |