From: <rel...@us...> - 2009-01-17 22:48:58
|
Revision: 246 http://modplug.svn.sourceforge.net/modplug/?rev=246&view=rev Author: relabsoluness Date: 2009-01-17 21:37:21 +0000 (Sat, 17 Jan 2009) Log Message: ----------- (Patches from Jojo, merged somewhat modified) + Pattern tab: Ability to start playback with incoming MIDI note (see setup->MIDI) + Pattern tab: Duplicate channel (see channel header context menu). / General tab: VST volume slider is now disabled for S3M. / General tab: Initial channel volume controls are now enabled only for IT and MPTM. / Sample tab: Notes from MIDI should now be played like notes from keyboard. / Setup->MIDI: Minor text format changes. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/Sndfile.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2009-01-17 21:37:21 UTC (rev 246) @@ -203,20 +203,21 @@ m_SpinTempo.SetRange(specs.tempoMin, specs.tempoMax); m_SliderTempo.SetRange(0, specs.tempoMax - specs.tempoMin); - BOOL b = TRUE; - if (m_pSndFile->m_nType == MOD_TYPE_MOD) b = FALSE; - m_EditTempo.EnableWindow(b); - m_SpinTempo.EnableWindow(b); - m_EditSpeed.EnableWindow(b); - m_SpinSpeed.EnableWindow(b); - m_EditGlobalVol.EnableWindow(b); - m_SpinGlobalVol.EnableWindow(b); - m_EditVSTiVol.EnableWindow(b); - m_SpinVSTiVol.EnableWindow(b); - m_EditSamplePA.EnableWindow(b); - m_SpinSamplePA.EnableWindow(b); - m_SliderSamplePreAmp.EnableWindow(b); - m_SliderVSTiVol.EnableWindow(b); + const BOOL bIsNotMOD = (m_pSndFile->GetType() != MOD_TYPE_MOD); + const BOOL bIsNotMOD_S3M = ((bIsNotMOD) && (m_pSndFile->GetType() != MOD_TYPE_S3M)); + m_EditTempo.EnableWindow(bIsNotMOD); + m_SpinTempo.EnableWindow(bIsNotMOD); + m_EditSpeed.EnableWindow(bIsNotMOD); + m_SpinSpeed.EnableWindow(bIsNotMOD); + m_EditGlobalVol.EnableWindow(bIsNotMOD); + m_SpinGlobalVol.EnableWindow(bIsNotMOD); + m_EditSamplePA.EnableWindow(bIsNotMOD); + m_SpinSamplePA.EnableWindow(bIsNotMOD); + m_SliderSamplePreAmp.EnableWindow(bIsNotMOD); + m_SliderVSTiVol.EnableWindow(bIsNotMOD_S3M); + m_EditVSTiVol.EnableWindow(bIsNotMOD_S3M); + m_SpinVSTiVol.EnableWindow(bIsNotMOD_S3M); + //Note: Global volume slider is not disabled for MOD //on purpose(can be used to control play volume) Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2009-01-17 21:37:21 UTC (rev 246) @@ -229,6 +229,7 @@ #define MIDISETUP_RESPONDTOPLAYCONTROLMSGS 0x20 #define MIDISETUP_AMPLIFYVELOCITY 0x40 #define MIDISETUP_MIDIMACROCONTROL 0x80 +#define MIDISETUP_PLAYPATTERNONMIDIIN 0x100 Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2009-01-17 21:37:21 UTC (rev 246) @@ -1093,6 +1093,7 @@ ON_COMMAND(IDC_MIDI_MACRO_CONTROL, OnSettingsChanged) ON_COMMAND(IDC_MIDIVOL_TO_NOTEVOL, OnSettingsChanged) ON_COMMAND(IDC_MIDIPLAYCONTROL, OnSettingsChanged) + ON_COMMAND(IDC_MIDIPLAYPATTERNONMIDIIN, OnSettingsChanged) END_MESSAGE_MAP() @@ -1123,6 +1124,7 @@ if (m_dwMidiSetup & MIDISETUP_MIDIMACROCONTROL) CheckDlgButton(IDC_MIDI_MACRO_CONTROL, MF_CHECKED); if (m_dwMidiSetup & MIDISETUP_MIDIVOL_TO_NOTEVOL) CheckDlgButton(IDC_MIDIVOL_TO_NOTEVOL, MF_CHECKED); if (m_dwMidiSetup & MIDISETUP_RESPONDTOPLAYCONTROLMSGS) CheckDlgButton(IDC_MIDIPLAYCONTROL, MF_CHECKED); + if (m_dwMidiSetup & MIDISETUP_PLAYPATTERNONMIDIIN) CheckDlgButton(IDC_MIDIPLAYPATTERNONMIDIIN, MF_CHECKED); // Midi In Device if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO1)) != NULL) { @@ -1159,6 +1161,7 @@ if (IsDlgButtonChecked(IDC_MIDI_MACRO_CONTROL)) m_dwMidiSetup |= MIDISETUP_MIDIMACROCONTROL; if (IsDlgButtonChecked(IDC_MIDIVOL_TO_NOTEVOL)) m_dwMidiSetup |= MIDISETUP_MIDIVOL_TO_NOTEVOL; if (IsDlgButtonChecked(IDC_MIDIPLAYCONTROL)) m_dwMidiSetup |= MIDISETUP_RESPONDTOPLAYCONTROLMSGS; + if (IsDlgButtonChecked(IDC_MIDIPLAYPATTERNONMIDIIN)) m_dwMidiSetup |= MIDISETUP_PLAYPATTERNONMIDIIN; if ((combo = (CComboBox *)GetDlgItem(IDC_COMBO1)) != NULL) { Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2009-01-17 21:37:21 UTC (rev 246) @@ -393,11 +393,13 @@ BOOL bIT = ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK1+ichn*2), bEnable); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK2+ichn*2), bIT); - ::EnableWindow(m_sbVolume[ichn].m_hWnd, bEnable); + + ::EnableWindow(m_sbVolume[ichn].m_hWnd, bIT); + ::EnableWindow(m_spinVolume[ichn], bIT); + ::EnableWindow(m_sbPan[ichn].m_hWnd, bEnable && !(pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_MOD))); - ::EnableWindow(m_spinVolume[ichn], bEnable); ::EnableWindow(m_spinPan[ichn], bEnable && !(pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_MOD))); - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT1+ichn*2), bEnable); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT1+ichn*2), bIT); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT2+ichn*2), bEnable && !(pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_MOD))); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_EDIT9+ichn), ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)))); m_CbnEffects[ichn].EnableWindow(bEnable); Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2009-01-17 21:37:21 UTC (rev 246) @@ -99,6 +99,7 @@ ON_COMMAND(ID_PATTERN_SETINSTRUMENT, OnSetSelInstrument) ON_COMMAND(ID_PATTERN_ADDCHANNEL_FRONT, OnAddChannelFront) ON_COMMAND(ID_PATTERN_ADDCHANNEL_AFTER, OnAddChannelAfter) + ON_COMMAND(ID_PATTERN_DUPLICATECHANNEL, OnDuplicateChannel) ON_COMMAND(ID_PATTERN_REMOVECHANNEL, OnRemoveChannel) ON_COMMAND(ID_PATTERN_REMOVECHANNELDIALOG, OnRemoveChannelDialog) ON_COMMAND(ID_CURSORCOPY, OnCursorCopy) @@ -2505,6 +2506,46 @@ EndWaitCursor(); } +void CViewPattern::OnDuplicateChannel() +//------------------------------------ +{ + CModDoc *pModDoc = GetDocument(); + CSoundFile* pSndFile; + if (pModDoc == 0 || (pSndFile = pModDoc->GetSoundFile()) == 0) + return; + + if(AfxMessageBox(GetStrI18N(_TEXT("This affects all patterns, proceed?")), MB_YESNO) != IDYES) + return; + + const CHANNELINDEX nDupChn = GetChanFromCursor(m_nMenuParam); + if(nDupChn >= pSndFile->GetNumChannels()) + return; + + CHANNELINDEX nNumChnNew = pSndFile->GetNumChannels()+1; + // Create vector {0, 1,..., n-1, n, n, n+1, n+2, ..., nNumChnNew-2), where n = nDupChn. + vector<CHANNELINDEX> vecChns(nNumChnNew); + CHANNELINDEX i = 0; + for(i = 0; i<nDupChn+1; i++) + vecChns[i] = i; + vecChns[i] = nDupChn; + i++; + for(; i<nNumChnNew; i++) + vecChns[i] = i-1; + + nNumChnNew = pSndFile->ReArrangeChannels(vecChns); + + // Check that duplication happened and in that case update. + if(nNumChnNew == vecChns.size()) + { + pModDoc->SetModified(); + pModDoc->ClearUndo(); + pModDoc->UpdateAllViews(NULL, HINT_MODCHANNELS); + pModDoc->UpdateAllViews(NULL, HINT_MODTYPE); + SetCurrentPattern(m_nPattern); + } + +} + void CViewPattern::OnRunScript() //-------------------------------- { @@ -2945,6 +2986,11 @@ if(nVol < 0) nVol = -1; else nVol = (nVol + 3) / 4; //Value from [0,256] to [0,64] TempEnterNote(nNote, true, nVol); + + // continue playing as soon as MIDI notes are being received (request 2813) + if(pSndFile->IsPaused() && CMainFrame::m_dwMidiSetup & MIDISETUP_PLAYPATTERNONMIDIIN) + pModDoc->OnPatternPlayNoLoop(); + break; case 0xB: //Controller change @@ -4659,11 +4705,14 @@ //Not doing the menuentries if opted to use old style menu style. AppendMenu(hMenu, MF_SEPARATOR, 0, ""); + + AppendMenu(hMenu, MF_STRING, ID_PATTERN_DUPLICATECHANNEL, "Duplicate this channel"); + HMENU addChannelMenu = ::CreatePopupMenu(); AppendMenu(hMenu, MF_POPUP, (UINT)addChannelMenu, "Add channel\t"); AppendMenu(addChannelMenu, MF_STRING, ID_PATTERN_ADDCHANNEL_FRONT, "Before this channel"); AppendMenu(addChannelMenu, MF_STRING, ID_PATTERN_ADDCHANNEL_AFTER, "After this channel"); - + HMENU removeChannelMenu = ::CreatePopupMenu(); AppendMenu(hMenu, MF_POPUP, (UINT)removeChannelMenu, "Remove channel\t"); AppendMenu(removeChannelMenu, MF_STRING, ID_PATTERN_REMOVECHANNEL, "Remove this channel\t"); Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/View_pat.h 2009-01-17 21:37:21 UTC (rev 246) @@ -268,6 +268,7 @@ afx_msg void OnSetSelInstrument(); afx_msg void OnAddChannelFront(); afx_msg void OnAddChannelAfter(); + afx_msg void OnDuplicateChannel(); afx_msg void OnRemoveChannel(); afx_msg void OnRemoveChannelDialog(); afx_msg void OnPatternProperties(); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2009-01-17 21:37:21 UTC (rev 246) @@ -2307,7 +2307,8 @@ if (midibyte2 & 0x7F) { nVol = ApplyVolumeRelatedMidiSettings(dwMidiData, midivolume); - pModDoc->PlayNote(nNote, 0, m_nSample, FALSE, nVol); + //pModDoc->PlayNote(nNote, 0, m_nSample, FALSE, nVol); + PlayNote(nNote); } break; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-01-17 21:37:21 UTC (rev 246) @@ -462,49 +462,52 @@ IDD_MIDISETUP DIALOGEX 0, 0, 272, 281 STYLE DS_SETFONT | DS_3DLOOK | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Midi" +CAPTION "MIDI" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "Midi Recording",IDC_STATIC,5,5,260,185 - LTEXT "Midi Input Device:",IDC_STATIC,15,20,67,8 + GROUPBOX "MIDI Recording",IDC_STATIC,5,5,260,200 + LTEXT "MIDI Input Device:",IDC_STATIC,15,20,67,8 COMBOBOX IDC_COMBO1,15,30,120,74,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Midi Output Device:",IDC_STATIC,140,20,65,8,NOT + LTEXT "MIDI Output Device:",IDC_STATIC,140,20,65,8,NOT WS_VISIBLE COMBOBOX IDC_COMBO2,140,30,120,73,CBS_DROPDOWNLIST | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP CONTROL "Apply Octave Transpose on external midi keyboard", IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,55, 185,9 - CONTROL "Amplify Midi Velocity",IDC_CHECK3,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,15,90,113,9 + CONTROL "Amplify MIDI velocity",IDC_CHECK3,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,15,90,100,9 CONTROL "Record note velocity",IDC_CHECK1,"Button", - BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,15,75,132,9 + BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,15,75,100,9 CONTROL "Record Note Off (Instruments Only)",IDC_CHECK2,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,15,120,130,9 - GROUPBOX "Midi file import",IDC_STATIC,5,200,260,45 - LTEXT "Speed:",IDC_STATIC,15,220,24,8 - EDITTEXT IDC_EDIT1,45,220,39,12,ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX "MIDI file import",IDC_STATIC,5,210,260,45 + LTEXT "Speed:",IDC_STATIC,15,230,24,8 + EDITTEXT IDC_EDIT1,45,230,39,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | - UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,79,225, + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,79,235, 11,14 - LTEXT "Pattern size:",IDC_STATIC,115,220,40,8 - EDITTEXT IDC_EDIT2,165,220,39,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Pattern size:",IDC_STATIC,115,230,40,8 + EDITTEXT IDC_EDIT2,165,230,39,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | - UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,196,222, + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,196,232, 11,14 CONTROL "Pass MIDI to active instrument plugin (experimental)", IDC_MIDI_TO_PLUGIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 15,155,222,9 - CONTROL "Combine midi volume to note velocity", + 15,155,180,9 + CONTROL "Combine MIDI volume to note velocity", IDC_MIDIVOL_TO_NOTEVOL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,105,139,9 CONTROL "Respond to play/continue/stop song messages (untested)", IDC_MIDIPLAYCONTROL,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,15,170,202,9 + WS_TABSTOP,15,170,200,9 CONTROL "Record MIDI controller changes as MIDI macro changes (in pattern)", IDC_MIDI_MACRO_CONTROL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,140,226,9 + CONTROL "Continue song as soon as MIDI notes are being received", + IDC_MIDIPLAYPATTERNONMIDIIN,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,15,185,195,10 END IDD_LOADRAWSAMPLE DIALOG 0, 0, 168, 84 Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/mptrack/resource.h 2009-01-17 21:37:21 UTC (rev 246) @@ -824,6 +824,7 @@ #define IDC_TEXT_STRETCHPARAMS 2337 #define IDC_EDIT_STRETCHPARAMS 2338 #define IDC_MIDI_MACRO_CONTROL 2339 +#define IDC_MIDIPLAYPATTERNONMIDIIN 2340 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1048,6 +1049,7 @@ #define ID_VIEW_MIDIMAPPING 59211 #define ID_NETLINK_OPENMPTWIKI_GERMAN 59213 #define ID_NETLINK_MODARCHIVE 59214 +#define ID_PATTERN_DUPLICATECHANNEL 59216 // Next default values for new objects // @@ -1055,8 +1057,8 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 516 -#define _APS_NEXT_COMMAND_VALUE 59215 -#define _APS_NEXT_CONTROL_VALUE 2340 +#define _APS_NEXT_COMMAND_VALUE 59217 +#define _APS_NEXT_CONTROL_VALUE 2341 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-01-12 20:03:26 UTC (rev 245) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-01-17 21:37:21 UTC (rev 246) @@ -1453,7 +1453,8 @@ if(nRemainingChannels > GetModSpecifications().channelsMax || nRemainingChannels < GetModSpecifications().channelsMin) { - CString str = "Error: Bad newOrder vector in CSoundFile::ReArrangeChannels(...)"; + CString str; + str.Format(GetStrI18N(_TEXT("Can't apply change: Number of channels should be within [%u,%u]")), GetModSpecifications().channelsMin, GetModSpecifications().channelsMax); CMainFrame::GetMainFrame()->MessageBox(str , "ReArrangeChannels", MB_OK | MB_ICONINFORMATION); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |