From: <sag...@us...> - 2011-09-17 15:42:45
|
Revision: 1034 http://modplug.svn.sourceforge.net/modplug/?rev=1034&view=rev Author: saga-games Date: 2011-09-17 15:42:37 +0000 (Sat, 17 Sep 2011) Log Message: ----------- [Mod] Volume ramp up and ramp down are now two different settings (patch by xaimus) Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpdlgs.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/mptrack/test/test.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -1304,7 +1304,7 @@ // -> CODE#0027 // -> DESC="per-instrument volume ramping setup (refered as attack)" // Volume ramping (attack) - int n = pIns->nVolRamp; //? MAX_ATTACK_LENGTH - pIns->nVolRamp : 0; + int n = pIns->nVolRampUp; //? MAX_ATTACK_LENGTH - pIns->nVolRampUp : 0; m_SliderAttack.SetPos(n); if(n == 0) SetDlgItemText(IDC_EDIT2,"default"); else SetDlgItemInt(IDC_EDIT2,n); @@ -2160,9 +2160,9 @@ if(n > MAX_ATTACK_VALUE) n = MAX_ATTACK_VALUE; int newRamp = n; //? MAX_ATTACK_LENGTH - n : 0; - if(pIns->nVolRamp != newRamp) + if(pIns->nVolRampUp != newRamp) { - pIns->nVolRamp = newRamp; + pIns->nVolRampUp = newRamp; SetInstrumentModified(true); } @@ -2343,12 +2343,13 @@ // -> CODE#0027 // -> DESC="per-instrument volume ramping setup (refered as attack)" // Volume ramping (attack) - if (pSlider==&m_SliderAttack) { + if (pSlider==&m_SliderAttack) + { n = m_SliderAttack.GetPos(); int newRamp = n; //? MAX_ATTACK_LENGTH - n : 0; - if(pIns->nVolRamp != newRamp) + if(pIns->nVolRampUp != newRamp) { - pIns->nVolRamp = newRamp; + pIns->nVolRampUp = newRamp; SetDlgItemInt(IDC_EDIT2,n); SetInstrumentModified(true); } Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp =================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -293,7 +293,7 @@ if(instr == nullptr) continue; // Extended instrument attributes - if(instr->nFilterMode != FLTMODE_UNCHANGED || instr->nVolRamp != 0 || instr->nResampling != SRCMODE_DEFAULT || + if(instr->nFilterMode != FLTMODE_UNCHANGED || instr->nVolRampUp != 0 || instr->nResampling != SRCMODE_DEFAULT || instr->nCutSwing != 0 || instr->nResSwing != 0 || instr->nMixPlug != 0 || instr->wPitchToTempoLock != 0 || instr->nDCT == DCT_PLUGIN || instr->VolEnv.nReleaseNode != ENV_RELEASE_NODE_UNSET || @@ -305,7 +305,7 @@ if(autofix) { instr->nFilterMode = FLTMODE_UNCHANGED; - instr->nVolRamp = 0; + instr->nVolRampUp = 0; instr->nResampling = SRCMODE_DEFAULT; instr->nCutSwing = 0; instr->nResSwing = 0; Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -430,20 +430,21 @@ BEGIN_MESSAGE_MAP(COptionsPlayer, CPropertyPage) ON_WM_HSCROLL() - ON_CBN_SELCHANGE(IDC_COMBO1,OnResamplerChanged) - ON_CBN_SELCHANGE(IDC_COMBO2,OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_COMBO1, OnResamplerChanged) + ON_CBN_SELCHANGE(IDC_COMBO2, OnSettingsChanged) //rewbs.resamplerConf - ON_CBN_SELCHANGE(IDC_WFIRTYPE,OnWFIRTypeChanged) - ON_EN_UPDATE(IDC_WFIRCUTOFF,OnSettingsChanged) - ON_EN_UPDATE(IDC_RAMPING, OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_WFIRTYPE, OnWFIRTypeChanged) + ON_EN_UPDATE(IDC_WFIRCUTOFF, OnSettingsChanged) + ON_EN_UPDATE(IDC_RAMPING_IN, OnSettingsChanged) + ON_EN_UPDATE(IDC_RAMPING_OUT, OnSettingsChanged) //end rewbs.resamplerConf - ON_COMMAND(IDC_CHECK1, OnSettingsChanged) - ON_COMMAND(IDC_CHECK2, OnSettingsChanged) - ON_COMMAND(IDC_CHECK3, OnSettingsChanged) - ON_COMMAND(IDC_CHECK4, OnSettingsChanged) - ON_COMMAND(IDC_CHECK5, OnSettingsChanged) - ON_COMMAND(IDC_CHECK6, OnSettingsChanged) - ON_COMMAND(IDC_CHECK7, OnSettingsChanged) + ON_COMMAND(IDC_CHECK1, OnSettingsChanged) + ON_COMMAND(IDC_CHECK2, OnSettingsChanged) + ON_COMMAND(IDC_CHECK3, OnSettingsChanged) + ON_COMMAND(IDC_CHECK4, OnSettingsChanged) + ON_COMMAND(IDC_CHECK5, OnSettingsChanged) + ON_COMMAND(IDC_CHECK6, OnSettingsChanged) + ON_COMMAND(IDC_CHECK7, OnSettingsChanged) ON_COMMAND(IDC_BUTTON_DEFAULT_RESAMPLING, OnDefaultResampling) END_MESSAGE_MAP() @@ -457,7 +458,8 @@ //rewbs.resamplerConf DDX_Control(pDX, IDC_WFIRTYPE, m_CbnWFIRType); DDX_Control(pDX, IDC_WFIRCUTOFF, m_CEditWFIRCutoff); - DDX_Control(pDX, IDC_RAMPING, m_CEditRamping); + DDX_Control(pDX, IDC_RAMPING_IN, m_CEditRampUp); + DDX_Control(pDX, IDC_RAMPING_OUT, m_CEditRampDown); //end rewbs.resamplerConf DDX_Control(pDX, IDC_COMBO2, m_CbnReverbPreset); DDX_Control(pDX, IDC_SLIDER1, m_SbXBassDepth); @@ -537,9 +539,14 @@ } //rewbs.resamplerConf OnResamplerChanged(); - char s[20] = ""; - _ltoa(CMainFrame::GetSettings().glVolumeRampSamples,s, 10); - m_CEditRamping.SetWindowText(s); + + char s[16] = ""; + _ltoa(CMainFrame::GetSettings().glVolumeRampUpSamples, s, 10); + m_CEditRampUp.SetWindowText(s); + + _ltoa(CMainFrame::GetSettings().glVolumeRampDownSamples, s, 10); + m_CEditRampDown.SetWindowText(s); + //end rewbs.resamplerConf return TRUE; } @@ -625,7 +632,8 @@ m_CbnResampling.SetCurSel(SRCMODE_POLYPHASE); OnResamplerChanged(); m_CEditWFIRCutoff.SetWindowText("97"); - m_CEditRamping.SetWindowText("42"); + m_CEditRampUp.SetWindowText("42"); + m_CEditRampDown.SetWindowText("42"); } @@ -677,8 +685,12 @@ if (s != "") CMainFrame::GetSettings().gdWFIRCutoff = atoi(s)/100.0; //CMainFrame::GetSettings().gbWFIRType set in OnWFIRTypeChange - m_CEditRamping.GetWindowText(s); - CMainFrame::GetSettings().glVolumeRampSamples = atol(s); + + m_CEditRampUp.GetWindowText(s); + CMainFrame::GetSettings().glVolumeRampUpSamples = atol(s); + m_CEditRampDown.GetWindowText(s); + CMainFrame::GetSettings().glVolumeRampDownSamples = atol(s); + SndMixInitializeTables(); //regenerate resampling tables //end rewbs.resamplerConf if (pParent) pParent->SetupPlayer(dwQuality, dwSrcMode, TRUE); Modified: trunk/OpenMPT/mptrack/Mpdlgs.h =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.h 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/Mpdlgs.h 2011-09-17 15:42:37 UTC (rev 1034) @@ -51,7 +51,8 @@ CSliderCtrl m_SbXBassDepth, m_SbXBassRange; CSliderCtrl m_SbSurroundDepth, m_SbSurroundDelay; CSliderCtrl m_SbReverbDepth; - CEdit m_CEditWFIRCutoff, m_CEditRamping; //rewbs.resamplerConf: added m_CEditRamping + CEdit m_CEditWFIRCutoff; + CEdit m_CEditRampUp, m_CEditRampDown; public: COptionsPlayer():CPropertyPage(IDD_OPTIONS_PLAYER) {} Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -51,7 +51,8 @@ gcsInstallGUID = ""; // Audio Setup //rewbs.resamplerConf - glVolumeRampSamples = 42; + glVolumeRampUpSamples = 42; + glVolumeRampDownSamples = 42; gdWFIRCutoff = 0.97; gbWFIRType = 7; //WFIR_KAISER4T; //end rewbs.resamplerConf @@ -343,7 +344,11 @@ gbWFIRType = static_cast<BYTE>(CMainFrame::GetPrivateProfileDWord("Sound Settings", "XMMSModplugResamplerWFIRType", gbWFIRType, iniFile)); //gdWFIRCutoff = static_cast<double>(CMainFrame::GetPrivateProfileLong("Sound Settings", "ResamplerWFIRCutoff", gdWFIRCutoff * 100.0, iniFile)) / 100.0; gdWFIRCutoff = static_cast<double>(CMainFrame::GetPrivateProfileLong("Sound Settings", "ResamplerWFIRCutoff", Util::Round<long>(gdWFIRCutoff * 100.0), iniFile)) / 100.0; - glVolumeRampSamples = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampSamples", glVolumeRampSamples, iniFile); + + // Ramping... first try to read the old setting, then the new ones + glVolumeRampUpSamples = glVolumeRampDownSamples = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampSamples", glVolumeRampUpSamples, iniFile); + glVolumeRampUpSamples = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampUpSamples", glVolumeRampUpSamples, iniFile); + glVolumeRampDownSamples = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampDownSamples", glVolumeRampDownSamples, iniFile); m_dwMidiSetup = CMainFrame::GetPrivateProfileDWord("MIDI Settings", "MidiSetup", m_dwMidiSetup, iniFile); m_nMidiDevice = CMainFrame::GetPrivateProfileDWord("MIDI Settings", "MidiDevice", m_nMidiDevice, iniFile); @@ -577,8 +582,9 @@ RegQueryValueEx(key, "XMMSModplugResamplerWFIRType", NULL, &dwREG_DWORD, (LPBYTE)&gbWFIRType, &dwDWORDSize); dwDWORDSize = sizeof(gdWFIRCutoff); RegQueryValueEx(key, "ResamplerWFIRCutoff", NULL, &dwREG_DWORD, (LPBYTE)&gdWFIRCutoff, &dwDWORDSize); - dwDWORDSize = sizeof(glVolumeRampSamples); - RegQueryValueEx(key, "VolumeRampSamples", NULL, &dwREG_DWORD, (LPBYTE)&glVolumeRampSamples, &dwDWORDSize); + dwDWORDSize = sizeof(glVolumeRampUpSamples); + RegQueryValueEx(key, "VolumeRampSamples", NULL, &dwREG_DWORD, (LPBYTE)&glVolumeRampUpSamples, &dwDWORDSize); + glVolumeRampDownSamples = glVolumeRampUpSamples; //end rewbs.resamplerConf //rewbs.autochord @@ -709,7 +715,9 @@ CMainFrame::WritePrivateProfileLong("Sound Settings", "MixChannels", CSoundFile::m_nMaxMixChannels, iniFile); CMainFrame::WritePrivateProfileDWord("Sound Settings", "XMMSModplugResamplerWFIRType", gbWFIRType, iniFile); CMainFrame::WritePrivateProfileLong("Sound Settings", "ResamplerWFIRCutoff", static_cast<int>(gdWFIRCutoff*100+0.5), iniFile); - CMainFrame::WritePrivateProfileLong("Sound Settings", "VolumeRampSamples", glVolumeRampSamples, iniFile); + WritePrivateProfileString("Sound Settings", "VolumeRampSamples", NULL, iniFile); // deprecated + CMainFrame::WritePrivateProfileLong("Sound Settings", "VolumeRampUpSamples", glVolumeRampUpSamples, iniFile); + CMainFrame::WritePrivateProfileLong("Sound Settings", "VolumeRampDownSamples", glVolumeRampDownSamples, iniFile); CMainFrame::WritePrivateProfileDWord("MIDI Settings", "MidiSetup", m_dwMidiSetup, iniFile); CMainFrame::WritePrivateProfileDWord("MIDI Settings", "MidiDevice", m_nMidiDevice, iniFile); Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2011-09-17 15:42:37 UTC (rev 1034) @@ -69,7 +69,7 @@ //rewbs.resamplerConf double gdWFIRCutoff; BYTE gbWFIRType; - long glVolumeRampSamples; + long glVolumeRampUpSamples, glVolumeRampDownSamples; //end rewbs.resamplerConf UINT gnAutoChordWaitTime; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/mptrack.rc 2011-09-17 15:42:37 UTC (rev 1034) @@ -13,13 +13,11 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// Deutsch (Deutschland) resources +// German (Germany) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) -#ifdef _WIN32 LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) -#endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // @@ -208,7 +206,6 @@ LTEXT "",IDC_LASTUPDATE,6,228,258,24 END - IDD_CLOSEDOCUMENTS DIALOGEX 0, 0, 370, 197 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Save modified files" @@ -228,7 +225,7 @@ // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO +GUIDELINES DESIGNINFO BEGIN IDD_MODLOADING_WARNINGS, DIALOG BEGIN @@ -320,18 +317,16 @@ END #endif // APSTUDIO_INVOKED -#endif // Deutsch (Deutschland) resources +#endif // German (Germany) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// Englisch (USA) resources +// English (United States) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) -#endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // @@ -382,7 +377,7 @@ CONTROL "Slider2",IDC_SLIDER6,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,149,128,62,15 LTEXT "5ms",IDC_STATIC,131,131,18,8 LTEXT "50ms",IDC_STATIC,211,131,23,8 - GROUPBOX "Sound Quality",IDC_STATIC,6,162,256,108 + GROUPBOX "Sound Quality",IDC_STATIC,6,162,256,114 LTEXT "Resampling:",IDC_STATIC,18,182,42,8 COMBOBOX IDC_COMBO1,66,180,114,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "WFIR type:",IDC_STATIC,18,200,42,8 @@ -392,9 +387,11 @@ LTEXT "%",IDC_STATIC,186,219,8,8 LTEXT "Sample ramping (click avoidance):",IDC_STATIC,18,238,109,8 LTEXT "(can be overridden by instrument setting)",IDC_STATIC,18,248,138,8 - EDITTEXT IDC_RAMPING,156,235,24,14,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Samples",IDC_STATIC,182,238,29,8 + EDITTEXT IDC_RAMPING_IN,156,235,24,14,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Samples (Ramp In)",IDC_STATIC,182,238,70,8 PUSHBUTTON "Default Settings",IDC_BUTTON_DEFAULT_RESAMPLING,186,180,66,12 + EDITTEXT IDC_RAMPING_OUT,156,252,24,14,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Samples (Ramp Out)",IDC_STATIC,182,255,70,8 END IDD_WAVECONVERT DIALOGEX 0, 0, 262, 221 @@ -428,7 +425,7 @@ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,66,168,12 END -IDD_PROGRESS DIALOG 0, 0, 186, 55 +IDD_PROGRESS DIALOG 0, 0, 186, 55 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Saving Wave File" FONT 8, "MS Shell Dlg" @@ -842,7 +839,7 @@ RTEXT "IDC_TEXT_SAVEDWITH",IDC_TEXT_SAVEDWITH,18,283,54,8 END -IDD_SHOWLOG DIALOG 0, 0, 300, 106 +IDD_SHOWLOG DIALOG 0, 0, 300, 106 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Information" FONT 8, "MS Shell Dlg" @@ -1042,7 +1039,7 @@ BEGIN END -IDD_PAGEEDITNOTE DIALOG 0, 0, 220, 34 +IDD_PAGEEDITNOTE DIALOG 0, 0, 220, 34 STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION CAPTION "Note" FONT 8, "MS Shell Dlg" @@ -1053,7 +1050,7 @@ COMBOBOX IDC_COMBO2,74,15,137,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END -IDD_PAGEEDITVOLUME DIALOG 0, 0, 220, 34 +IDD_PAGEEDITVOLUME DIALOG 0, 0, 220, 34 STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CHILD | WS_VISIBLE | WS_CAPTION CAPTION "Volume" FONT 8, "MS Shell Dlg" @@ -1303,14 +1300,14 @@ EDITTEXT IDC_EDIT6,174,180,31,12,ES_AUTOHSCROLL | ES_NUMBER END -IDD_SPLASHSCREEN DIALOG 0, 0, 188, 95 +IDD_SPLASHSCREEN DIALOG 0, 0, 188, 95 STYLE DS_SETFONT | DS_SETFOREGROUND | DS_CENTER | WS_POPUP FONT 8, "MS Shell Dlg" BEGIN CONTROL "",IDC_SPLASH,"Static",SS_WHITERECT,0,0,187,94 END -IDD_TREEVIEW DIALOG 0, 0, 85, 266 +IDD_TREEVIEW DIALOG 0, 0, 85, 266 STYLE DS_SETFONT | WS_CHILD FONT 8, "MS Shell Dlg" BEGIN @@ -1389,7 +1386,7 @@ BEGIN END -IDD_SETUP_REVERB DIALOG 0, 0, 240, 156 +IDD_SETUP_REVERB DIALOG 0, 0, 240, 156 STYLE DS_SETFONT | WS_CHILD | WS_CAPTION CAPTION "Reverb" FONT 8, "MS Shell Dlg" @@ -1633,7 +1630,7 @@ // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO +GUIDELINES DESIGNINFO BEGIN IDD_ABOUTBOX, DIALOG BEGIN @@ -1990,7 +1987,7 @@ // Menu // -IDR_MAINFRAME MENU +IDR_MAINFRAME MENU BEGIN POPUP "&File" BEGIN @@ -2103,7 +2100,7 @@ END END -IDR_TOOLBARS MENU +IDR_TOOLBARS MENU BEGIN POPUP "&ToolBars" BEGIN @@ -2112,7 +2109,7 @@ END END -IDR_ENVELOPES MENU +IDR_ENVELOPES MENU BEGIN POPUP "&Envelope" BEGIN @@ -2145,7 +2142,7 @@ // String Table // -STRINGTABLE +STRINGTABLE BEGIN IDR_MAINFRAME "OpenMPT" IDR_MODULETYPE "\nModule\nuntitled\nMusic Modules (*.mod;*.s3m;*.it;*.xm)\n.mod\nModplugTracker.Document\nMusic Module" @@ -2158,20 +2155,20 @@ IDS_APPLY_TUNING_MODIFICATIONS "Apply local tuning modifications to file?" END -STRINGTABLE +STRINGTABLE BEGIN ID_ENVELOPE_VIEWGRID "Show/hide row guidelines" ID_REPORT_BUG "Report a bug!\nReport a bug!" IDS_ERR_DIALOG "Dialog encountered an error and needs to close" END -STRINGTABLE +STRINGTABLE BEGIN AFX_IDS_APP_TITLE "OpenMPT" AFX_IDS_IDLEMESSAGE "Ready" END -STRINGTABLE +STRINGTABLE BEGIN IDS_TUNING_IMPORT_LIMIT "-Failed to load file %1%2: maximum number(=%3!u!) of temporary tunings is already open.\n" IDS_TUNING_IMPORT_UNKNOWN_FAILURE @@ -2197,14 +2194,14 @@ IDS_ERR_SAVESONG "Unable to save song!" END -STRINGTABLE +STRINGTABLE BEGIN IDS_ERR_TOOMANYPAT "Too many patterns!" IDS_ERR_TOOMANYSMP "Too many samples!" IDS_ERR_SAVESMP "Unable to save sample" END -STRINGTABLE +STRINGTABLE BEGIN ID_INDICATOR_EXT "EXT" ID_INDICATOR_CAPS "CAP" @@ -2214,20 +2211,20 @@ ID_INDICATOR_REC "REC" END -STRINGTABLE +STRINGTABLE BEGIN ID_INDICATOR_TIME "00:00:00 [100] 200ch" -END - -STRINGTABLE -BEGIN ID_INDICATOR_USER "Row 000, Col 000" ID_INDICATOR_INFO "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ID_INDICATOR_XINFO "123456789|123456789|123456789|123456789|" +END + +STRINGTABLE +BEGIN ID_VIEW_MIDIMAPPING "Configure the MIDI Mapping" END -STRINGTABLE +STRINGTABLE BEGIN ID_FILE_NEW "Create a new document\nNew" ID_FILE_OPEN "Open an existing document\nOpen" @@ -2236,7 +2233,7 @@ ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" END -STRINGTABLE +STRINGTABLE BEGIN ID_APP_ABOUT "About OpenMPT\nAbout" ID_APP_EXIT "Exit OpenMPT\nExit" @@ -2247,7 +2244,7 @@ ID_HELP "Display help for current task or command\nHelp" END -STRINGTABLE +STRINGTABLE BEGIN ID_FILE_MRU_FILE1 "Open this document" ID_FILE_MRU_FILE2 "Open this document" @@ -2267,13 +2264,13 @@ ID_FILE_MRU_FILE16 "Open this document" END -STRINGTABLE +STRINGTABLE BEGIN ID_NEXT_PANE "Switch to the next window pane\nNext Pane" ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" END -STRINGTABLE +STRINGTABLE BEGIN ID_WINDOW_NEW "Open another window for the active song\nNew Window" ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" @@ -2283,7 +2280,7 @@ ID_WINDOW_SPLIT "Split the active window into panes\nSplit" END -STRINGTABLE +STRINGTABLE BEGIN ID_EDIT_CLEAR "Erase the selection\nErase" ID_EDIT_CLEAR_ALL "Erase everything\nErase All" @@ -2299,13 +2296,13 @@ ID_EDIT_REDO "Redo the previously undone action\nRedo" END -STRINGTABLE +STRINGTABLE BEGIN ID_VIEW_TOOLBAR "Show or hide the main toolbar\nToggle ToolBar" ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" END -STRINGTABLE +STRINGTABLE BEGIN AFX_IDS_SCSIZE "Change the window size" AFX_IDS_SCMOVE "Change the window position" @@ -2316,14 +2313,14 @@ AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents" END -STRINGTABLE +STRINGTABLE BEGIN AFX_IDS_SCRESTORE "Restore the window to normal size" AFX_IDS_SCTASKLIST "Activate Task List" AFX_IDS_MDICHILD "Activate this window" END -STRINGTABLE +STRINGTABLE BEGIN ID_FILE_NEWMOD "Create a new ProTracker (MOD) music module\nNew MOD" ID_FILE_NEWXM "Create a new FastTracker II (XM) music module\nNew XM" @@ -2337,7 +2334,7 @@ ID_PLAYER_SETUP "Configure the sound device and player options" END -STRINGTABLE +STRINGTABLE BEGIN ID_VIEW_OPTIONS "Configure the audio device, keyboard layout, colors etc...\nSetup" ID_INSERT_PATTERN "Create a new pattern" @@ -2351,12 +2348,12 @@ ID_EDIT_FINDNEXT "Continue search\nFind Next" END -STRINGTABLE +STRINGTABLE BEGIN IDC_COMBO_INSTRUMENT "Change the current instrument for entering notes\nActive Instrument" END -STRINGTABLE +STRINGTABLE BEGIN IDC_SAMPLE_NEW "Create a new sample\nNew Sample" IDC_SAMPLE_OPEN "Load sample from disk\nImport sample" @@ -2369,12 +2366,12 @@ IDC_SAMPLE_PLAY "Play a middle C using the current sample\nPlay sample" END -STRINGTABLE +STRINGTABLE BEGIN IDC_SAMPLE_DOWNSAMPLE "Shrink selection\nDownsample" END -STRINGTABLE +STRINGTABLE BEGIN IDC_PATTERN_PLAY "Play the curent pattern from the current position\nPlay Pattern" IDC_PATTERN_PLAYFROMSTART @@ -2384,7 +2381,7 @@ IDC_PATTERN_NEW "Create a new pattern\nInsert Pattern" END -STRINGTABLE +STRINGTABLE BEGIN IDC_SAMPLE_SILENCE "Silence Sample\nSilence" IDC_SAMPLE_INVERT "Invert phase\nInvert phase" @@ -2395,12 +2392,12 @@ IDC_INSTRUMENT_PLAY "Play the current instrument\nPlay instrument" END -STRINGTABLE +STRINGTABLE BEGIN IDC_SAMPLE_DCOFFSET "Remove DC Offset\nRemove DC Offset and normalize (hold shift to process all samples)" END -STRINGTABLE +STRINGTABLE BEGIN ID_ENVELOPE_SETLOOP "Enable or disable the envelope loop" ID_ENVELOPE_SUSTAIN "Enable or disable the envelope sustain" @@ -2409,21 +2406,21 @@ ID_MODTREE_REFRESH "Refresh the display\nRefresh" END -STRINGTABLE +STRINGTABLE BEGIN ID_PATTERN_PLAYROW "Play current row\nPlay Row" ID_IMPORT_MIDILIB "Defines the default MIDI library used when importing MIDI files" ID_CLEANUP_REARRANGE "Rearrange all patterns so that they are sorted in the order list\nRearrange Patterns" END -STRINGTABLE +STRINGTABLE BEGIN ID_EDIT_GOTO_MENU "Go to row / channel / pattern / order" ID_CLEANUP_COMPO "Reset attributes to defaults (useful for creating sample packs)\nCompo Cleanup" ID_OVERFLOWPASTE "Toggle overflow paste\nToggle overflow paste" END -STRINGTABLE +STRINGTABLE BEGIN ID_VIEW_COMMENTS "Activates the song text editor" ID_ADD_SOUNDBANK "Add a new DLS sound bank" @@ -2432,7 +2429,7 @@ ID_MIDI_RECORD "Record from an external MIDI keyboard\nMIDI Record" END -STRINGTABLE +STRINGTABLE BEGIN ID_PATTERN_PROPERTIES "Pattern Properties\nPattern Properties" ID_PATTERN_VUMETERS "Show or hide channel VU-Meters\nVU-Meters" @@ -2444,7 +2441,7 @@ ID_ENVSEL_PANNING "Show Panning Envelope" END -STRINGTABLE +STRINGTABLE BEGIN ID_ENVSEL_PITCH "Show Pitch/Filter Envelope" ID_ENVELOPE_VOLUME "Enable or disable the volume envelope" @@ -2458,12 +2455,12 @@ ID_NETLINK_TOP_PICKS "Visit our list of free web resources!" END -STRINGTABLE +STRINGTABLE BEGIN IDD_TREEVIEW "Show or hide the tree view" END -STRINGTABLE +STRINGTABLE BEGIN ID_SAMPLE_TRIM "Delete everything except the current selection\nTrim Sample" ID_FILE_SAVEMIDI "Export the current song to a standard MIDI file" @@ -2474,27 +2471,27 @@ ID_PATTERN_AMPLIFY "Amplify selection\nAmplify" END -STRINGTABLE +STRINGTABLE BEGIN ID_ESTIMATESONGLENGTH "Displays the approximate song length" END -STRINGTABLE +STRINGTABLE BEGIN ID_VIEWPLUGNAMES "Displays the channel plugins in channel headers\nShow Plugins" END -STRINGTABLE +STRINGTABLE BEGIN ID_EDIT_GOTO "Go to row, channel, pattern...\nGo to row" END -STRINGTABLE +STRINGTABLE BEGIN IDS_ERR_TUNING_SERIALISATION "Static tuning serialisation failed" END -STRINGTABLE +STRINGTABLE BEGIN IDS_ERR_NO_TUNING_SELECTION "Operation failed - No tuning file selected." IDS_UNSUPPORTED_TUNING_DnD @@ -2518,50 +2515,44 @@ IDS_SCL_IMPORT_FAIL_8 "OpenMPT supports importing scl-files with at most %1 notes" END -STRINGTABLE +STRINGTABLE BEGIN ID_PANIC "Kill all VSTi and sample voices\nStop all hanging VSTi and sample voices" ID_VIEW_EDITHISTORY "View the edit history of this module" -END - -STRINGTABLE -BEGIN ID_FILE_SAVEASTEMPLATE "Save the active document as template module\nSave as Template" END -STRINGTABLE +STRINGTABLE BEGIN ID_FILE_OPENTEMPLATE "Open a template document\nOpen template document" END -STRINGTABLE +STRINGTABLE BEGIN ID_CHANNEL_MANAGER "Add, remove, mute and manage channels" ID_PLUGIN_SETUP "Register plugins and add them to the current module" END -STRINGTABLE +STRINGTABLE BEGIN ID_VIEW_SONGPROPERTIES "Edit global song properties or convert the module to another format" END -STRINGTABLE +STRINGTABLE BEGIN IDC_SAMPLE_XFADE "Crossfade Loop Points\nCrossfade between loop start and loop end to create seamless sample loops." END -#endif // Englisch (USA) resources +#endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// Englisch (GB) resources +// English (United Kingdom) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) -#ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK #pragma code_page(1252) -#endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // @@ -2740,7 +2731,7 @@ // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO +GUIDELINES DESIGNINFO BEGIN IDD_MSGBOX_HIDABLE, DIALOG BEGIN @@ -2823,7 +2814,7 @@ // Menu // -IDR_VSTMENU MENU +IDR_VSTMENU MENU BEGIN POPUP "&File" BEGIN @@ -2846,7 +2837,7 @@ END END -IDR_PLUGINMENU MENU +IDR_PLUGINMENU MENU BEGIN POPUP "File" BEGIN @@ -2928,7 +2919,7 @@ // IDR_BUILTIN_TUNINGS TUNING "res\\built-inTunings.tc" -#endif // Englisch (GB) resources +#endif // English (United Kingdom) resources ///////////////////////////////////////////////////////////////////////////// Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/resource.h 2011-09-17 15:42:37 UTC (rev 1034) @@ -716,8 +716,9 @@ #define IDC_PATINSTROPLUGGUI 2201 #define IDC_WFIRCUTOFF 2202 #define IDC_WFIRTYPE 2203 -#define IDC_RAMPING 2204 +#define IDC_RAMPING_IN 2204 #define IDC_PLAYEROPTIONS 2205 +#define IDC_RAMPING_OUT 2205 #define IDC_CHORDDETECTWAITTIME 2206 #define IDC_STATIC2 2207 #define IDC_STATIC1 2208 Modified: trunk/OpenMPT/mptrack/test/test.cpp =================================================================== --- trunk/OpenMPT/mptrack/test/test.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/mptrack/test/test.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -325,7 +325,7 @@ VERIFY_EQUAL_NONCONT(pIns->nPPS, 0); VERIFY_EQUAL_NONCONT(pIns->nPPC, NOTE_MIDDLEC - 1); - VERIFY_EQUAL_NONCONT(pIns->nVolRamp, 1200); + VERIFY_EQUAL_NONCONT(pIns->nVolRampUp, 1200); VERIFY_EQUAL_NONCONT(pIns->nResampling, SRCMODE_POLYPHASE); VERIFY_EQUAL_NONCONT(pIns->nIFC, 0); @@ -520,7 +520,7 @@ VERIFY_EQUAL_NONCONT(pIns->nPPS, 16); VERIFY_EQUAL_NONCONT(pIns->nPPC, (NOTE_MIDDLEC - 1) + 6); // F#5 - VERIFY_EQUAL_NONCONT(pIns->nVolRamp, 1200); + VERIFY_EQUAL_NONCONT(pIns->nVolRampUp, 1200); VERIFY_EQUAL_NONCONT(pIns->nResampling, SRCMODE_POLYPHASE); VERIFY_EQUAL_NONCONT(pIns->nIFC, 0x80 | 0x32); Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -2476,7 +2476,7 @@ MODINSTRUMENT *sizeIns = new MODINSTRUMENT(); - WriteInstrumentPropertyForAllInstruments('VR..', sizeof(sizeIns->nVolRamp), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('VR..', sizeof(sizeIns->nVolRampUp), f, nInstruments); WriteInstrumentPropertyForAllInstruments('MiP.', sizeof(sizeIns->nMixPlug), f, nInstruments); WriteInstrumentPropertyForAllInstruments('MC..', sizeof(sizeIns->nMidiChannel),f, nInstruments); WriteInstrumentPropertyForAllInstruments('MP..', sizeof(sizeIns->nMidiProgram),f, nInstruments); Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -207,7 +207,7 @@ VLE. VolEnv.nLoopEnd; VLS. VolEnv.nLoopStart; VP[. VolEnv.Ticks[MAX_ENVPOINTS]; -VR.. nVolRamp; +VR.. nVolRampUp; VS.. nVolSwing; VSB. VolEnv.nSustainStart; VSE. VolEnv.nSustainEnd; @@ -326,7 +326,7 @@ WRITE_MPTHEADER_array_member( name , CHAR , n[.. , 32 ) WRITE_MPTHEADER_array_member( filename , CHAR , fn[. , 12 ) WRITE_MPTHEADER_sized_member( nMixPlug , BYTE , MiP. ) -WRITE_MPTHEADER_sized_member( nVolRamp , USHORT , VR.. ) +WRITE_MPTHEADER_sized_member( nVolRampUp , uint16 , VR.. ) WRITE_MPTHEADER_sized_member( nResampling , USHORT , R... ) WRITE_MPTHEADER_sized_member( nCutSwing , BYTE , CS.. ) WRITE_MPTHEADER_sized_member( nResSwing , BYTE , RS.. ) @@ -408,7 +408,7 @@ GET_MPTHEADER_array_member( name , CHAR , n[.. , 32 ) GET_MPTHEADER_array_member( filename , CHAR , fn[. , 12 ) GET_MPTHEADER_sized_member( nMixPlug , BYTE , MiP. ) -GET_MPTHEADER_sized_member( nVolRamp , USHORT , VR.. ) +GET_MPTHEADER_sized_member( nVolRampUp , uint16 , VR.. ) GET_MPTHEADER_sized_member( nResampling , UINT , R... ) GET_MPTHEADER_sized_member( nCutSwing , BYTE , CS.. ) GET_MPTHEADER_sized_member( nResSwing , BYTE , RS.. ) Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/soundlib/Sndfile.h 2011-09-17 15:42:37 UTC (rev 1034) @@ -142,10 +142,7 @@ CHAR filename[32]; PLUGINDEX nMixPlug; // Plugin assigned to this instrument -// -> CODE#0027 -// -> DESC="per-instrument volume ramping setup (refered as attack)" - USHORT nVolRamp; // Default sample ramping -// -! NEW_FEATURE#0027 + uint16 nVolRampUp; // Default sample ramping up UINT nResampling; // Resampling mode BYTE nCutSwing; // Random cutoff factor BYTE nResSwing; // Random resonance factor @@ -199,7 +196,7 @@ MemsetZero(filename); nMixPlug = 0; - nVolRamp = 0; + nVolRampUp = 0; nResampling = SRCMODE_DEFAULT; nCutSwing = 0; nResSwing = 0; @@ -680,7 +677,9 @@ static UINT m_nMaxMixChannels; static LONG m_nStreamVolume; static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels; - static UINT gnAGC, gnVolumeRampSamples, gnCPUUsage; + static UINT gnAGC; + static UINT gnVolumeRampUpSamples, gnVolumeRampDownSamples; + static UINT gnCPUUsage; static LPSNDMIXHOOKPROC gpSndMixHook; static PMIXPLUGINCREATEPROC gpMixPluginCreateProc; static uint8 s_DefaultPlugVolumeHandling; Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2011-09-11 18:52:20 UTC (rev 1033) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2011-09-17 15:42:37 UTC (rev 1034) @@ -42,7 +42,8 @@ DWORD CSoundFile::gnBitsPerSample = 16; // Mixing data initialized in UINT CSoundFile::gnAGC = AGC_UNITY; -UINT CSoundFile::gnVolumeRampSamples = 42; //default value +UINT CSoundFile::gnVolumeRampUpSamples = 42; //default value +UINT CSoundFile::gnVolumeRampDownSamples = 42; //default value UINT CSoundFile::gnCPUUsage = 0; LPSNDMIXHOOKPROC CSoundFile::gpSndMixHook = NULL; PMIXPLUGINCREATEPROC CSoundFile::gpMixPluginCreateProc = NULL; @@ -226,7 +227,8 @@ if (gdwMixingFreq > MAX_SAMPLE_RATE) gdwMixingFreq = MAX_SAMPLE_RATE; // Start with ramping disabled to avoid clicks on first read. // Ramping is now set after the first read in CSoundFile::Read(); - gnVolumeRampSamples = 0; + gnVolumeRampUpSamples = 0; + gnVolumeRampDownSamples = CMainFrame::GetSettings().glVolumeRampDownSamples; gnDryROfsVol = gnDryLOfsVol = 0; #ifndef NO_REVERB gnRvbROfsVol = gnRvbLOfsVol = 0; @@ -425,7 +427,7 @@ m_nBufferCount -= lCount; m_lTotalSampleCount += lCount; // increase sample count for VSTTimeInfo. // Turn on ramping after first read (fix http://forum.openmpt.org/index.php?topic=523.0 ) - gnVolumeRampSamples = CMainFrame::GetSettings().glVolumeRampSamples; + gnVolumeRampUpSamples = CMainFrame::GetSettings().glVolumeRampUpSamples; } MixDone: if (lRead) memset(lpBuffer, (gnBitsPerSample == 8) ? 0x80 : 0, lRead * lSampleSize); @@ -1738,44 +1740,57 @@ //----------------------------------------------- { pChn->nRightRamp = pChn->nLeftRamp = 0; - if ((pChn->dwFlags & CHN_VOLUMERAMP) // && gnVolumeRampSamples //rewbs: this allows us to use non ramping mix functions if ramping is 0 - && ((pChn->nRightVol != pChn->nNewRightVol) || (pChn->nLeftVol != pChn->nNewLeftVol))) + if((pChn->dwFlags & CHN_VOLUMERAMP) && ((pChn->nRightVol != pChn->nNewRightVol) || (pChn->nLeftVol != pChn->nNewLeftVol))) { - LONG nRampLength = gnVolumeRampSamples; - // -> CODE#0027 - // -> DESC="per-instrument volume ramping setup" - BOOL enableCustomRamp = pChn->pModInstrument && (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_XM)); - if(enableCustomRamp) nRampLength = pChn->pModInstrument->nVolRamp ? (gdwMixingFreq * pChn->pModInstrument->nVolRamp / 100000) : gnVolumeRampSamples; - if(!nRampLength) nRampLength = 1; - // -! NEW_FEATURE#0027 + const bool rampUp = (pChn->nNewRightVol > pChn->nRightVol) || (pChn->nNewLeftVol > pChn->nLeftVol); + LONG rampLength, globalRampLength, instrRampLength = 0; + rampLength = globalRampLength = (rampUp ? gnVolumeRampUpSamples : gnVolumeRampDownSamples); + //XXXih: add real support for bidi ramping here + + if(pChn->pModInstrument != nullptr && rampUp) + { + instrRampLength = pChn->pModInstrument->nVolRampUp; + rampLength = instrRampLength ? (gdwMixingFreq * instrRampLength / 100000) : globalRampLength; + } + const bool enableCustomRamp = (instrRampLength > 0); + + if(!rampLength) + { + rampLength = 1; + } + LONG nRightDelta = ((pChn->nNewRightVol - pChn->nRightVol) << VOLUMERAMPPRECISION); LONG nLeftDelta = ((pChn->nNewLeftVol - pChn->nLeftVol) << VOLUMERAMPPRECISION); #ifndef FASTSOUNDLIB - // -> CODE#0027 - // -> DESC="per-instrument volume ramping setup " - // if ((gdwSoundSetup & SNDMIX_DIRECTTODISK) - // || ((gdwSysInfo & (SYSMIX_ENABLEMMX|SYSMIX_FASTCPU)) - // && (gdwSoundSetup & SNDMIX_HQRESAMPLER) && (gnCPUUsage <= 50))) - if ((gdwSoundSetup & SNDMIX_DIRECTTODISK) - || ((gdwSysInfo & (SYSMIX_ENABLEMMX|SYSMIX_FASTCPU)) - && (gdwSoundSetup & SNDMIX_HQRESAMPLER) && (gnCPUUsage <= 50) && !(enableCustomRamp && pChn->pModInstrument->nVolRamp))) - // -! NEW_FEATURE#0027 +// if ((gdwSoundSetup & SNDMIX_DIRECTTODISK) +// || ((gdwSysInfo & (SYSMIX_ENABLEMMX|SYSMIX_FASTCPU)) +// && (gdwSoundSetup & SNDMIX_HQRESAMPLER) && (gnCPUUsage <= 50))) + if((gdwSoundSetup & SNDMIX_DIRECTTODISK) + || ((gdwSysInfo & (SYSMIX_ENABLEMMX | SYSMIX_FASTCPU)) && (gdwSoundSetup & SNDMIX_HQRESAMPLER) && (gnCPUUsage <= 50) && !enableCustomRamp)) { - if ((pChn->nRightVol|pChn->nLeftVol) && (pChn->nNewRightVol|pChn->nNewLeftVol) && (!(pChn->dwFlags & CHN_FASTVOLRAMP))) + if((pChn->nRightVol | pChn->nLeftVol) && (pChn->nNewRightVol | pChn->nNewLeftVol) && (!(pChn->dwFlags & CHN_FASTVOLRAMP))) { - nRampLength = m_nBufferCount; - if (nRampLength > (1 << (VOLUMERAMPPRECISION-1))) nRampLength = (1 << (VOLUMERAMPPRECISION-1)); - if (nRampLength < (LONG)gnVolumeRampSamples) nRampLength = gnVolumeRampSamples; + rampLength = m_nBufferCount; + if(rampLength > (1 << (VOLUMERAMPPRECISION-1))) + { + rampLength = (1 << (VOLUMERAMPPRECISION-1)); + } + if(rampLength < (LONG)globalRampLength) + { + rampLength = globalRampLength; + } } } #endif // FASTSOUNDLIB - pChn->nRightRamp = nRightDelta / nRampLength; - pChn->nLeftRamp = nLeftDelta / nRampLength; - pChn->nRightVol = pChn->nNewRightVol - ((pChn->nRightRamp * nRampLength) >> VOLUMERAMPPRECISION); - pChn->nLeftVol = pChn->nNewLeftVol - ((pChn->nLeftRamp * nRampLength) >> VOLUMERAMPPRECISION); + + pChn->nRightRamp = nRightDelta / rampLength; + pChn->nLeftRamp = nLeftDelta / rampLength; + pChn->nRightVol = pChn->nNewRightVol - ((pChn->nRightRamp * rampLength) >> VOLUMERAMPPRECISION); + pChn->nLeftVol = pChn->nNewLeftVol - ((pChn->nLeftRamp * rampLength) >> VOLUMERAMPPRECISION); + if (pChn->nRightRamp|pChn->nLeftRamp) { - pChn->nRampLength = nRampLength; + pChn->nRampLength = rampLength; } else { pChn->dwFlags &= ~CHN_VOLUMERAMP; @@ -2517,33 +2532,37 @@ void CSoundFile::ApplyGlobalVolume(int SoundBuffer[], long lTotalSampleCount) //--------------------------------------------------------------------------- { - long delta=0; - long step=0; + long delta = 0; + long step = 0; if (m_nGlobalVolumeDestination != m_nGlobalVolume) { //user has provided new global volume + const bool rampUp = m_nGlobalVolumeDestination > m_nGlobalVolume; m_nGlobalVolumeDestination = m_nGlobalVolume; - m_nSamplesToGlobalVolRampDest = gnVolumeRampSamples; + m_nSamplesToGlobalVolRampDest = rampUp ? gnVolumeRampUpSamples : gnVolumeRampDownSamples; } - if (m_nSamplesToGlobalVolRampDest>0) + long rampLength = m_nSamplesToGlobalVolRampDest; + + if (m_nSamplesToGlobalVolRampDest > 0) { // still some ramping left to do. long highResGlobalVolumeDestination = static_cast<long>(m_nGlobalVolumeDestination)<<VOLUMERAMPPRECISION; - delta = highResGlobalVolumeDestination-m_lHighResRampingGlobalVolume; - step = delta/static_cast<long>(m_nSamplesToGlobalVolRampDest); + delta = highResGlobalVolumeDestination - m_lHighResRampingGlobalVolume; + step = delta / static_cast<long>(m_nSamplesToGlobalVolRampDest); - UINT maxStep = max(50, (10000/gnVolumeRampSamples+1)); // define max step size as some factor of user defined ramping value: the lower the value, the more likely the click. - while (static_cast<UINT>(abs(step)) > maxStep) // if step is too big (might cause click), extend ramp length. + UINT maxStep = max(50, (10000 / (rampLength + 1))); // define max step size as some factor of user defined ramping value: the lower the value, the more likely the click. + while(abs(step) > maxStep) // if step is too big (might cause click), extend ramp length. { - m_nSamplesToGlobalVolRampDest += gnVolumeRampSamples; - step = delta/static_cast<long>(m_nSamplesToGlobalVolRampDest); + m_nSamplesToGlobalVolRampDest += rampLength; + step = delta / static_cast<long>(m_nSamplesToGlobalVolRampDest); } } - for (int pos=0; pos<lTotalSampleCount; pos++) { + for (int pos = 0; pos < lTotalSampleCount; pos++) + { if (m_nSamplesToGlobalVolRampDest > 0) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |