From: <sag...@us...> - 2010-05-22 13:36:22
|
Revision: 602 http://modplug.svn.sourceforge.net/modplug/?rev=602&view=rev Author: saga-games Date: 2010-05-22 13:36:09 +0000 (Sat, 22 May 2010) Log Message: ----------- [New] Wave export can now also render by instrument (i.e. one wave file per instrument). [Imp] General tab: The "output to" dropdown list also shows the actual plugin name (instead of just the library name) now. [Mod] Updated release notes [Mod] Some datatype changes in r574 were wrong in theory (but did not change anything because of the way C++ work), but I reverted them anyway. [Ref] Some more refactoring Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/misc_util.h trunk/OpenMPT/mptrack/mod2wave.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/packageTemplate/OMPT_1.18_ReleaseNotes.html trunk/OpenMPT/soundlib/Sndfile.cpp Added Paths: ----------- trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.18/cleanup.png Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2010-05-22 13:36:09 UTC (rev 602) @@ -10,6 +10,7 @@ extern UINT nMixingRates[NUMMIXRATE]; extern LPCSTR gszChnCfgNames[3]; +// this converts a buffer of 32-bit integer sample data to 32 bit floating point static void __cdecl M2W_32ToFloat(void *pBuffer, long nCount) { // const float _ki2f = 1.0f / (FLOAT)(ULONG)(0x80000000); //olivier @@ -50,6 +51,8 @@ BEGIN_MESSAGE_MAP(CWaveConvert, CDialog) ON_COMMAND(IDC_CHECK1, OnCheck1) ON_COMMAND(IDC_CHECK2, OnCheck2) + ON_COMMAND(IDC_CHECK4, OnCheckChannelMode) + ON_COMMAND(IDC_CHECK6, OnCheckInstrMode) ON_COMMAND(IDC_RADIO1, UpdateDialog) ON_COMMAND(IDC_RADIO2, UpdateDialog) ON_COMMAND(IDC_PLAYEROPTIONS, OnPlayerOptions) //rewbs.resamplerConf @@ -104,11 +107,7 @@ CHAR s[128]; CDialog::OnInitDialog(); - if (m_bSelectPlay) { - CheckDlgButton(IDC_RADIO2, MF_CHECKED); - } else { - CheckDlgButton(IDC_RADIO1, MF_CHECKED); - } + CheckRadioButton(IDC_RADIO1, IDC_RADIO2, m_bSelectPlay ? IDC_RADIO2 : IDC_RADIO1); CheckDlgButton(IDC_CHECK3, MF_CHECKED); // HQ resampling CheckDlgButton(IDC_CHECK5, MF_UNCHECKED); // rewbs.NoNormalize @@ -116,6 +115,7 @@ // -> CODE#0024 // -> DESC="wav export update" CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); + CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); // -! NEW_FEATURE#0024 SetDlgItemInt(IDC_EDIT3, m_nMinOrder); @@ -230,6 +230,22 @@ } +// Channel render is mutually exclusive with instrument render +void CWaveConvert::OnCheckChannelMode() +//------------------------------------- +{ + CheckDlgButton(IDC_CHECK6, MF_UNCHECKED); +} + + +// Channel render is mutually exclusive with instrument render +void CWaveConvert::OnCheckInstrMode() +//----------------------------------- +{ + CheckDlgButton(IDC_CHECK4, MF_UNCHECKED); +} + + void CWaveConvert::OnOK() //----------------------- { @@ -242,9 +258,11 @@ //m_bHighQuality = IsDlgButtonChecked(IDC_CHECK3) ? true : false; //rewbs.resamplerConf - we don't want this anymore. m_bNormalize = IsDlgButtonChecked(IDC_CHECK5) ? true : false; m_bGivePlugsIdleTime = IsDlgButtonChecked(IDC_GIVEPLUGSIDLETIME) ? true : false; - if (m_bGivePlugsIdleTime) { + if (m_bGivePlugsIdleTime) + { if (MessageBox("You only need slow render if you are experiencing dropped notes with a Kontakt based sampler with Direct-From-Disk enabled.\nIt will make rendering *very* slow.\n\nAre you sure you want to enable slow render?", - "Really enable slow render?", MB_YESNO) == IDNO ) { + "Really enable slow render?", MB_YESNO) == IDNO ) + { CheckDlgButton(IDC_GIVEPLUGSIDLETIME, BST_UNCHECKED); return; } @@ -252,8 +270,9 @@ // -> CODE#0024 // -> DESC="wav export update" - m_bChannelMode = IsDlgButtonChecked(IDC_CHECK4) ? TRUE : FALSE; + m_bChannelMode = IsDlgButtonChecked(IDC_CHECK4) ? true : false; // -! NEW_FEATURE#0024 + m_bInstrumentMode= IsDlgButtonChecked(IDC_CHECK6) ? true : false; // WaveFormatEx DWORD dwFormat = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); @@ -542,7 +561,7 @@ { m_FileTags.comments = m_pSndFile->m_lpszSongComments; // convert \r to \n, remove bad characters - for(UINT i = 0; i < m_FileTags.comments.length(); i++) + for(size_t i = 0; i < m_FileTags.comments.length(); i++) { if(m_FileTags.comments.substr(i, 1) == "\r") m_FileTags.comments.replace(i, 1, "\n"); @@ -550,7 +569,7 @@ m_FileTags.comments.replace(i, 1, " "); } - /*UINT spos; + /*size_t spos; while((spos = m_FileTags.comments.find("\r")) != string::npos) { m_FileTags.comments.replace(spos, 1, "\n"); @@ -700,7 +719,8 @@ } }*/ - if (m_bGivePlugsIdleTime) { + if (m_bGivePlugsIdleTime) + { Sleep(20); } @@ -992,6 +1012,7 @@ pos = 0; pcmBufSize = WAVECONVERTBUFSIZE; bFinished = FALSE; + // Writing File CMainFrame::GetMainFrame()->InitRenderer(m_pSndFile); //rewbs.VSTTimeInfo for (n=0; ; n++) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2010-05-22 13:36:09 UTC (rev 602) @@ -1424,7 +1424,7 @@ void CModDoc::OnFileWaveConvert(ORDERINDEX nMinOrder, ORDERINDEX nMaxOrder) //------------------------------------------------------------------------- { - TCHAR fname[_MAX_FNAME]=""; + TCHAR fname[_MAX_FNAME] = _T(""); CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if ((!pMainFrm) || (!m_SndFile.GetType())) return; @@ -1441,60 +1441,128 @@ // will set default dir here because there's no setup option for export dir yet (feel free to add one...) CMainFrame::SetDefaultDirectory(files.workingDirectory.c_str(), DIR_EXPORT, true); - TCHAR s[_MAX_PATH]; - strcpy(s, files.first_file.c_str()); + TCHAR sFilename[_MAX_PATH]; + strcpy(sFilename, files.first_file.c_str()); // Saving as wave file - UINT p = 0, n = 1; + + // Keep position of the caracter just before ".wav" in path string + size_t p = strlen(sFilename) - 4; + TCHAR sFilenameAdd[_MAX_PATH] = _T(""); + + int nRenderPasses = 1; DWORD flags[MAX_BASECHANNELS]; - CHAR channel[MAX_CHANNELNAME+10]; + vector<bool> instrMuteState; // Channel mode : save song in multiple wav files (one for each enabled channels) - if(wsdlg.m_bChannelMode){ - n = m_SndFile.m_nChannels; - for(UINT i = 0 ; i < n ; i++){ + if(wsdlg.m_bChannelMode) + { + nRenderPasses = m_SndFile.m_nChannels; + for(int i = 0; i < nRenderPasses ; i++) + { // Save channels' flags flags[i] = m_SndFile.ChnSettings[i].dwFlags; // Mute each channel m_SndFile.ChnSettings[i].dwFlags |= CHN_MUTE; } - // Keep position of the caracter just before ".wav" in path string - p = strlen(s) - 4; } + // Instrument mode: Same as channel mode, but renders per instrument (or sample) + if(wsdlg.m_bInstrumentMode) + { + // render by instrument (or sample) + if(m_SndFile.GetNumInstruments() == 0) + { + nRenderPasses = m_SndFile.GetNumSamples(); + instrMuteState.resize(nRenderPasses); + for(SAMPLEINDEX i = 0; i < m_SndFile.GetNumSamples(); i++) + { + instrMuteState[i] = IsSampleMuted(i + 1); + MuteSample(i + 1, true); + } + } else + { + nRenderPasses = m_SndFile.GetNumInstruments(); + instrMuteState.resize(nRenderPasses); + for(INSTRUMENTINDEX i = 0; i < m_SndFile.GetNumInstruments(); i++) + { + instrMuteState[i] = IsInstrumentMuted(i + 1); + MuteInstrument(i + 1, true); + } + } + } - CDoWaveConvert dwcdlg(&m_SndFile, s, &wsdlg.WaveFormat.Format, wsdlg.m_bNormalize, pMainFrm); + CDoWaveConvert dwcdlg(&m_SndFile, sFilename, &wsdlg.WaveFormat.Format, wsdlg.m_bNormalize, pMainFrm); dwcdlg.m_dwFileLimit = static_cast<DWORD>(wsdlg.m_dwFileLimit); dwcdlg.m_bGivePlugsIdleTime = wsdlg.m_bGivePlugsIdleTime; dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; dwcdlg.m_nMaxPatterns = (wsdlg.m_bSelectPlay) ? wsdlg.m_nMaxOrder - wsdlg.m_nMinOrder + 1 : 0; //if(wsdlg.m_bHighQuality) CSoundFile::SetResamplingMode(SRCMODE_POLYPHASE); - BOOL bplaying = FALSE; UINT pos = m_SndFile.GetCurrentPos(); - bplaying = TRUE; pMainFrm->PauseMod(); - for(UINT i = 0 ; i < n ; i++){ + for(int i = 0 ; i < nRenderPasses ; i++) + { // Channel mode - if(wsdlg.m_bChannelMode){ + if(wsdlg.m_bChannelMode) + { // Add channel number & name (if available) to path string - if(m_SndFile.ChnSettings[i].szName[0] >= 0x20) - wsprintf(channel, "-%03d_%s.wav", i+1,m_SndFile.ChnSettings[i].szName); + if(strlen(m_SndFile.ChnSettings[i].szName) > 0) + wsprintf(sFilenameAdd, "-%03d_%s.wav", i + 1, m_SndFile.ChnSettings[i].szName); else - wsprintf(channel, "-%03d.wav", i+1); - s[p] = '\0'; - strcat(s,channel); + wsprintf(sFilenameAdd, "-%03d.wav", i + 1); + // Re-mute previously processed channel + if(i > 0) m_SndFile.ChnSettings[i - 1].dwFlags |= CHN_MUTE; // Unmute channel to process m_SndFile.ChnSettings[i].dwFlags &= ~CHN_MUTE; } + // Instrument mode + if(wsdlg.m_bInstrumentMode) + { + if(m_SndFile.GetNumInstruments() == 0) + { + if(m_SndFile.Samples[i + 1].pSample == nullptr || !m_SndFile.IsSampleUsed((SAMPLEINDEX)(i + 1))) + continue; + // Add sample number & name (if available) to path string + if(strlen(m_SndFile.m_szNames[i + 1]) > 0) + wsprintf(sFilenameAdd, "-%03d_%s.wav", i + 1, m_SndFile.m_szNames[i + 1]); + else + wsprintf(sFilenameAdd, "-%03d.wav", i + 1); + // Re-mute previously processed sample + if(i > 0) MuteSample((SAMPLEINDEX)i, true); + // Unmute sample to process + MuteSample((SAMPLEINDEX)(i + 1), false); + } else + { + if(m_SndFile.Instruments[i + 1] == nullptr || !m_SndFile.IsInstrumentUsed((INSTRUMENTINDEX)(i + 1))) + continue; + if(strlen(m_SndFile.Instruments[i + 1]->name) > 0) + wsprintf(sFilenameAdd, "-%03d_%s.wav", i + 1, m_SndFile.Instruments[i + 1]->name); + else + wsprintf(sFilenameAdd, "-%03d.wav", i + 1); + // Re-mute previously processed instrument + if(i > 0) MuteInstrument((INSTRUMENTINDEX)i, true); + // Unmute instrument to process + MuteInstrument((INSTRUMENTINDEX)(i + 1), false); + } + } + if(_tcslen(sFilenameAdd) > 0) + { + SanitizeFilename(sFilenameAdd); + sFilename[p] = 0; + _tcscat(sFilename, sFilenameAdd); + _tcscpy(sFilenameAdd, _T("")); + } // Render song (or current channel if channel mode and channel not initially disabled) - if(!wsdlg.m_bChannelMode || !(flags[i] & CHN_MUTE)){ + if(!(wsdlg.m_bChannelMode || wsdlg.m_bInstrumentMode) || !(flags[i] & CHN_MUTE)) + { // rewbs.fix3239 m_SndFile.SetCurrentPos(0); m_SndFile.m_dwSongFlags &= ~SONG_PATTERNLOOP; - if (wsdlg.m_bSelectPlay) { + if (wsdlg.m_bSelectPlay) + { m_SndFile.SetCurrentOrder(wsdlg.m_nMinOrder); m_SndFile.m_nCurrentPattern = wsdlg.m_nMinOrder; m_SndFile.GetLength(TRUE, FALSE); @@ -1503,15 +1571,31 @@ //end rewbs.fix3239 if( dwcdlg.DoModal() != IDOK ) break; // UPDATE#03 } - - // Re-mute processed channel - if(wsdlg.m_bChannelMode) m_SndFile.ChnSettings[i].dwFlags |= CHN_MUTE; } // Restore channels' flags - if(wsdlg.m_bChannelMode){ - for(UINT i = 0 ; i < n ; i++) m_SndFile.ChnSettings[i].dwFlags = flags[i]; + if(wsdlg.m_bChannelMode) + { + for(int i = 0 ; i < nRenderPasses ; i++) + m_SndFile.ChnSettings[i].dwFlags = flags[i]; } + // Restore instruments' / samples' flags + if(wsdlg.m_bInstrumentMode) + { + if(m_SndFile.GetNumInstruments() == 0) + { + for(SAMPLEINDEX i = 0; i < m_SndFile.GetNumSamples(); i++) + { + MuteSample(i + 1, instrMuteState[i]); + } + } else + { + for(INSTRUMENTINDEX i = 0; i < m_SndFile.GetNumInstruments(); i++) + { + MuteInstrument(i + 1, instrMuteState[i]); + } + } + } m_SndFile.SetCurrentPos(pos); m_SndFile.GetLength(TRUE); @@ -1626,11 +1710,10 @@ ext = ModSpecs::mod.fileExtension; pattern = FileFilterMOD; if( AfxMessageBox(GetStrI18N(TEXT( - "Compared to regular MOD save, compatibility export makes " - "small adjustments to the save file in order to make the file compatible with " - "ProTracker and other Amiga-based trackers. Note that this feature is not complete and the " - "file is not guaranteed to be free of MPT-specific features.\n\n " - "Important: beginning of some samples may be adjusted in the process. Proceed?")), MB_ICONINFORMATION|MB_YESNO) != IDYES + "Compared to regular MOD save, compatibility export adjust the beginning of oneshot samples " + "in order to make the file compatible with ProTracker and other Amiga-based trackers. " + "Note that this feature does not remove effects \"invented\" by other PC-based trackers (f.e. panning commands)." + "\n\n Proceed?")), MB_ICONINFORMATION|MB_YESNO) != IDYES ) return; break; Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2010-05-22 13:36:09 UTC (rev 602) @@ -538,12 +538,19 @@ m_CbnOutput.SetRedraw(FALSE); m_CbnOutput.ResetContent(); m_CbnOutput.SetItemData(m_CbnOutput.AddString("Default"), 0); - for (UINT iOut=m_nCurrentPlugin+1; iOut<MAX_MIXPLUGINS; iOut++) + for (PLUGINDEX iOut = m_nCurrentPlugin + 1; iOut < MAX_MIXPLUGINS; iOut++) { PSNDMIXPLUGIN p = &pSndFile->m_MixPlugins[iOut]; - if (p->Info.szLibraryName[0]) + if (p->Info.dwPluginId1) { - wsprintf(s, "FX%d: %s", iOut+1, p->Info.szLibraryName); + if(!strcmp(p->Info.szLibraryName, p->Info.szName) || strlen(p->Info.szName) == 0) + { + wsprintf(s, "FX%d: %s", iOut + 1, p->Info.szLibraryName); + } else + { + wsprintf(s, "FX%d: %s (%s)", iOut + 1, p->Info.szLibraryName, p->Info.szName); + } + int n = m_CbnOutput.AddString(s); m_CbnOutput.SetItemData(n, 0x80|iOut); if ((pSndFile->m_MixPlugins[m_nCurrentPlugin].Info.dwOutputRouting & 0x80) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2010-05-22 13:36:09 UTC (rev 602) @@ -1404,14 +1404,16 @@ if (pModDoc) { UINT nChn = current ? (m_dwCursor&0xFFFF)>>3 : (m_nMenuParam&0xFFFF)>>3; - pModDoc->SoloChannel(nChn, FALSE); //rewbs.merge: recover old solo/mute behaviour + pModDoc->SoloChannel(nChn, false); //rewbs.merge: recover old solo/mute behaviour pModDoc->MuteChannel(nChn, !pModDoc->IsChannelMuted(nChn)); //If we just unmuted a channel, make sure none are still considered "solo". - if (!pModDoc->IsChannelMuted(nChn)) { - UINT nNumChn = pModDoc->GetNumChannels(); - for (UINT i=0; i<nNumChn; i++){ - pModDoc->SoloChannel(i, FALSE); + if(!pModDoc->IsChannelMuted(nChn)) + { + const CHANNELINDEX nNumChn = pModDoc->GetNumChannels(); + for(CHANNELINDEX i = 0; i < nNumChn; i++) + { + pModDoc->SoloChannel(i, false); } } @@ -1436,7 +1438,7 @@ return; } - UINT nNumChn = pModDoc->GetNumChannels(); + const CHANNELINDEX nNumChn = pModDoc->GetNumChannels(); UINT nChn = current ? (m_dwCursor&0xFFFF)>>3 : (m_nMenuParam&0xFFFF)>>3; if (nChn >= nNumChn) { return; @@ -1455,7 +1457,8 @@ return; } } - for (UINT i=0; i<nNumChn; i++) { + for(CHANNELINDEX i = 0; i < nNumChn; i++) + { pModDoc->MuteChannel(i, !(i == nChn)); //mute all chans except nChn, unmute nChn pModDoc->SoloChannel(i, (i == nChn)); //unsolo all chans except nChn, solo nChn } @@ -1506,11 +1509,11 @@ CModDoc *pModDoc = GetDocument(); if (pModDoc) { - UINT nChns = pModDoc->GetNumChannels(); - for (UINT i=0; i<nChns; i++) + const CHANNELINDEX nChns = pModDoc->GetNumChannels(); + for(CHANNELINDEX i = 0; i < nChns; i++) { - pModDoc->MuteChannel(i, FALSE); - pModDoc->SoloChannel(i, FALSE); //rewbs.merge: binary solo/mute behaviour + pModDoc->MuteChannel(i, false); + pModDoc->SoloChannel(i, false); //rewbs.merge: binary solo/mute behaviour } InvalidateChannelsHeaders(); } Modified: trunk/OpenMPT/mptrack/misc_util.h =================================================================== --- trunk/OpenMPT/mptrack/misc_util.h 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/misc_util.h 2010-05-22 13:36:09 UTC (rev 602) @@ -112,7 +112,7 @@ inline void SanitizeFilename(char (&buffer)[size]) { STATIC_ASSERT(size > 0); - for(int i = 0; i < size; i++) + for(size_t i = 0; i < size; i++) { if( buffer[i] == '\\' || buffer[i] == '\"' || @@ -123,7 +123,7 @@ buffer[i] == '>' || buffer[i] == '*') { - for(int j = i + 1; j < size; j++) + for(size_t j = i + 1; j < size; j++) { buffer[j - 1] = buffer[j]; } Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/mod2wave.h 2010-05-22 13:36:09 UTC (rev 602) @@ -20,8 +20,9 @@ // -> CODE#0024 // -> DESC="wav export update" - BOOL m_bChannelMode; + bool m_bChannelMode; // Render by channel // -! NEW_FEATURE#0024 + bool m_bInstrumentMode; // Render by instrument public: CWaveConvert(CWnd *parent, ORDERINDEX nMinOrder = ORDERINDEX_INVALID, ORDERINDEX nMaxOrder = ORDERINDEX_INVALID); @@ -33,6 +34,8 @@ virtual void OnOK(); afx_msg void OnCheck1(); afx_msg void OnCheck2(); + afx_msg void OnCheckChannelMode(); + afx_msg void OnCheckInstrMode(); afx_msg void OnFormatChanged(); afx_msg void OnPlayerOptions(); //rewbs.resamplerConf DECLARE_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/mptrack/mptrack.rc 2010-05-22 13:36:09 UTC (rev 602) @@ -284,33 +284,35 @@ PUSHBUTTON "Default Settings",IDC_BUTTON_DEFAULT_RESAMPLING,186,180,66,12 END -IDD_WAVECONVERT DIALOGEX 0, 0, 262, 197 +IDD_WAVECONVERT DIALOGEX 0, 0, 262, 221 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wave Convert" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "OK",IDOK,204,12,50,14 PUSHBUTTON "Cancel",IDCANCEL,204,30,50,14 - GROUPBOX "Render",IDC_STATIC,6,6,192,90 + GROUPBOX "Render",IDC_STATIC,6,6,192,114 COMBOBOX IDC_COMBO1,18,18,54,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO2,78,18,73,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Change Player Options",IDC_PLAYEROPTIONS,18,36,81,14,BS_CENTER - CONTROL "Channel mode (one file per channel)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,54,168,8 - CONTROL "Normalize Output (experimental)",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,66,119,10 + CONTROL "Normalize Output (experimental)",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,84,168,12 CONTROL "High quality resampling",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,112,36,84,10 CONTROL "Slow render (for Kontakt+DFD)",IDC_GIVEPLUGSIDLETIME, - "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,18,78,133,8 - GROUPBOX "Limit",IDC_STATIC,6,102,192,90 - CONTROL "Limit file size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,114,111,11 - EDITTEXT IDC_EDIT1,138,114,50,12,ES_AUTOHSCROLL - CONTROL "Limit song length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,134,111,10 - EDITTEXT IDC_EDIT2,138,133,50,12,ES_AUTOHSCROLL - LTEXT "Play:",IDC_STATIC,18,150,37,8 - CONTROL "Entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,18,162,104,10 - CONTROL "From position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,18,175,58,10 - EDITTEXT IDC_EDIT3,78,174,19,12,ES_AUTOHSCROLL | ES_NUMBER - CTEXT "to",IDC_STATIC,102,176,8,8 - EDITTEXT IDC_EDIT4,114,174,19,12,ES_AUTOHSCROLL | ES_NUMBER + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,18,97,168,12 + GROUPBOX "Limit",IDC_STATIC,6,126,192,90 + CONTROL "Limit file size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,138,111,11 + EDITTEXT IDC_EDIT1,138,138,50,12,ES_AUTOHSCROLL + CONTROL "Limit song length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,158,111,10 + EDITTEXT IDC_EDIT2,138,157,50,12,ES_AUTOHSCROLL + LTEXT "Play:",IDC_STATIC,18,174,37,8 + CONTROL "Entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,18,186,104,10 + CONTROL "From position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,18,199,58,10 + EDITTEXT IDC_EDIT3,78,198,24,12,ES_AUTOHSCROLL | ES_NUMBER + CTEXT "to",IDC_STATIC,105,200,8,8 + EDITTEXT IDC_EDIT4,117,198,24,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "Channel mode (one file per channel)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,54,168,12 + CONTROL "Instrument mode (one file per instrument)",IDC_CHECK6, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,66,168,12 END IDD_PROGRESS DIALOG 0, 0, 186, 55 @@ -1532,7 +1534,7 @@ IDD_WAVECONVERT, DIALOG BEGIN RIGHTMARGIN, 211 - BOTTOMMARGIN, 194 + BOTTOMMARGIN, 218 END IDD_OPTIONS_KEYBOARD, DIALOG Modified: trunk/OpenMPT/packageTemplate/History.txt =================================================================== --- trunk/OpenMPT/packageTemplate/History.txt 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/packageTemplate/History.txt 2010-05-22 13:36:09 UTC (rev 602) @@ -9,12 +9,13 @@ [Var]: other (tx XYZ): thanks to XYZ for telling us about the bug -Changes from revisions [476, 599] +Changes from revisions [476, 602] --------------------------------- General tab [Imp] <Jojo> Disabled tempo slider for MOD files (it was just confusing) [Imp] <Jojo> Disabled global volume slider for MOD files, instead enabled the sample pre-amp slider (so it is also possible to make output louder) + [Imp] <Jojo> The "output to" dropdown list also shows the actual plugin name (instead of just the library name) now. [Fix] <Jojo> Moving a plugin in MOD/S3M files doesn't mark them as modified anymore. The channel fx dropdown lists are now also disabled for those module types. [Fix] <Jojo> The restart position edit control is disabled for S3M files. [Fix] <coda> The background colour of the tabs in the channel configuration is now also correct when using WinXP Luna or Vista/Win7 Aero. @@ -174,6 +175,7 @@ Misc [New] <Jojo> INI Settings: When portable mode is enabled, the most common paths in mptrack.ini are now translated to relative paths (if possible). Plugin paths are not translated to relative paths (yet). [New] <Jojo> Modules in gzip archives (single-file .gz archives) can now be imported, just to satisfy my laziness when downloading gzipped modules from Amiga Music Preservation. :-P + [New] <Jojo> Wave export can now also render by instrument (i.e. one wave file per instrument). [Imp] <Jojo> Mod Loaders: Instead of creating messageboxes in various places, errors are now written to the log and one messagebox is shown for each file. [Imp] <Jojo> Binary files are now less often falsely recognized as early MOD files (15 samples without header): If the orderlist contains orderlist items > 128, loading is cancelled. [Imp] <Jojo> Song Properties: Tooltips are shown for various controls. @@ -187,6 +189,7 @@ [Fix] <Jojo> Song Length Detection: *Much* more accurate song length detection! [Fix] <Jojo/re> Instrument IO: Flags from old ITI/XI files should also be loaded correctly now (broken in 1.18.00.00) [Fix] <Jojo> Plugin Editor: Changing a plugin parameter in MOD/S3M files doesn't mark them as modified anymore. + [Fix] <Jojo> When using the "close file" shortcut several times in a row so that multiple messageboxes popped up, it was possible to crash OpenMPT. [Reg] <Jojo> Removed AutodetectITplaystyle option, since the tracker detection works reliably enough now. Tracker detection can not be ignored anymore now. Installer/release package Modified: trunk/OpenMPT/packageTemplate/OMPT_1.18_ReleaseNotes.html =================================================================== --- trunk/OpenMPT/packageTemplate/OMPT_1.18_ReleaseNotes.html 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/packageTemplate/OMPT_1.18_ReleaseNotes.html 2010-05-22 13:36:09 UTC (rev 602) @@ -19,8 +19,14 @@ a:visited { color: #909; text-decoration: none; } a:hover { text-decoration: underline; } - div img, h1 + .screenshots { + float:right; + text-align:right; + } + + .screenshots img, h1 + { border: 1px solid #ccc; padding: 3px; background: #eee; @@ -78,7 +84,8 @@ <h2>What's new?</h2> <h3>General</h3> - <div style="float:right;"> + <div class="screenshots"> + <a href="ReleaseNotesImages/1.18/cleanup.png"><img src="ReleaseNotesImages/1.18/cleanup.png" width="183" height="84" alt="Cleanup dialog" title="Cleanup dialog (click to view big screenshot)" /></a><br /> <img src="ReleaseNotesImages/1.18/treeview.png" width="183" height="338" alt="Improved treeview" title="Improved treeview" /> </div> <ul> @@ -104,11 +111,21 @@ A friendly reminder: The autosave and backup options should always be enabled; You will be very glad about them once OpenMPT <i>really</i> crashes or you accidentally overwrite a file.</li> <li>New and <strong>updated keymaps</strong> with many new shortcuts!</li> + <li>The new <strong>cleanup dialog</strong> replaces the cleanup menu and offers more options. For example, the <strong>rearrange samples</strong> function is available again.</li> <li><strong>Redesigned</strong> several dialogs.</li> </ul> + + <h3>Treeview</h3> + <ul> + <li>It is very simple to <strong>switch to another module</strong> now: Simply click the module name!</li> + <li><strong>Closing a module</strong> is almost as simple: Right-click the module name and select the appropriate context menu entry.</li> + <li>Sample and instrument <strong>playback indicators</strong>.</li> + <li><strong>Improved icons</strong>: Mute status is now displayed.</li> + <li><strong>Sequence control</strong> including copying a sequence to another module.</li> + </ul> <h3>Pattern Editor</h3> - <div style="float:right;"> + <div class="screenshots"> <img src="ReleaseNotesImages/1.18/orderlist.png" width="348" height="167" alt="New orderlist" title="New orderlist" /> </div> <ul> Added: trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.18/cleanup.png =================================================================== (Binary files differ) Property changes on: trunk/OpenMPT/packageTemplate/ReleaseNotesImages/1.18/cleanup.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-05-21 21:01:28 UTC (rev 601) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-05-22 13:36:09 UTC (rev 602) @@ -1845,7 +1845,7 @@ case RS_PCM16D: case RS_PCM16S: { - uint16 *p = (uint16 *)pSample; + int16 *p = (int16 *)pSample; int s_old = 0, s_ofs; len = nLen * 2; bufcount = 0; @@ -1861,11 +1861,11 @@ } if (nFlags == RS_PCM16D) { - *((uint16 *)(&buffer[bufcount])) = (uint16)(s_new - s_old); + *((int16 *)(&buffer[bufcount])) = (int16)(s_new - s_old); s_old = s_new; } else { - *((uint16 *)(&buffer[bufcount])) = (uint16)(s_new + s_ofs); + *((int16 *)(&buffer[bufcount])) = (int16)(s_new + s_ofs); } bufcount += 2; if (bufcount >= sizeof(buffer) - 1) @@ -1896,11 +1896,11 @@ p += 2; if (nFlags == RS_STPCM8D) { - buffer[bufcount++] = (uint8)(s_new - s_old); + buffer[bufcount++] = (int8)(s_new - s_old); s_old = s_new; } else { - buffer[bufcount++] = (uint8)(s_new + s_ofs); + buffer[bufcount++] = (int8)(s_new + s_ofs); } if (bufcount >= sizeof(buffer)) { @@ -1932,11 +1932,11 @@ p += 2; if (nFlags == RS_STPCM16D) { - *((uint16 *)(&buffer[bufcount])) = (uint16)(s_new - s_old); + *((int16 *)(&buffer[bufcount])) = (int16)(s_new - s_old); s_old = s_new; } else { - *((uint16 *)(&buffer[bufcount])) = (uint16)(s_new + s_ofs); + *((int16 *)(&buffer[bufcount])) = (int16)(s_new + s_ofs); } bufcount += 2; if (bufcount >= sizeof(buffer)) @@ -1979,11 +1979,11 @@ } if (nFlags == RS_PCM8D) { - buffer[bufcount++] = (uint8)(s_new - s_old); + buffer[bufcount++] = (int8)(s_new - s_old); s_old = s_new; } else { - buffer[bufcount++] = (uint8)(s_new + s_ofs); + buffer[bufcount++] = (int8)(s_new + s_ofs); } if (bufcount >= sizeof(buffer)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |