You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(1) |
Feb
(2) |
Mar
(3) |
Apr
(2) |
May
(10) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(4) |
Aug
(6) |
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(4) |
2009 |
Jan
(9) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(6) |
Jun
(18) |
Jul
(33) |
Aug
(39) |
Sep
(33) |
Oct
(24) |
Nov
(23) |
Dec
(22) |
2010 |
Jan
(29) |
Feb
(32) |
Mar
(51) |
Apr
(17) |
May
(31) |
Jun
(21) |
Jul
(32) |
Aug
(28) |
Sep
(35) |
Oct
(27) |
Nov
(11) |
Dec
(13) |
2011 |
Jan
(14) |
Feb
(13) |
Mar
(27) |
Apr
(27) |
May
(28) |
Jun
(20) |
Jul
(43) |
Aug
(52) |
Sep
(66) |
Oct
(61) |
Nov
(11) |
Dec
(8) |
2012 |
Jan
(20) |
Feb
(30) |
Mar
(38) |
Apr
(21) |
May
(33) |
Jun
(21) |
Jul
(25) |
Aug
(9) |
Sep
(24) |
Oct
(42) |
Nov
(27) |
Dec
(41) |
2013 |
Jan
(20) |
Feb
(35) |
Mar
(156) |
Apr
(298) |
May
(258) |
Jun
(201) |
Jul
(105) |
Aug
(60) |
Sep
(193) |
Oct
(245) |
Nov
(280) |
Dec
(194) |
2014 |
Jan
(63) |
Feb
(202) |
Mar
(200) |
Apr
(23) |
May
(53) |
Jun
(105) |
Jul
(18) |
Aug
(26) |
Sep
(110) |
Oct
(187) |
Nov
(97) |
Dec
(74) |
2015 |
Jan
(45) |
Feb
(55) |
Mar
(116) |
Apr
(116) |
May
(193) |
Jun
(164) |
Jul
(50) |
Aug
(111) |
Sep
(98) |
Oct
(71) |
Nov
(103) |
Dec
(63) |
2016 |
Jan
(33) |
Feb
(101) |
Mar
(182) |
Apr
(139) |
May
(140) |
Jun
(103) |
Jul
(165) |
Aug
(286) |
Sep
(208) |
Oct
(127) |
Nov
(97) |
Dec
(54) |
2017 |
Jan
(64) |
Feb
(335) |
Mar
(202) |
Apr
(212) |
May
(139) |
Jun
(127) |
Jul
(294) |
Aug
(154) |
Sep
(170) |
Oct
(152) |
Nov
(156) |
Dec
(62) |
2018 |
Jan
(168) |
Feb
(237) |
Mar
(196) |
Apr
(174) |
May
(174) |
Jun
(161) |
Jul
(127) |
Aug
(88) |
Sep
(149) |
Oct
(66) |
Nov
(52) |
Dec
(135) |
2019 |
Jan
(146) |
Feb
(126) |
Mar
(104) |
Apr
(58) |
May
(60) |
Jun
(28) |
Jul
(197) |
Aug
(129) |
Sep
(141) |
Oct
(148) |
Nov
(63) |
Dec
(100) |
2020 |
Jan
(74) |
Feb
(37) |
Mar
(59) |
Apr
(154) |
May
(194) |
Jun
(133) |
Jul
(313) |
Aug
(197) |
Sep
(49) |
Oct
(162) |
Nov
(143) |
Dec
(57) |
2021 |
Jan
(120) |
Feb
(107) |
Mar
(314) |
Apr
(157) |
May
(524) |
Jun
(169) |
Jul
(72) |
Aug
(133) |
Sep
(135) |
Oct
(146) |
Nov
(198) |
Dec
(325) |
2022 |
Jan
(409) |
Feb
(249) |
Mar
(138) |
Apr
(95) |
May
(102) |
Jun
(221) |
Jul
(66) |
Aug
(120) |
Sep
(192) |
Oct
(131) |
Nov
(53) |
Dec
(171) |
2023 |
Jan
(357) |
Feb
(82) |
Mar
(168) |
Apr
(218) |
May
(196) |
Jun
(86) |
Jul
(115) |
Aug
(49) |
Sep
(190) |
Oct
(102) |
Nov
(45) |
Dec
(76) |
2024 |
Jan
(86) |
Feb
(50) |
Mar
(324) |
Apr
(209) |
May
(197) |
Jun
(232) |
Jul
(194) |
Aug
(247) |
Sep
(219) |
Oct
(266) |
Nov
(328) |
Dec
(304) |
2025 |
Jan
(191) |
Feb
(115) |
Mar
(137) |
Apr
(32) |
May
(126) |
Jun
(403) |
Jul
(202) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@op...> - 2024-11-07 22:48:55
|
Author: sagamusix Date: Thu Nov 7 23:48:41 2024 New Revision: 22107 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22107 Log: [Fix] MED: Apparently in MED SoundStudio, when using 1-64ch software mixing mode, tempos 1-10 in SPD mode behave strangely (first 8 values all result in ~157 BPM, 8 upwards results in "normal" tempo). Fixes "K-SaveMe" (https://www.un4seen.com/forum/?topic=15448.msg144080#msg144080). Modified: trunk/OpenMPT/soundlib/Load_med.cpp Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Thu Nov 7 22:11:52 2024 (r22106) +++ trunk/OpenMPT/soundlib/Load_med.cpp Thu Nov 7 23:48:41 2024 (r22107) @@ -391,7 +391,7 @@ MPT_BINARY_STRUCT(MMDDump, 10) -static TEMPO MMDTempoToBPM(uint32 tempo, bool is8Ch, bool bpmMode, uint8 rowsPerBeat) +static TEMPO MMDTempoToBPM(uint32 tempo, bool is8Ch, bool softwareMixing, bool bpmMode, uint8 rowsPerBeat) { if(bpmMode && !is8Ch) { @@ -405,10 +405,14 @@ // MED Soundstudio uses these tempos when importing old files static constexpr uint8 tempos[10] = {179, 164, 152, 141, 131, 123, 116, 110, 104, 99}; return TEMPO(tempos[tempo - 1], 0); - } else if(tempo > 0 && tempo <= 10) + } else if(!softwareMixing && tempo > 0 && tempo <= 10) { // SoundTracker compatible tempo return TEMPO((6.0 * 1773447.0 / 14500.0) / tempo); + } else if(softwareMixing && tempo < 8) + { + // Observed in MED SoundStudio 1.03 with 1-64ch mixing mode and SPD tempo mode (bug?) + return TEMPO(157.86); } return TEMPO(tempo / 0.264); @@ -421,8 +425,8 @@ const CHANNELINDEX numTracks; const uint8 version; const uint8 rowsPerBeat; - const bool hardwareMixSamples : 1; const bool is8Ch : 1; + const bool softwareMixing : 1; const bool bpmMode : 1; const bool volHex : 1; }; @@ -469,7 +473,7 @@ m.param = 0x70; } else { - uint16 tempo = mpt::saturate_round<uint16>(MMDTempoToBPM(param, ctx.is8Ch, ctx.bpmMode, ctx.rowsPerBeat).ToDouble()); + uint16 tempo = mpt::saturate_round<uint16>(MMDTempoToBPM(param, ctx.is8Ch, ctx.softwareMixing, ctx.bpmMode, ctx.rowsPerBeat).ToDouble()); if(tempo <= Util::MaxValueOfType(m.param)) { m.param = static_cast<ModCommand::PARAM>(tempo); @@ -1448,8 +1452,9 @@ const bool volHex = (songHeader.flags & MMDSong::FLAG_VOLHEX) != 0; const bool is8Ch = (songHeader.flags & MMDSong::FLAG_8CHANNEL) != 0; const bool bpmMode = (songHeader.flags2 & MMDSong::FLAG2_BPM) != 0; + const bool softwareMixing = (songHeader.flags2 & MMDSong::FLAG2_MIX) != 0; const uint8 rowsPerBeat = 1 + (songHeader.flags2 & MMDSong::FLAG2_BMASK); - order.SetDefaultTempo(MMDTempoToBPM(songHeader.defaultTempo, is8Ch, bpmMode, rowsPerBeat)); + order.SetDefaultTempo(MMDTempoToBPM(songHeader.defaultTempo, is8Ch, softwareMixing, bpmMode, rowsPerBeat)); order.SetDefaultSpeed(Clamp<uint8, uint8>(songHeader.tempo2, 1, 32)); if(bpmMode) { @@ -1625,7 +1630,7 @@ pattern.SetName(patName); LimitMax(numTracks, GetNumChannels()); - TranslateMEDPatternContext context{transpose, numTracks, version, rowsPerBeat, hardwareMixSamples, is8Ch, bpmMode, volHex}; + TranslateMEDPatternContext context{transpose, numTracks, version, rowsPerBeat, is8Ch, softwareMixing, bpmMode, volHex}; needInstruments |= TranslateMEDPattern(file, cmdExt, pattern, context, false); for(uint16 page = 0; page < numPages; page++) |
From: <sv...@op...> - 2024-11-07 21:12:06
|
Author: sagamusix Date: Thu Nov 7 22:11:52 2024 New Revision: 22106 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22106 Log: [New] Pattern tab: Can now toggle instrument / volume / effect column visibility independently (https://bugs.openmpt.org/view.php?id=1523). Modified: trunk/OpenMPT/mptrack/Childfrm.h trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/PatternCursor.h trunk/OpenMPT/mptrack/PatternFindReplace.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/WindowMessages.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/res/originals/pattern_toolbar.pfi trunk/OpenMPT/mptrack/res/pattern_toolbar.png trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/Childfrm.h ============================================================================== --- trunk/OpenMPT/mptrack/Childfrm.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/Childfrm.h Thu Nov 7 22:11:52 2024 (r22106) @@ -37,9 +37,9 @@ PATTERNINDEX nPattern = 0; PatternCursor cursor = 0; PatternRect selection; - PatternCursor::Columns nDetailLevel = PatternCursor::firstColumn; ORDERINDEX nOrder = 0; ORDERINDEX initialOrder = ORDERINDEX_INVALID; + std::bitset<PatternCursor::numColumns> visibleColumns = std::bitset<PatternCursor::numColumns>{}.set(); bool initialized = false; }; Modified: trunk/OpenMPT/mptrack/CommandSet.cpp ============================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/CommandSet.cpp Thu Nov 7 22:11:52 2024 (r22106) @@ -1395,6 +1395,9 @@ {2100, kcGotoParamColumn, _T("Go to effect parameter column")}, {2101, kcContextMenu, _T("Open Context Menu")}, {2102, kcOrderlistStreamExport, _T("Stream Export")}, + {2103, kcToggleVisibilityInstrColumn, _T("Toggle instrument column visibility") }, + {2104, kcToggleVisibilityVolumeColumn, _T("Toggle volume column visibility") }, + {2105, kcToggleVisibilityEffectColumn, _T("Toggle effect column visibility") }, }; // clang-format on Modified: trunk/OpenMPT/mptrack/CommandSet.h ============================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/CommandSet.h Thu Nov 7 22:11:52 2024 (r22106) @@ -337,7 +337,10 @@ kcToggleOverflowPaste, kcToggleNoteOffRecordPC, kcToggleNoteOffRecordMIDI, - kcEndPatternEditMisc = kcToggleNoteOffRecordMIDI, + kcToggleVisibilityInstrColumn, + kcToggleVisibilityVolumeColumn, + kcToggleVisibilityEffectColumn, + kcEndPatternEditMisc = kcToggleVisibilityEffectColumn, kcStartChannelKeys, kcChannelMute = kcStartChannelKeys, Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp Thu Nov 7 22:11:52 2024 (r22106) @@ -19,6 +19,7 @@ #include "Mainfrm.h" #include "Moddoc.h" #include "Mptrack.h" +#include "PatternCursor.h" #include "PatternEditorDialogs.h" #include "Reporting.h" #include "resource.h" @@ -41,47 +42,49 @@ ON_WM_KEYDOWN() ON_WM_VSCROLL() ON_WM_XBUTTONUP() - ON_COMMAND(IDC_BUTTON1, &CCtrlPatterns::OnSequenceNext) - ON_COMMAND(IDC_BUTTON2, &CCtrlPatterns::OnSequencePrev) - ON_COMMAND(ID_PLAYER_PAUSE, &CCtrlPatterns::OnPlayerPause) - ON_COMMAND(IDC_PATTERN_NEW, &CCtrlPatterns::OnPatternNew) - ON_COMMAND(IDC_PATTERN_STOP, &CCtrlPatterns::OnPatternStop) - ON_COMMAND(IDC_PATTERN_PLAY, &CCtrlPatterns::OnPatternPlay) - ON_COMMAND(IDC_PATTERN_PLAYFROMSTART, &CCtrlPatterns::OnPatternPlayFromStart) - ON_COMMAND(IDC_PATTERN_RECORD, &CCtrlPatterns::OnPatternRecord) - ON_COMMAND(IDC_PATTERN_LOOP, &CCtrlPatterns::OnChangeLoopStatus) - ON_COMMAND(ID_PATTERN_PLAYROW, &CCtrlPatterns::OnPatternPlayRow) - ON_COMMAND(ID_PATTERN_CHANNELMANAGER, &CCtrlPatterns::OnChannelManager) - ON_COMMAND(ID_PATTERN_VUMETERS, &CCtrlPatterns::OnPatternVUMeters) - ON_COMMAND(ID_VIEWPLUGNAMES, &CCtrlPatterns::OnPatternViewPlugNames) - ON_COMMAND(ID_NEXTINSTRUMENT, &CCtrlPatterns::OnNextInstrument) - ON_COMMAND(ID_PREVINSTRUMENT, &CCtrlPatterns::OnPrevInstrument) - ON_COMMAND(IDC_PATTERN_FOLLOWSONG, &CCtrlPatterns::OnFollowSong) - ON_COMMAND(ID_PATTERN_CHORDEDIT, &CCtrlPatterns::OnChordEditor) - ON_COMMAND(ID_PATTERN_PROPERTIES, &CCtrlPatterns::OnPatternProperties) - ON_COMMAND(ID_PATTERN_EXPAND, &CCtrlPatterns::OnPatternExpand) - ON_COMMAND(ID_PATTERN_SHRINK, &CCtrlPatterns::OnPatternShrink) - ON_COMMAND(ID_PATTERN_AMPLIFY, &CCtrlPatterns::OnPatternAmplify) - ON_COMMAND(ID_ORDERLIST_NEW, &CCtrlPatterns::OnPatternNew) - ON_COMMAND(ID_ORDERLIST_COPY, &CCtrlPatterns::OnPatternDuplicate) - ON_COMMAND(ID_ORDERLIST_MERGE, &CCtrlPatterns::OnPatternMerge) - ON_COMMAND(ID_PATTERNCOPY, &CCtrlPatterns::OnPatternCopy) - ON_COMMAND(ID_PATTERNPASTE, &CCtrlPatterns::OnPatternPaste) - ON_COMMAND(ID_EDIT_UNDO, &CCtrlPatterns::OnEditUndo) - ON_COMMAND(ID_PATTERNDETAIL_LO, &CCtrlPatterns::OnDetailLo) - ON_COMMAND(ID_PATTERNDETAIL_MED, &CCtrlPatterns::OnDetailMed) - ON_COMMAND(ID_PATTERNDETAIL_HI, &CCtrlPatterns::OnDetailHi) - ON_COMMAND(ID_OVERFLOWPASTE, &CCtrlPatterns::OnToggleOverflowPaste) - ON_CBN_DROPDOWN(IDC_COMBO_INSTRUMENT, &CCtrlPatterns::OnOpenInstrumentDropdown) + ON_COMMAND(IDC_BUTTON1, &CCtrlPatterns::OnSequenceNext) + ON_COMMAND(IDC_BUTTON2, &CCtrlPatterns::OnSequencePrev) + ON_COMMAND(ID_PLAYER_PAUSE, &CCtrlPatterns::OnPlayerPause) + ON_COMMAND(IDC_PATTERN_NEW, &CCtrlPatterns::OnPatternNew) + ON_COMMAND(IDC_PATTERN_STOP, &CCtrlPatterns::OnPatternStop) + ON_COMMAND(IDC_PATTERN_PLAY, &CCtrlPatterns::OnPatternPlay) + ON_COMMAND(IDC_PATTERN_PLAYFROMSTART, &CCtrlPatterns::OnPatternPlayFromStart) + ON_COMMAND(IDC_PATTERN_RECORD, &CCtrlPatterns::OnPatternRecord) + ON_COMMAND(IDC_PATTERN_LOOP, &CCtrlPatterns::OnChangeLoopStatus) + ON_COMMAND(ID_PATTERN_PLAYROW, &CCtrlPatterns::OnPatternPlayRow) + ON_COMMAND(ID_PATTERN_CHANNELMANAGER, &CCtrlPatterns::OnChannelManager) + ON_COMMAND(ID_PATTERN_VUMETERS, &CCtrlPatterns::OnPatternVUMeters) + ON_COMMAND(ID_VIEWPLUGNAMES, &CCtrlPatterns::OnPatternViewPlugNames) + ON_COMMAND(ID_NEXTINSTRUMENT, &CCtrlPatterns::OnNextInstrument) + ON_COMMAND(ID_PREVINSTRUMENT, &CCtrlPatterns::OnPrevInstrument) + ON_COMMAND(IDC_PATTERN_FOLLOWSONG, &CCtrlPatterns::OnFollowSong) + ON_COMMAND(ID_PATTERN_CHORDEDIT, &CCtrlPatterns::OnChordEditor) + ON_COMMAND(ID_PATTERN_PROPERTIES, &CCtrlPatterns::OnPatternProperties) + ON_COMMAND(ID_PATTERN_EXPAND, &CCtrlPatterns::OnPatternExpand) + ON_COMMAND(ID_PATTERN_SHRINK, &CCtrlPatterns::OnPatternShrink) + ON_COMMAND(ID_PATTERN_AMPLIFY, &CCtrlPatterns::OnPatternAmplify) + ON_COMMAND(ID_ORDERLIST_NEW, &CCtrlPatterns::OnPatternNew) + ON_COMMAND(ID_ORDERLIST_COPY, &CCtrlPatterns::OnPatternDuplicate) + ON_COMMAND(ID_ORDERLIST_MERGE, &CCtrlPatterns::OnPatternMerge) + ON_COMMAND(ID_PATTERNCOPY, &CCtrlPatterns::OnPatternCopy) + ON_COMMAND(ID_PATTERNPASTE, &CCtrlPatterns::OnPatternPaste) + ON_COMMAND(ID_EDIT_UNDO, &CCtrlPatterns::OnEditUndo) + ON_COMMAND(ID_PATTERNDETAIL_DROPDOWN, &CCtrlPatterns::OnDetailSwitch) + ON_COMMAND(ID_PATTERNDETAIL_INSTR, &CCtrlPatterns::OnDetailInstr) + ON_COMMAND(ID_PATTERNDETAIL_VOLUME, &CCtrlPatterns::OnDetailVolume) + ON_COMMAND(ID_PATTERNDETAIL_EFFECT, &CCtrlPatterns::OnDetailEffect) + ON_COMMAND(ID_OVERFLOWPASTE, &CCtrlPatterns::OnToggleOverflowPaste) + ON_CBN_DROPDOWN(IDC_COMBO_INSTRUMENT, &CCtrlPatterns::OnOpenInstrumentDropdown) ON_CBN_SELENDCANCEL(IDC_COMBO_INSTRUMENT, &CCtrlPatterns::OnCancelInstrumentDropdown) - ON_CBN_SELENDOK(IDC_COMBO_INSTRUMENT, &CCtrlPatterns::OnInstrumentChanged) - ON_COMMAND(IDC_PATINSTROPLUGGUI, &CCtrlPatterns::TogglePluginEditor) - ON_EN_CHANGE(IDC_EDIT_SPACING, &CCtrlPatterns::OnSpacingChanged) - ON_EN_CHANGE(IDC_EDIT_PATTERNNAME, &CCtrlPatterns::OnPatternNameChanged) - ON_EN_CHANGE(IDC_EDIT_SEQUENCE_NAME, &CCtrlPatterns::OnSequenceNameChanged) - ON_EN_CHANGE(IDC_EDIT_SEQNUM, &CCtrlPatterns::OnSequenceNumChanged) - ON_UPDATE_COMMAND_UI(IDC_PATTERN_RECORD,&CCtrlPatterns::OnUpdateRecord) - ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CCtrlPatterns::OnToolTipText) + ON_CBN_SELENDOK(IDC_COMBO_INSTRUMENT, &CCtrlPatterns::OnInstrumentChanged) + ON_COMMAND(IDC_PATINSTROPLUGGUI, &CCtrlPatterns::TogglePluginEditor) + ON_EN_CHANGE(IDC_EDIT_SPACING, &CCtrlPatterns::OnSpacingChanged) + ON_EN_CHANGE(IDC_EDIT_PATTERNNAME, &CCtrlPatterns::OnPatternNameChanged) + ON_EN_CHANGE(IDC_EDIT_SEQUENCE_NAME, &CCtrlPatterns::OnSequenceNameChanged) + ON_EN_CHANGE(IDC_EDIT_SEQNUM, &CCtrlPatterns::OnSequenceNumChanged) + ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CCtrlPatterns::OnTbnDropDownToolBar) + ON_UPDATE_COMMAND_UI(IDC_PATTERN_RECORD, &CCtrlPatterns::OnUpdateRecord) + ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CCtrlPatterns::OnToolTipText) //}}AFX_MSG_MAP ON_WM_MOUSEWHEEL() END_MESSAGE_MAP() @@ -140,7 +143,8 @@ m_OrderList.Init(rcOrderList, pMainFrm->GetGUIFont()); // Toolbar buttons m_ToolBar.Init(CMainFrame::GetMainFrame()->m_PatternIcons, CMainFrame::GetMainFrame()->m_PatternIconsDisabled); - m_ToolBar.AddButton(IDC_PATTERN_NEW, TIMAGE_PATTERN_NEW); + m_ToolBar.SetExtendedStyle(m_ToolBar.GetExtendedStyle() | TBSTYLE_EX_DRAWDDARROWS); + m_ToolBar.AddButton(IDC_PATTERN_NEW, TIMAGE_PATTERN_NEW, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN); m_ToolBar.AddButton(IDC_PATTERN_PLAY, TIMAGE_PATTERN_PLAY); m_ToolBar.AddButton(IDC_PATTERN_PLAYFROMSTART, TIMAGE_PATTERN_RESTART); m_ToolBar.AddButton(IDC_PATTERN_STOP, TIMAGE_PATTERN_STOP); @@ -160,9 +164,7 @@ m_ToolBar.AddButton(ID_PATTERN_SHRINK, TIMAGE_PATTERN_SHRINK); // m_ToolBar.AddButton(ID_PATTERN_AMPLIFY, TIMAGE_SAMPLE_AMPLIFY); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); - m_ToolBar.AddButton(ID_PATTERNDETAIL_LO, TIMAGE_PATTERN_DETAIL_LO, TBSTYLE_CHECK, TBSTATE_ENABLED); - m_ToolBar.AddButton(ID_PATTERNDETAIL_MED, TIMAGE_PATTERN_DETAIL_MED, TBSTYLE_CHECK, TBSTATE_ENABLED); - m_ToolBar.AddButton(ID_PATTERNDETAIL_HI, TIMAGE_PATTERN_DETAIL_HI, TBSTYLE_CHECK, TBSTATE_ENABLED | TBSTATE_CHECKED); + m_ToolBar.AddButton(ID_PATTERNDETAIL_DROPDOWN, TIMAGE_PATTERN_DETAIL_LO, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN); m_ToolBar.AddButton(ID_SEPARATOR, 0, TBSTYLE_SEP); m_ToolBar.AddButton(ID_OVERFLOWPASTE, TIMAGE_PATTERN_OVERFLOWPASTE, TBSTYLE_CHECK, ((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED); @@ -443,7 +445,6 @@ SendViewMessage(VIEWMSG_FOLLOWSONG, IsDlgButtonChecked(IDC_PATTERN_FOLLOWSONG)); SendViewMessage(VIEWMSG_PATTERNLOOP, (m_sndFile.m_PlayState.m_flags[SONG_PATTERNLOOP]) ? TRUE : FALSE); OnSpacingChanged(); - SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel); SendViewMessage(VIEWMSG_SETRECORD, m_bRecord); SendViewMessage(VIEWMSG_SETVUMETERS, m_bVUMeters); SendViewMessage(VIEWMSG_SETPLUGINNAMES, m_bPluginNames); @@ -1027,21 +1028,20 @@ void CCtrlPatterns::OnPatternPlay() { - m_modDoc.OnPatternPlay(); + if(CMainFrame::GetMainFrame()->GetInputHandler()->ShiftPressed()) + m_modDoc.OnPatternPlayNoLoop(); + else + m_modDoc.OnPatternPlay(); SwitchToView(); } -//rewbs.playSongFromCursor -void CCtrlPatterns::OnPatternPlayNoLoop() -{ - m_modDoc.OnPatternPlayNoLoop(); - SwitchToView(); -} -//end rewbs.playSongFromCursor void CCtrlPatterns::OnPatternPlayFromStart() { - m_modDoc.OnPatternRestart(); + if(CMainFrame::GetMainFrame()->GetInputHandler()->ShiftPressed()) + m_modDoc.OnPatternRestart(false); + else + m_modDoc.OnPatternRestart(); SwitchToView(); } @@ -1207,47 +1207,76 @@ } -void CCtrlPatterns::OnDetailLo() +void CCtrlPatterns::OnTbnDropDownToolBar(NMHDR *pNMHDR, LRESULT *pResult) { - m_ToolBar.SetState(ID_PATTERNDETAIL_LO, TBSTATE_CHECKED | TBSTATE_ENABLED); - if(m_nDetailLevel != PatternCursor::instrColumn) - { - m_nDetailLevel = PatternCursor::instrColumn; - m_ToolBar.SetState(ID_PATTERNDETAIL_MED, TBSTATE_ENABLED); - m_ToolBar.SetState(ID_PATTERNDETAIL_HI, TBSTATE_ENABLED); - SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel); + CInputHandler *ih = CMainFrame::GetInputHandler(); + NMTOOLBAR *pToolBar = reinterpret_cast<NMTOOLBAR *>(pNMHDR); + ClientToScreen(&(pToolBar->rcButton)); // TrackPopupMenu uses screen coords + const int offset = Util::ScalePixels(4, m_hWnd); // Compared to the main toolbar, the offset seems to be a bit wrong here...? + int x = pToolBar->rcButton.left + offset, y = pToolBar->rcButton.bottom + offset; + const auto visibleColumns = std::bitset<PatternCursor::numColumns>{static_cast<unsigned long>(SendViewMessage(VIEWMSG_GETDETAIL))}; + CMenu menu; + switch(pToolBar->iItem) + { + case IDC_PATTERN_NEW: + menu.CreatePopupMenu(); + menu.AppendMenu(MF_STRING, ID_ORDERLIST_COPY, ih->GetKeyTextFromCommand(kcDuplicatePattern, _T("&Duplicate Pattern"))); + menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); + menu.DestroyMenu(); + break; + + case ID_PATTERNDETAIL_DROPDOWN: + menu.CreatePopupMenu(); + menu.AppendMenu(MF_STRING | (visibleColumns[PatternCursor::instrColumn] ? MF_CHECKED : 0), ID_PATTERNDETAIL_INSTR, ih->GetKeyTextFromCommand(kcToggleVisibilityInstrColumn, _T("Show &Instrument Column"))); + menu.AppendMenu(MF_STRING | (visibleColumns[PatternCursor::volumeColumn] ? MF_CHECKED : 0), ID_PATTERNDETAIL_VOLUME, ih->GetKeyTextFromCommand(kcToggleVisibilityVolumeColumn, _T("Show &Volume Column"))); + menu.AppendMenu(MF_STRING | (visibleColumns[PatternCursor::effectColumn] ? MF_CHECKED : 0), ID_PATTERNDETAIL_EFFECT, ih->GetKeyTextFromCommand(kcToggleVisibilityEffectColumn, _T("Show &Effect Column"))); + menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); + menu.DestroyMenu(); + break; } + *pResult = 0; +} + + +void CCtrlPatterns::OnDetailSwitch() +{ + // Cycle through all bit combinations + auto visibleColumns = std::bitset<PatternCursor::numColumns>{static_cast<unsigned long>(SendViewMessage(VIEWMSG_GETDETAIL) + 1)}; + visibleColumns.set(PatternCursor::noteColumn); + visibleColumns.set(PatternCursor::paramColumn, visibleColumns[PatternCursor::effectColumn]); + SendViewMessage(VIEWMSG_SETDETAIL, visibleColumns.to_ulong()); SwitchToView(); } -void CCtrlPatterns::OnDetailMed() +void CCtrlPatterns::OnDetailInstr() { - m_ToolBar.SetState(ID_PATTERNDETAIL_MED, TBSTATE_CHECKED | TBSTATE_ENABLED); - if(m_nDetailLevel != PatternCursor::volumeColumn) - { - m_nDetailLevel = PatternCursor::volumeColumn; - m_ToolBar.SetState(ID_PATTERNDETAIL_LO, TBSTATE_ENABLED); - m_ToolBar.SetState(ID_PATTERNDETAIL_HI, TBSTATE_ENABLED); - SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel); - } + auto visibleColumns = std::bitset<PatternCursor::numColumns>{static_cast<unsigned long>(SendViewMessage(VIEWMSG_GETDETAIL))}; + visibleColumns.flip(PatternCursor::instrColumn); + SendViewMessage(VIEWMSG_SETDETAIL, visibleColumns.to_ulong()); SwitchToView(); } -void CCtrlPatterns::OnDetailHi() +void CCtrlPatterns::OnDetailVolume() { - m_ToolBar.SetState(ID_PATTERNDETAIL_HI, TBSTATE_CHECKED | TBSTATE_ENABLED); - if(m_nDetailLevel != PatternCursor::lastColumn) - { - m_nDetailLevel = PatternCursor::lastColumn; - m_ToolBar.SetState(ID_PATTERNDETAIL_LO, TBSTATE_ENABLED); - m_ToolBar.SetState(ID_PATTERNDETAIL_MED, TBSTATE_ENABLED); - SendViewMessage(VIEWMSG_SETDETAIL, m_nDetailLevel); - } + auto visibleColumns = std::bitset<PatternCursor::numColumns>{static_cast<unsigned long>(SendViewMessage(VIEWMSG_GETDETAIL))}; + visibleColumns.flip(PatternCursor::volumeColumn); + SendViewMessage(VIEWMSG_SETDETAIL, visibleColumns.to_ulong()); + SwitchToView(); +} + + +void CCtrlPatterns::OnDetailEffect() +{ + auto visibleColumns = std::bitset<PatternCursor::numColumns>{static_cast<unsigned long>(SendViewMessage(VIEWMSG_GETDETAIL))}; + visibleColumns.flip(PatternCursor::effectColumn); + visibleColumns.flip(PatternCursor::paramColumn); + SendViewMessage(VIEWMSG_SETDETAIL, visibleColumns.to_ulong()); SwitchToView(); } + void CCtrlPatterns::OnToggleOverflowPaste() { TrackerSettings::Instance().m_dwPatternSetup ^= PATTERN_OVERFLOWPASTE; @@ -1319,8 +1348,8 @@ switch(id) { case IDC_PATTERN_NEW: s = _T("Insert Pattern"); cmd = kcNewPattern; break; - case IDC_PATTERN_PLAY: s = _T("Play Pattern"); cmd = kcPlayPatternFromCursor; break; - case IDC_PATTERN_PLAYFROMSTART: s = _T("Replay Pattern"); cmd = kcPlayPatternFromStart; break; + case IDC_PATTERN_PLAY: s = _T("Play Pattern (Shift-click to play song from cursor)"); cmd = kcPlayPatternFromCursor; break; + case IDC_PATTERN_PLAYFROMSTART: s = _T("Replay Pattern (Shift-click to play song from start of pattern)"); cmd = kcPlayPatternFromStart; break; case IDC_PATTERN_STOP: s = _T("Stop"); cmd = kcPauseSong; break; case ID_PATTERN_PLAYROW: s = _T("Play Row"); cmd = kcPatternPlayRow; break; case IDC_PATTERN_RECORD: s = _T("Record"); cmd = kcPatternRecord; break; @@ -1338,9 +1367,6 @@ case ID_PATTERN_PROPERTIES: s = _T("Pattern Properties"); cmd = kcShowPatternProperties; break; case ID_PATTERN_EXPAND: s = _T("Expand Pattern"); break; case ID_PATTERN_SHRINK: s = _T("Shrink Pattern"); break; - case ID_PATTERNDETAIL_LO: s = _T("Low Pattern Detail Level"); break; - case ID_PATTERNDETAIL_MED: s = _T("Medium Pattern Detail Level"); break; - case ID_PATTERNDETAIL_HI: s = _T("High Pattern Detail Level"); break; case ID_OVERFLOWPASTE: s = _T("Toggle Overflow Paste"); cmd = kcToggleOverflowPaste; break; case IDC_PATTERN_LOOP: s = _T("Toggle Loop Pattern"); cmd = kcChangeLoopStatus; break; case IDC_PATTERN_FOLLOWSONG: s = _T("Toggle Follow Song"); cmd = kcToggleFollowSong; break; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h Thu Nov 7 22:11:52 2024 (r22106) @@ -14,7 +14,6 @@ #include "openmpt/all/BuildSettings.hpp" #include "Globals.h" -#include "PatternCursor.h" OPENMPT_NAMESPACE_BEGIN @@ -198,7 +197,6 @@ CSpinButtonCtrl m_SpinInstrument, m_SpinSpacing, m_SpinSequence; CModControlBar m_ToolBar; INSTRUMENTINDEX m_nInstrument = 0; - PatternCursor::Columns m_nDetailLevel = PatternCursor::lastColumn; // Visible Columns bool m_bRecord = false, m_bVUMeters = false, m_bPluginNames = false; bool m_instrDropdownOpen = false; @@ -228,7 +226,8 @@ //}}AFX_VIRTUAL protected: //{{AFX_MSG(CCtrlPatterns) - afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); + afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar); + afx_msg void OnTbnDropDownToolBar(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnSequenceNext(); afx_msg void OnSequencePrev(); afx_msg void OnChannelManager(); @@ -239,7 +238,6 @@ afx_msg void OnPatternMerge(); afx_msg void OnPatternStop(); afx_msg void OnPatternPlay(); - afx_msg void OnPatternPlayNoLoop(); afx_msg void OnPatternPlayRow(); afx_msg void OnPatternPlayFromStart(); afx_msg void OnPatternRecord(); @@ -262,9 +260,10 @@ afx_msg void OnPatternNameChanged(); afx_msg void OnSequenceNameChanged(); afx_msg void OnChordEditor(); - afx_msg void OnDetailLo(); - afx_msg void OnDetailMed(); - afx_msg void OnDetailHi(); + afx_msg void OnDetailSwitch(); + afx_msg void OnDetailInstr(); + afx_msg void OnDetailVolume(); + afx_msg void OnDetailEffect(); afx_msg void OnEditUndo(); afx_msg void OnUpdateRecord(CCmdUI *pCmdUI); afx_msg void TogglePluginEditor(); Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp Thu Nov 7 22:11:52 2024 (r22106) @@ -1140,30 +1140,24 @@ switch(pToolBar->iItem) { case IDC_SAMPLE_NEW: - { - menu.CreatePopupMenu(); - menu.AppendMenu(MF_STRING, IDC_SAMPLE_DUPLICATE, ih->GetKeyTextFromCommand(kcSampleDuplicate, m_sndFile.GetSample(m_nSample).uFlags[CHN_ADLIB] ? _T("&Duplicate Instrument") : _T("&Duplicate Sample"))); - menu.AppendMenu(MF_STRING | (m_sndFile.SupportsOPL() ? 0 : MF_DISABLED), IDC_SAMPLE_INITOPL, ih->GetKeyTextFromCommand(kcSampleInitializeOPL, _T("Initialize &OPL Instrument"))); - menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); - menu.DestroyMenu(); - } + menu.CreatePopupMenu(); + menu.AppendMenu(MF_STRING, IDC_SAMPLE_DUPLICATE, ih->GetKeyTextFromCommand(kcSampleDuplicate, m_sndFile.GetSample(m_nSample).uFlags[CHN_ADLIB] ? _T("&Duplicate Instrument") : _T("&Duplicate Sample"))); + menu.AppendMenu(MF_STRING | (m_sndFile.SupportsOPL() ? 0 : MF_DISABLED), IDC_SAMPLE_INITOPL, ih->GetKeyTextFromCommand(kcSampleInitializeOPL, _T("Initialize &OPL Instrument"))); + menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); + menu.DestroyMenu(); break; case IDC_SAMPLE_OPEN: - { - menu.CreatePopupMenu(); - menu.AppendMenu(MF_STRING, IDC_SAMPLE_OPENKNOWN, ih->GetKeyTextFromCommand(kcSampleLoad, _T("Import &Sample..."))); - menu.AppendMenu(MF_STRING, IDC_SAMPLE_OPENRAW, ih->GetKeyTextFromCommand(kcSampleLoadRaw, _T("Import &Raw Sample..."))); - menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); - menu.DestroyMenu(); - } + menu.CreatePopupMenu(); + menu.AppendMenu(MF_STRING, IDC_SAMPLE_OPENKNOWN, ih->GetKeyTextFromCommand(kcSampleLoad, _T("Import &Sample..."))); + menu.AppendMenu(MF_STRING, IDC_SAMPLE_OPENRAW, ih->GetKeyTextFromCommand(kcSampleLoadRaw, _T("Import &Raw Sample..."))); + menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); + menu.DestroyMenu(); break; case IDC_SAMPLE_SAVEAS: - { - menu.CreatePopupMenu(); - menu.AppendMenu(MF_STRING, IDC_SAVE_ALL, _T("Save &All...")); - menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); - menu.DestroyMenu(); - } + menu.CreatePopupMenu(); + menu.AppendMenu(MF_STRING, IDC_SAVE_ALL, _T("Save &All...")); + menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this); + menu.DestroyMenu(); break; } *pResult = 0; Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp Thu Nov 7 22:11:52 2024 (r22106) @@ -38,6 +38,7 @@ VUMETERS_HEIGHT = 13, // Height of vu-meters (including padding) VUMETERS_HEIGHT_LED = 10, // Height of vu-meters (without padding) VUMETERS_LEDS_PER_SIDE = 8, + SEPARATOR_WIDTH = 4, }; enum @@ -104,6 +105,18 @@ } +void CViewPattern::UpdateVisibileColumns(std::bitset<PatternCursor::numColumns> visibleColumns) +{ + m_visibleColumns = visibleColumns; + m_visibleColumns.set(PatternCursor::noteColumn); // Cannot be disabled at the moment + m_visibleColumns.set(PatternCursor::paramColumn, m_visibleColumns[PatternCursor::effectColumn]); + UpdateSizes(); + UpdateScrollSize(); + SetCurrentColumn(m_Cursor); + InvalidatePattern(true, true); +} + + bool CViewPattern::UpdateSizes() { const PATTERNFONT *pfnt = PatternFont::currentFont; @@ -113,10 +126,12 @@ m_szPluginHeader.cx = 0; m_szPluginHeader.cy = m_Status[psShowPluginNames] ? MulDiv(PLUGNAME_HEIGHT, m_nDPIy, 96) : 0; if(m_Status[psShowVUMeters]) m_szHeader.cy += VUMETERS_HEIGHT; - m_szCell.cx = 4 + pfnt->nEltWidths[0]; - if (m_nDetailLevel >= PatternCursor::instrColumn) m_szCell.cx += pfnt->nEltWidths[1]; - if (m_nDetailLevel >= PatternCursor::volumeColumn) m_szCell.cx += pfnt->nEltWidths[2]; - if (m_nDetailLevel >= PatternCursor::effectColumn) m_szCell.cx += pfnt->nEltWidths[3] + pfnt->nEltWidths[4]; + m_szCell.cx = SEPARATOR_WIDTH; + for(size_t i = 0; i <= PatternCursor::lastColumn; i++) + { + if(m_visibleColumns[static_cast<PatternCursor::Columns>(i)]) + m_szCell.cx += pfnt->nEltWidths[i]; + } m_szCell.cy = pfnt->nHeight; m_szHeader.cx = MulDiv(m_szHeader.cx, m_nDPIx, 96); @@ -230,21 +245,16 @@ PatternCursor::Columns imax = cursor.GetColumnType(); LimitMax(imax, PatternCursor::lastColumn); -// if(imax > m_nDetailLevel) -// { -// // Extend to next channel -// imax = PatternCursor::firstColumn; -// cursor.Move(0, 1, 0); -// } - pt.x = (cursor.GetChannel() - xofs) * GetChannelWidth(); for(int i = 0; i < imax; i++) { - pt.x += pfnt->nEltWidths[i]; + if(m_visibleColumns[static_cast<PatternCursor::Columns>(i)]) + pt.x += pfnt->nEltWidths[i]; } - if (pt.x < 0) pt.x = 0; + if(pt.x < 0) + pt.x = 0; pt.x += Util::ScalePixels(ROWHDR_WIDTH, m_hWnd); pt.y = (cursor.GetRow() - yofs + m_nMidRow) * m_szCell.cy; @@ -266,11 +276,10 @@ int y = yofs - m_nMidRow + (pt.y - m_szHeader.cy + GetSmoothScrollOffset()) / m_szCell.cy; if (y < 0) y = 0; int xx = (pt.x - m_szHeader.cx) % GetChannelWidth(), dx = 0; - int imax = 4; - if (imax > (int)m_nDetailLevel + 1) imax = m_nDetailLevel + 1; - int i = 0; - for (i=0; i<imax; i++) + size_t i = 0; + for(; i < PatternCursor::lastColumn; i++) { + if(m_visibleColumns[static_cast<PatternCursor::Columns>(i)]) dx += pfnt->nEltWidths[i]; if(xx < dx) break; @@ -371,7 +380,7 @@ } #endif -static MPT_FORCEINLINE void DrawPadding(CFastBitmap &dib, const PATTERNFONT *pfnt, int x, int y, int col) +static MPT_FORCEINLINE void DrawPadding(CFastBitmap &dib, const PATTERNFONT *pfnt, int x, int y, PatternCursor::Columns col) { if(pfnt->padding[col]) dib.TextBlt(x + pfnt->nEltWidths[col] - pfnt->padding[col], y, pfnt->padding[col], pfnt->spacingY, pfnt->nClrX + pfnt->nEltWidths[col] - pfnt->padding[col], pfnt->nClrY, pfnt->dib); @@ -440,7 +449,7 @@ DrawLetter(x + pfnt->nNoteWidth[0] + pfnt->nNoteWidth[1], y, '?', pfnt->nOctaveWidth); } } - DrawPadding(m_Dib, pfnt, x, y, 0); + DrawPadding(m_Dib, pfnt, x, y, PatternCursor::noteColumn); } @@ -462,7 +471,7 @@ { m_Dib.TextBlt(x, y, pfnt->nEltWidths[1], pfnt->spacingY, pfnt->nClrX+pfnt->nEltWidths[0], pfnt->nClrY, pfnt->dib); } - DrawPadding(m_Dib, pfnt, x, y, 1); + DrawPadding(m_Dib, pfnt, x, y, PatternCursor::instrColumn); } @@ -504,11 +513,13 @@ pfnt->nNumX, pfnt->nNumY + (vol % 10) * pfnt->spacingY, pfnt->dib); } else { - int srcx = pfnt->nEltWidths[0] + pfnt->nEltWidths[1]; + int srcx = pfnt->nEltWidths[0]; + if(m_visibleColumns[PatternCursor::instrColumn]) + srcx += pfnt->nEltWidths[1]; m_Dib.TextBlt(x, y, pfnt->nEltWidths[2], pfnt->spacingY, pfnt->nClrX+srcx, pfnt->nClrY, pfnt->dib); } } - DrawPadding(m_Dib, pfnt, x, y, 2); + DrawPadding(m_Dib, pfnt, x, y, PatternCursor::volumeColumn); } @@ -700,9 +711,11 @@ const char *pszfmt = sndFile.m_bChannelMuteTogglePending[ncolhdr]? "[Channel %u]" : "Channel %u"; if(channel.szName[0] != 0) pszfmt = sndFile.m_bChannelMuteTogglePending[ncolhdr] ? "%u: [%s]" : "%u: %s"; - else if(m_nDetailLevel < PatternCursor::volumeColumn) + else if(const auto numVisibleColums = m_visibleColumns.count(); numVisibleColums < 2) + pszfmt = sndFile.m_bChannelMuteTogglePending[ncolhdr] ? "[%u]" : "%u"; + else if(numVisibleColums < 3) pszfmt = sndFile.m_bChannelMuteTogglePending[ncolhdr] ? "[Ch%u]" : "Ch%u"; - else if(m_nDetailLevel < PatternCursor::effectColumn) + else if(numVisibleColums < 5) pszfmt = sndFile.m_bChannelMuteTogglePending[ncolhdr] ? "[Chn %u]" : "Chn %u"; sprintf(s, pszfmt, ncolhdr + 1, channel.szName.buf); DrawButtonRect(hdc, &rect, s, @@ -834,6 +847,18 @@ CHANNELINDEX maxcol = ncols; while((maxcol > startChan) && (m_chnState[maxcol -1].selectedCols & COLUMN_BITS_INVISIBLE)) maxcol--; + + // Check if there's no "hole" in the visible columns (to speed up empty pattern cell drawing) + bool allColumnsConsecutive = true; + for(int i = LastVisibleColumn(); i >= 0; i--) + { + if(!m_visibleColumns[static_cast<PatternCursor::Columns>(i)]) + { + allColumnsConsecutive = false; + break; + } + } + // Init bitmap border { UINT maxndx = sndFile.GetNumChannels() * m_szCell.cx; @@ -842,7 +867,7 @@ do { ibmp += nColumnWidth; - m_Dib.TextBlt(ibmp-4, 0, 4, m_szCell.cy, pfnt->nClrX+pfnt->nWidth-4, pfnt->nClrY, pfnt->dib); + m_Dib.TextBlt(ibmp - SEPARATOR_WIDTH, 0, SEPARATOR_WIDTH, m_szCell.cy, pfnt->nClrX + pfnt->nWidth - SEPARATOR_WIDTH, pfnt->nClrY, pfnt->dib); } while (ibmp + nColumnWidth <= maxndx); } @@ -955,7 +980,7 @@ xbmp = nbmp = 0; do { - int x, bk_col, tx_col, col_sel, fx_col; + int x = 0, xClear = 0, bk_col, tx_col, col_sel, fx_col; const ModCommand *m = pattern.GetpModCommand(row, static_cast<CHANNELINDEX>(col)); @@ -968,20 +993,26 @@ const ModCommand *mold = m - ncols; const bool drawOldDefaultVolume = DrawDefaultVolume(mold); - if (m->note == mold->note) dwSpeedUpMask |= COLUMN_BITS_NOTE; - if ((m->instr == mold->instr) || (m_nDetailLevel < PatternCursor::instrColumn)) dwSpeedUpMask |= COLUMN_BITS_INSTRUMENT; - if ( m->IsPcNote() || mold->IsPcNote() ) + if(m->note == mold->note || !m_visibleColumns[PatternCursor::noteColumn]) + dwSpeedUpMask |= COLUMN_BITS_NOTE; + if((m->instr == mold->instr) || !m_visibleColumns[PatternCursor::instrColumn]) + dwSpeedUpMask |= COLUMN_BITS_INSTRUMENT; + if (m->IsPcNote() || mold->IsPcNote()) { // Handle speedup mask for PC notes. if(m->note == mold->note) { - if(m->GetValueVolCol() == mold->GetValueVolCol() || (m_nDetailLevel < PatternCursor::volumeColumn)) dwSpeedUpMask |= COLUMN_BITS_VOLUME; - if(m->GetValueEffectCol() == mold->GetValueEffectCol() || (m_nDetailLevel < PatternCursor::effectColumn)) dwSpeedUpMask |= COLUMN_BITS_FXCMDANDPARAM; + if(m->GetValueVolCol() == mold->GetValueVolCol() || !m_visibleColumns[PatternCursor::volumeColumn]) + dwSpeedUpMask |= COLUMN_BITS_VOLUME; + if(m->GetValueEffectCol() == mold->GetValueEffectCol() || !m_visibleColumns[PatternCursor::effectColumn]) + dwSpeedUpMask |= COLUMN_BITS_FXCMDANDPARAM; } } else { - if ((m->volcmd == mold->volcmd && (m->volcmd == VOLCMD_NONE || m->vol == mold->vol) && !drawDefaultVolume && !drawOldDefaultVolume) || (m_nDetailLevel < PatternCursor::volumeColumn)) dwSpeedUpMask |= COLUMN_BITS_VOLUME; - if ((m->command == mold->command) || (m_nDetailLevel < PatternCursor::effectColumn)) dwSpeedUpMask |= (m->command != CMD_NONE) ? COLUMN_BITS_FXCMD : COLUMN_BITS_FXCMDANDPARAM; + if ((m->volcmd == mold->volcmd && (m->volcmd == VOLCMD_NONE || m->vol == mold->vol) && !drawDefaultVolume && !drawOldDefaultVolume) || !m_visibleColumns[PatternCursor::volumeColumn]) + dwSpeedUpMask |= COLUMN_BITS_VOLUME; + if ((m->command == mold->command) || !m_visibleColumns[PatternCursor::effectColumn]) + dwSpeedUpMask |= (m->command != CMD_NONE) ? COLUMN_BITS_FXCMD : COLUMN_BITS_FXCMDANDPARAM; } if (dwSpeedUpMask == COLUMN_BITS_ALLCOLUMNS) goto DoBlit; } @@ -996,13 +1027,13 @@ bk_col = MODCOLOR_BACKSELECTED; } // Speedup: Empty command which is either not or fully selected - if (m->IsEmpty() && ((!col_sel) || (col_sel == COLUMN_BITS_ALLCOLUMNS))) + if (m->IsEmpty() && ((!col_sel) || (col_sel == COLUMN_BITS_ALLCOLUMNS)) && allColumnsConsecutive) { m_Dib.SetTextColor(tx_col, bk_col); - m_Dib.TextBlt(xbmp, 0, nColumnWidth-4, m_szCell.cy, pfnt->nClrX, pfnt->nClrY, pfnt->dib); + m_Dib.TextBlt(xbmp, 0, nColumnWidth - SEPARATOR_WIDTH, m_szCell.cy, pfnt->nClrX, pfnt->nClrY, pfnt->dib); goto DoBlit; } - x = 0; + // Note if (!(dwSpeedUpMask & COLUMN_BITS_NOTE)) { @@ -1041,8 +1072,9 @@ DrawNote(xbmp+x, 0, m->note); } x += pfnt->nEltWidths[0]; + xClear += pfnt->nEltWidths[0]; // Instrument - if (m_nDetailLevel >= PatternCursor::instrColumn) + if (m_visibleColumns[PatternCursor::instrColumn]) { if (!(dwSpeedUpMask & COLUMN_BITS_INSTRUMENT)) { @@ -1063,8 +1095,9 @@ } x += pfnt->nEltWidths[1]; } + xClear += pfnt->nEltWidths[1]; // Volume - if (m_nDetailLevel >= PatternCursor::volumeColumn) + if (m_visibleColumns[PatternCursor::volumeColumn]) { if (!(dwSpeedUpMask & COLUMN_BITS_VOLUME)) { @@ -1091,8 +1124,9 @@ } x += pfnt->nEltWidths[2]; } + xClear += pfnt->nEltWidths[2]; // Command & param - if (m_nDetailLevel >= PatternCursor::effectColumn) + if (m_visibleColumns[PatternCursor::effectColumn]) { const bool isPCnote = m->IsPcNote(); uint16 val = m->GetValueEffectCol(); @@ -1119,7 +1153,7 @@ m_Dib.SetTextColor(tx_col, bk_col); if(isPCnote) { - m_Dib.TextBlt(xbmp + x, 0, 2, pfnt->spacingY, pfnt->nClrX+x, pfnt->nClrY, pfnt->dib); + m_Dib.TextBlt(xbmp + x, 0, 2, pfnt->spacingY, pfnt->nClrX + xClear, pfnt->nClrY, pfnt->dib); m_Dib.TextBlt(xbmp + x + pfnt->pcValMargin, 0, pfnt->nEltWidths[3], m_szCell.cy, pfnt->nNumX, pfnt->nNumY+(val / 100)*pfnt->spacingY, pfnt->dib); } else { @@ -1130,12 +1164,13 @@ DrawLetter(xbmp+x, 0, n, pfnt->nEltWidths[3], pfnt->nCmdOfs); } else { - m_Dib.TextBlt(xbmp+x, 0, pfnt->nEltWidths[3], pfnt->spacingY, pfnt->nClrX+x, pfnt->nClrY, pfnt->dib); + m_Dib.TextBlt(xbmp+x, 0, pfnt->nEltWidths[3], pfnt->spacingY, pfnt->nClrX + xClear, pfnt->nClrY, pfnt->dib); } } - DrawPadding(m_Dib, pfnt, xbmp + x, 0, 3); + DrawPadding(m_Dib, pfnt, xbmp + x, 0, PatternCursor::effectColumn); } x += pfnt->nEltWidths[3]; + xClear += pfnt->nEltWidths[3]; // Param if (!(dwSpeedUpMask & COLUMN_BITS_FXPARAM)) { @@ -1162,10 +1197,10 @@ m_Dib.TextBlt(xbmp + x + pfnt->nParamHiWidth, 0, pfnt->nEltWidths[4] - pfnt->padding[4] - pfnt->nParamHiWidth, m_szCell.cy, pfnt->nNumX+pfnt->paramLoMargin, pfnt->nNumY+(m->param & 0x0F)*pfnt->spacingY, pfnt->dib); } else { - m_Dib.TextBlt(xbmp+x, 0, pfnt->nEltWidths[4], m_szCell.cy, pfnt->nClrX+x, pfnt->nClrY, pfnt->dib); + m_Dib.TextBlt(xbmp+x, 0, pfnt->nEltWidths[4], m_szCell.cy, pfnt->nClrX + xClear, pfnt->nClrY, pfnt->dib); } } - DrawPadding(m_Dib, pfnt, xbmp + x, 0, 4); + DrawPadding(m_Dib, pfnt, xbmp + x, 0, PatternCursor::paramColumn); } } DoBlit: @@ -1279,7 +1314,7 @@ if(end.GetColumnType() == PatternCursor::firstColumn) { // Special case: If selection ends on the last column of a channel, subtract the channel separator width. - ptBottomRight.x -= 4; + ptBottomRight.x -= SEPARATOR_WIDTH; } // invert the brush pattern (looks just like frame window sizing) @@ -1514,7 +1549,7 @@ m_Selection = PatternRect(beginSel, endSel); if(const CSoundFile *sndFile = GetSoundFile(); sndFile != nullptr && sndFile->Patterns.IsValidPat(m_nPattern)) { - m_Selection.Sanitize(sndFile->Patterns[m_nPattern].GetNumRows(), sndFile->GetNumChannels(), m_nDetailLevel); + m_Selection.Sanitize(sndFile->Patterns[m_nPattern].GetNumRows(), sndFile->GetNumChannels(), LastVisibleColumn()); } UpdateIndicator(); Modified: trunk/OpenMPT/mptrack/PatternCursor.h ============================================================================== --- trunk/OpenMPT/mptrack/PatternCursor.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/PatternCursor.h Thu Nov 7 22:11:52 2024 (r22106) @@ -31,6 +31,7 @@ effectColumn, paramColumn, lastColumn = paramColumn, + numColumns }; protected: Modified: trunk/OpenMPT/mptrack/PatternFindReplace.cpp ============================================================================== --- trunk/OpenMPT/mptrack/PatternFindReplace.cpp Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/PatternFindReplace.cpp Thu Nov 7 22:11:52 2024 (r22106) @@ -40,7 +40,7 @@ } else if(sndFile.Patterns.IsValidPat(m_nPattern)) { const CPattern &pat = sndFile.Patterns[m_nPattern]; - m_Cursor.Sanitize(pat.GetNumRows(), pat.GetNumChannels(), m_nDetailLevel); + m_Cursor.Sanitize(pat.GetNumRows(), pat.GetNumChannels(), LastVisibleColumn()); m = *pat.GetpModCommand(m_Cursor.GetRow(), m_Cursor.GetChannel()); } @@ -155,7 +155,7 @@ for(; chn <= lastChannel; chn++, m++) { - RowMask findWhere; + std::bitset<PatternCursor::numColumns> findWhere = std::bitset<PatternCursor::numColumns>{}.set(); if(FindReplace::instance.findFlags[FindReplace::InPatSelection]) { @@ -169,42 +169,31 @@ { PatternCursor cursor(row, chn, static_cast<PatternCursor::Columns>(i)); if(!FindReplace::instance.selection.Contains(cursor)) - { - switch(i) - { - case PatternCursor::noteColumn: findWhere.note = false; break; - case PatternCursor::instrColumn: findWhere.instrument = false; break; - case PatternCursor::volumeColumn: findWhere.volume = false; break; - case PatternCursor::effectColumn: findWhere.command = false; break; - case PatternCursor::paramColumn: findWhere.parameter = false; break; - } - } + findWhere.reset(i); } } else { // For channels inside the selection, we have an easier job to solve. if(!FindReplace::instance.selection.Contains(PatternCursor(row, chn))) - { - findWhere.Clear(); - } + findWhere.reset(); } } if(m->instr > 0) lastInstr[chn] = m->instr; - if((FindReplace::instance.findFlags[FindReplace::Note] && (!findWhere.note || m->note < FindReplace::instance.findNoteMin || m->note > FindReplace::instance.findNoteMax)) - || (FindReplace::instance.findFlags[FindReplace::Instr] && (!findWhere.instrument || m->instr < FindReplace::instance.findInstrMin || m->instr > FindReplace::instance.findInstrMax))) + if((FindReplace::instance.findFlags[FindReplace::Note] && (!findWhere[PatternCursor::noteColumn] || m->note < FindReplace::instance.findNoteMin || m->note > FindReplace::instance.findNoteMax)) + || (FindReplace::instance.findFlags[FindReplace::Instr] && (!findWhere[PatternCursor::instrColumn] || m->instr < FindReplace::instance.findInstrMin || m->instr > FindReplace::instance.findInstrMax))) { continue; } if(!m->IsPcNote()) { - if((FindReplace::instance.findFlags[FindReplace::VolCmd] && (!findWhere.volume || m->volcmd != FindReplace::instance.findVolCmd)) - || (FindReplace::instance.findFlags[FindReplace::Volume] && (!findWhere.volume || m->volcmd == VOLCMD_NONE || m->vol < FindReplace::instance.findVolumeMin || m->vol > FindReplace::instance.findVolumeMax)) - || (FindReplace::instance.findFlags[FindReplace::Command] && (!findWhere.command || m->command != FindReplace::instance.findCommand)) - || (FindReplace::instance.findFlags[FindReplace::Param] && (!findWhere.parameter || m->command == CMD_NONE || m->param < FindReplace::instance.findParamMin || m->param > FindReplace::instance.findParamMax)) + if((FindReplace::instance.findFlags[FindReplace::VolCmd] && (!findWhere[PatternCursor::volumeColumn] || m->volcmd != FindReplace::instance.findVolCmd)) + || (FindReplace::instance.findFlags[FindReplace::Volume] && (!findWhere[PatternCursor::volumeColumn] || m->volcmd == VOLCMD_NONE || m->vol < FindReplace::instance.findVolumeMin || m->vol > FindReplace::instance.findVolumeMax)) + || (FindReplace::instance.findFlags[FindReplace::Command] && (!findWhere[PatternCursor::effectColumn] || m->command != FindReplace::instance.findCommand)) + || (FindReplace::instance.findFlags[FindReplace::Param] && (!findWhere[PatternCursor::paramColumn] || m->command == CMD_NONE || m->param < FindReplace::instance.findParamMin || m->param > FindReplace::instance.findParamMax)) || FindReplace::instance.findFlags[FindReplace::PCParam] || FindReplace::instance.findFlags[FindReplace::PCValue]) { @@ -212,8 +201,8 @@ } } else { - if((FindReplace::instance.findFlags[FindReplace::PCParam] && (!findWhere.volume || m->GetValueVolCol() < FindReplace::instance.findParamMin || m->GetValueVolCol() > FindReplace::instance.findParamMax)) - || (FindReplace::instance.findFlags[FindReplace::PCValue] && (!(findWhere.command || findWhere.parameter) || m->GetValueEffectCol() < FindReplace::instance.findVolumeMin || m->GetValueEffectCol() > FindReplace::instance.findVolumeMax)) + if((FindReplace::instance.findFlags[FindReplace::PCParam] && (!findWhere[PatternCursor::volumeColumn] || m->GetValueVolCol() < FindReplace::instance.findParamMin || m->GetValueVolCol() > FindReplace::instance.findParamMax)) + || (FindReplace::instance.findFlags[FindReplace::PCValue] && (!(findWhere[PatternCursor::effectColumn] || findWhere[PatternCursor::paramColumn]) || m->GetValueEffectCol() < FindReplace::instance.findVolumeMin || m->GetValueEffectCol() > FindReplace::instance.findVolumeMax)) || FindReplace::instance.findFlags[FindReplace::VolCmd] || FindReplace::instance.findFlags[FindReplace::Volume] || FindReplace::instance.findFlags[FindReplace::Command] Modified: trunk/OpenMPT/mptrack/View_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/View_pat.cpp Thu Nov 7 22:11:52 2024 (r22106) @@ -387,7 +387,9 @@ return false; } - LimitMax(column, m_nDetailLevel); + LimitMax(column, LastVisibleColumn()); + while(!m_visibleColumns[column]) + column = static_cast<PatternCursor::Columns>(column + 1); m_Cursor.SetColumn(channel, column); PatternCursor selStart(m_Cursor); @@ -403,6 +405,18 @@ } +PatternCursor::Columns CViewPattern::LastVisibleColumn() const noexcept +{ + for(size_t i = PatternCursor::lastColumn; i > PatternCursor::firstColumn; i--) + { + if(m_visibleColumns[i]) + return static_cast<PatternCursor::Columns>(i); + } + return PatternCursor::firstColumn; + +} + + // Set document as modified and optionally update all pattern views. void CViewPattern::SetModified(bool updateAllViews) { @@ -980,7 +994,7 @@ OnClearSelection(); } -void CViewPattern::OnClearSelection(bool ITStyle, RowMask rm) //Default RowMask: all elements enabled +void CViewPattern::OnClearSelection(bool ITStyle, std::bitset<PatternCursor::numColumns> rm) { CSoundFile *pSndFile = GetSoundFile(); if(pSndFile == nullptr || !pSndFile->Patterns.IsValidPat(m_nPattern) || !IsEditingEnabled_bmsg()) @@ -1008,7 +1022,7 @@ for(int i = PatternCursor::firstColumn; i <= PatternCursor::lastColumn; i++) { PatternCursor cell(row, chn, static_cast<PatternCursor::Columns>(i)); - if(!m_Selection.ContainsHorizontal(cell)) + if(!m_Selection.ContainsHorizontal(cell) || !rm[i]) { // We might have to skip the first / last few entries. continue; @@ -1017,61 +1031,46 @@ switch(i) { case PatternCursor::noteColumn: // Clear note - if(rm.note) + if(m.IsPcNote()) + { // Clear whole cell if clearing PC note + m.Clear(); + } else { - if(m.IsPcNote()) - { // Clear whole cell if clearing PC note - m.Clear(); - } else - { - m.note = NOTE_NONE; - if(ITStyle) - m.instr = 0; - } + m.note = NOTE_NONE; + if(ITStyle) + m.instr = 0; } break; case PatternCursor::instrColumn: // Clear instrument - if(rm.instrument) - { - m.instr = 0; - } + m.instr = 0; break; case PatternCursor::volumeColumn: // Clear volume - if(rm.volume) - { - m.volcmd = VOLCMD_NONE; - m.vol = 0; - } + m.volcmd = VOLCMD_NONE; + m.vol = 0; break; case PatternCursor::effectColumn: // Clear Command - if(rm.command) + m.command = CMD_NONE; + if(m.IsPcNote()) { - m.command = CMD_NONE; - if(m.IsPcNote()) - { - m.SetValueEffectCol(0); - } + m.SetValueEffectCol(0); } break; case PatternCursor::paramColumn: // Clear Command Param - if(rm.parameter) + m.param = 0; + if(m.IsPcNote()) { - m.param = 0; - if(m.IsPcNote()) - { - m.SetValueEffectCol(0); + m.SetValueEffectCol(0); - if(cell.CompareColumn(m_Selection.GetUpperLeft()) == 0) - { - // If this is the first selected column, update effect column char as well - PatternCursor upper(m_Selection.GetUpperLeft()); - upper.Move(0, 0, -1); - m_Selection = PatternRect(upper, m_Selection.GetLowerRight()); - } + if(cell.CompareColumn(m_Selection.GetUpperLeft()) == 0) + { + // If this is the first selected column, update effect column char as well + PatternCursor upper(m_Selection.GetUpperLeft()); + upper.Move(0, 0, -1); + m_Selection = PatternRect(upper, m_Selection.GetLowerRight()); } } break; @@ -3854,8 +3853,8 @@ if(pSndFile != nullptr && pSndFile->Patterns.IsValidPat(GetCurrentPattern())) { const auto &pattern = GetSoundFile()->Patterns[m_nPattern]; - m_Cursor.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels(), m_nDetailLevel); - m_Selection.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels(), m_nDetailLevel); + m_Cursor.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels(), LastVisibleColumn()); + m_Selection.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels(), LastVisibleColumn()); } }; @@ -4195,8 +4194,7 @@ if(lParam) { PATTERNVIEWSTATE *pState = (PATTERNVIEWSTATE *)lParam; - if(pState->nDetailLevel != PatternCursor::firstColumn) - m_nDetailLevel = pState->nDetailLevel; + UpdateVisibileColumns(pState->visibleColumns); if(pState->initialized) { SetCurrentPattern(pState->nPattern); @@ -4215,8 +4213,8 @@ pState->nPattern = m_nPattern; pState->cursor = m_Cursor; pState->selection = m_Selection; - pState->nDetailLevel = m_nDetailLevel; pState->nOrder = GetCurrentOrder(); + pState->visibleColumns = m_visibleColumns; } break; @@ -4261,15 +4259,11 @@ OnPatternAmplify(); break; + case VIEWMSG_GETDETAIL: + return m_visibleColumns.to_ulong(); + case VIEWMSG_SETDETAIL: - if(lParam != m_nDetailLevel) - { - m_nDetailLevel = static_cast<PatternCursor::Columns>(lParam); - UpdateSizes(); - UpdateScrollSize(); - SetCurrentColumn(m_Cursor); - InvalidatePattern(true, true); - } + UpdateVisibileColumns(lParam); break; case VIEWMSG_DOSCROLL: OnMouseWheel(0, static_cast<short>(lParam), CPoint(0, 0)); @@ -4513,8 +4507,8 @@ case kcEndHorizontalSelect: case kcEndHorizontal: - if(m_Cursor.CompareColumn(PatternCursor(0, sndFile.GetNumChannels() - 1, m_nDetailLevel)) < 0) - SetCurrentColumn(sndFile.GetNumChannels() - 1, m_nDetailLevel); + if(m_Cursor.CompareColumn(PatternCursor(0, sndFile.GetNumChannels() - 1, LastVisibleColumn())) < 0) + SetCurrentColumn(sndFile.GetNumChannels() - 1, LastVisibleColumn()); else if(GetCurrentRow() < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; @@ -4522,12 +4516,12 @@ case kcEndVertical: if(GetCurrentRow() < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); - else if(m_Cursor.CompareColumn(PatternCursor(0, sndFile.GetNumChannels() - 1, m_nDetailLevel)) < 0) - SetCurrentColumn(sndFile.GetNumChannels() - 1, m_nDetailLevel); + else if(m_Cursor.CompareColumn(PatternCursor(0, sndFile.GetNumChannels() - 1, LastVisibleColumn())) < 0) + SetCurrentColumn(sndFile.GetNumChannels() - 1, LastVisibleColumn()); return wParam; case kcEndAbsoluteSelect: case kcEndAbsolute: - SetCurrentColumn(sndFile.GetNumChannels() - 1, m_nDetailLevel); + SetCurrentColumn(sndFile.GetNumChannels() - 1, LastVisibleColumn()); if(GetCurrentRow() < pModDoc->GetPatternSize(m_nPattern) - 1) SetCurrentRow(pModDoc->GetPatternSize(m_nPattern) - 1); return wParam; @@ -4613,12 +4607,12 @@ SetCurSel(PatternCursor(m_Selection.GetStartRow(), 0, PatternCursor::firstColumn), PatternCursor(m_Selection.GetEndRow(), sndFile.GetNumChannels(), PatternCursor::lastColumn)); return wParam; - case kcClearRow: OnClearField(RowMask(), false); return wParam; - case kcClearField: OnClearField(RowMask(m_Cursor), false); return wParam; - case kcClearFieldITStyle: OnClearField(RowMask(m_Cursor), false, true); return wParam; - case kcClearRowStep: OnClearField(RowMask(), true); return wParam; - case kcClearFieldStep: OnClearField(RowMask(m_Cursor), true); return wParam; - case kcClearFieldStepITStyle: OnClearField(RowMask(m_Cursor), true, true); return wParam; + case kcClearRow: OnClearField(std::bitset<PatternCursor::numColumns>{}.set(), false); return wParam; + case kcClearField: OnClearField(std::bitset<PatternCursor::numColumns>{}.set(m_Cursor.GetColumnType()), false); return wParam; + case kcClearFieldITStyle: OnClearField(std::bitset<PatternCursor::numColumns>{}.set(m_Cursor.GetColumnType()), false, true); return wParam; + case kcClearRowStep: OnClearField(std::bitset<PatternCursor::numColumns>{}.set(), true); return wParam; + case kcClearFieldStep: OnClearField(std::bitset<PatternCursor::numColumns>{}.set(m_Cursor.GetColumnType()), true); return wParam; + case kcClearFieldStepITStyle: OnClearField(std::bitset<PatternCursor::numColumns>{}.set(m_Cursor.GetColumnType()), true, true); return wParam; case kcDeleteRow: OnDeleteRow(); return wParam; case kcDeleteWholeRow: OnDeleteWholeRow(); return wParam; @@ -4695,6 +4689,10 @@ case kcToggleNoteOffRecordPC: TrackerSettings::Instance().m_dwPatternSetup ^= PATTERN_KBDNOTEOFF; return wParam; case kcToggleNoteOffRecordMIDI: TrackerSettings::Instance().m_dwMidiSetup ^= MIDISETUP_RECORDNOTEOFF; return wParam; + case kcToggleVisibilityInstrColumn: UpdateVisibileColumns(m_visibleColumns.flip(PatternCursor::instrColumn)); return wParam; + case kcToggleVisibilityVolumeColumn: UpdateVisibileColumns(m_visibleColumns.flip(PatternCursor::volumeColumn)); return wParam; + case kcToggleVisibilityEffectColumn : UpdateVisibileColumns(m_visibleColumns.flip(PatternCursor::effectColumn)); return wParam; + case kcPatternEditPCNotePlugin: OnTogglePCNotePluginEditor(); return wParam; case kcQuantizeSettings: OnSetQuantize(); return wParam; case kcLockPlaybackToRows: OnLockPatternRows(); return wParam; @@ -4872,16 +4870,19 @@ if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_WRAP) && m_Cursor.IsInFirstColumn()) { // Wrap around to last channel - SetCurrentColumn(GetDocument()->GetNumChannels() - 1, m_nDetailLevel); + SetCurrentColumn(GetDocument()->GetNumChannels() - 1, LastVisibleColumn()); } else if(!m_Cursor.IsInFirstColumn()) { - m_Cursor.Move(0, 0, -1); + do + { + m_Cursor.Move(0, 0, -1); + } while(!m_visibleColumns[m_Cursor.GetColumnType()]); SetCurrentColumn(m_Cursor); } } else { // Move cursor one column to the right - const PatternCursor rightmost(0, GetDocument()->GetNumChannels() - 1, m_nDetailLevel); + const PatternCursor rightmost(0, GetDocument()->GetNumChannels() - 1, LastVisibleColumn()); if(m_Cursor.CompareColumn(rightmost) >= 0) { if((TrackerSettings::Instance().m_dwPatternSetup & PATTERN_WRAP)) @@ -4897,7 +4898,7 @@ do { m_Cursor.Move(0, 0, 1); - } while(m_Cursor.GetColumnType() > m_nDetailLevel); + } while(!m_visibleColumns[m_Cursor.GetColumnType()]); SetCurrentColumn(m_Cursor); } } @@ -6269,7 +6270,7 @@ } -void CViewPattern::OnClearField(const RowMask &mask, bool step, bool ITStyle) +void CViewPattern::OnClearField(const std::bitset<PatternCursor::numColumns> mask, bool step, bool ITStyle) { CSoundFile *sndFile = GetSoundFile(); if(sndFile == nullptr || !IsEditingEnabled_bmsg()) @@ -6287,7 +6288,7 @@ ModCommand &target = GetCursorCommand(); ModCommand oldcmd = target; - if(mask.note) + if(mask[PatternCursor::noteColumn]) { // Clear note if(target.IsPcNote()) @@ -6303,29 +6304,29 @@ } } } - if(mask.instrument) + if(mask[PatternCursor::instrColumn]) { // Clear instrument target.instr = 0; } - if(mask.volume) + if(mask[PatternCursor::volumeColumn]) { // Clear volume effect target.volcmd = VOLCMD_NONE; target.vol = 0; } - if(mask.command) + if(mask[PatternCursor::effectColumn]) { // Clear effect command target.command = CMD_NONE; } - if(mask.parameter) + if(mask[PatternCursor::paramColumn]) { // Clear effect parameter target.param = 0; } - if((mask.command || mask.parameter) && (target.IsPcNote())) + if((mask[PatternCursor::effectColumn] || mask[PatternCursor::paramColumn]) && (target.IsPcNote())) { target.SetValueEffectCol(0); } Modified: trunk/OpenMPT/mptrack/View_pat.h ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/View_pat.h Thu Nov 7 22:11:52 2024 (r22106) @@ -65,50 +65,6 @@ inline constexpr ROWINDEX MAX_SPACING = MAX_PATTERN_ROWS; -// Struct for controlling selection clearing. This is used to define which data fields should be cleared. -struct RowMask -{ - bool note : 1; - bool instrument : 1; - bool volume : 1; - bool command : 1; - bool parameter : 1; - - // Default row mask (all rows are selected) - RowMask() - { - note = instrument = volume = command = parameter = true; - }; - - // Construct mask from list - RowMask(bool n, bool i, bool v, bool c, bool p) - { - note = n; - instrument = i; - volume = v; - command = c; - parameter = p; - } - - // Construct mask from column index - RowMask(const PatternCursor &cursor) - { - const PatternCursor::Columns column = cursor.GetColumnType(); - - note = (column == PatternCursor::noteColumn); - instrument = (column == PatternCursor::instrColumn); - volume = (column == PatternCursor::volumeColumn); - command = (column == PatternCursor::effectColumn); - parameter = (column == PatternCursor::paramColumn); - } - - void Clear() - { - note = instrument = volume = command = parameter = false; - } -}; - - struct PatternEditPos { ROWINDEX row = ROWINDEX_INVALID; @@ -172,7 +128,7 @@ int m_nXScroll = 0, m_nYScroll = 0; int m_ledWidth = 0, m_ledHeight = 0; - PatternCursor::Columns m_nDetailLevel = PatternCursor::lastColumn; // Visible Columns + std::bitset<PatternCursor::numColumns> m_visibleColumns; // Cursor and selection positions PatternCursor m_Cursor; // Current cursor position in pattern. @@ -254,6 +210,7 @@ void UpdateIndicator(bool updateAccessibility = true); void UpdateXInfoText(); void UpdateColors(); + void UpdateVisibileColumns(std::bitset<PatternCursor::numColumns> visibleColumns); CString GetCursorDescription() const; @@ -372,7 +329,7 @@ PATTERNINDEX GetNextPattern() const; void SetSpacing(int n); - void OnClearField(const RowMask &mask, bool step, bool ITStyle = false); + void OnClearField(const std::bitset<PatternCursor::numColumns> mask, bool step, bool ITStyle = false); void SetSelectionInstrument(const INSTRUMENTINDEX instr, bool setEmptyInstrument); void FindInstrument(); @@ -428,7 +385,7 @@ afx_msg void OnEditPasteFlood() { ExecutePaste(PatternClipboard::pmPasteFlood); }; afx_msg void OnEditPushForwardPaste() { ExecutePaste(PatternClipboard::pmPushForward); }; - afx_msg void OnClearSelection(bool ITStyle = false, RowMask sb = RowMask()); + afx_msg void OnClearSelection(bool ITStyle = false, std::bitset<PatternCursor::numColumns> sb = std::bitset<PatternCursor::numColumns>{}.set()); afx_msg void OnGrowSelection(); afx_msg void OnShrinkSelection(); afx_msg void OnEditSelectAll(); @@ -593,6 +550,8 @@ void CreateVUMeterBitmap(); + PatternCursor::Columns LastVisibleColumn() const noexcept; + public: afx_msg void OnRButtonUp(UINT nFlags, CPoint point); Modified: trunk/OpenMPT/mptrack/WindowMessages.h ============================================================================== --- trunk/OpenMPT/mptrack/WindowMessages.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/WindowMessages.h Thu Nov 7 22:11:52 2024 (r22106) @@ -121,6 +121,7 @@ VIEWMSG_COPYPATTERN, VIEWMSG_PASTEPATTERN, VIEWMSG_AMPLIFYPATTERN, + VIEWMSG_GETDETAIL, VIEWMSG_SETDETAIL, // Sample-Specific VIEWMSG_SETCURRENTSAMPLE, Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/mptrack.rc Thu Nov 7 22:11:52 2024 (r22106) @@ -3227,15 +3227,13 @@ 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" - ID_INSTRUMENT_SAMPLEMAP "Edit the sample map" - ID_SAMPLE_ZOOMUP "Zoom In" - ID_SAMPLE_ZOOMDOWN "Zoom Out" - ID_PATTERNDETAIL_LO "Low pattern detail level\nLow pattern detail level" - ID_PATTERNDETAIL_MED "Medium pattern detail level\nMedium pattern detail level" - ID_PATTERNDETAIL_HI "High pattern detail level\nHigh pattern detail level" - ID_PATTERN_AMPLIFY "Amplify selection\nAmplify" + ID_SAMPLE_TRIM "Delete everything except the current selection\nTrim Sample" + ID_FILE_SAVEMIDI "Export the current song to a standard MIDI file" + ID_INSTRUMENT_SAMPLEMAP "Edit the sample map" + ID_SAMPLE_ZOOMUP "Zoom In" + ID_SAMPLE_ZOOMDOWN "Zoom Out" + ID_PATTERNDETAIL_DROPDOWN "Toggle visibility of pattern columns\nToggle visibility of pattern columns" + ID_PATTERN_AMPLIFY "Amplify selection\nAmplify" END STRINGTABLE Modified: trunk/OpenMPT/mptrack/res/originals/pattern_toolbar.pfi ============================================================================== Binary file (source and/or target). No diff available. Modified: trunk/OpenMPT/mptrack/res/pattern_toolbar.png ============================================================================== Binary file (source and/or target). No diff available. Modified: trunk/OpenMPT/mptrack/resource.h ============================================================================== --- trunk/OpenMPT/mptrack/resource.h Wed Nov 6 22:19:28 2024 (r22105) +++ trunk/OpenMPT/mptrack/resource.h Thu Nov 7 22:11:52 2024 (r22106) @@ -1092,11 +1092,12 @@ #define ID_SAMPLE_SLICE 32885 #define ID_INSTRUMENT_SAMPLEMAP 32886 #define ID_SAMPLE_MONOCONVERT 32887 +#define ID_PATTERNDETAIL_DROPDOWN 32888 #define ID_SAMPLE_ZOOMUP 32889 #define ID_SAMPLE_ZOOMDOWN 32890 -#define ID_PATTERNDETAIL_LO 32891 -#define ID_PATTERNDETAIL_MED 32892 -#define ID_PATTERNDETAIL_HI 32893 +#define ID_PATTERNDETAIL_INSTR 32891 +#define ID_PATTERNDETAIL_VOLUME 32892 +#define ID_PATTERNDETAIL_EFFECT 32893 #define ID_INSTRUMENT_DUPLICATE 32894 #define ID_PATTERN_AMPLIFY 32895 #define ID_MODTREE_MUTE 32896 |
From: <sv...@op...> - 2024-11-06 21:19:41
|
Author: sagamusix Date: Wed Nov 6 22:19:28 2024 New Revision: 22105 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22105 Log: [Fix] Instrument synths weren't able to initiate sample playback if the instrument sample association was an empty sample slot (https://www.un4seen.com/forum/?topic=15448.msg144071#msg144071). Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Wed Nov 6 22:15:11 2024 (r22104) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Wed Nov 6 22:19:28 2024 (r22105) @@ -166,6 +166,8 @@ const ModSample &sample = sndFile.GetSample(smp); if(chn.pModSample == &sample && channelIsActive) return; + if(chn.increment.IsZero() && chn.nLength == 0 && chn.nVolume == 0) + chn.nVolume = 256; chn.pModSample = &sample; chn.pCurrentSample = sample.samplev(); chn.dwFlags = (chn.dwFlags & CHN_CHANNELFLAGS) | sample.uFlags; |
From: <sv...@op...> - 2024-11-06 21:15:19
|
Author: sagamusix Date: Wed Nov 6 22:15:11 2024 New Revision: 22104 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22104 Log: [Fix] r22093 broke XM with linear slides period calculation. Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Nov 5 18:46:08 2024 (r22103) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Wed Nov 6 22:15:11 2024 (r22104) @@ -6665,7 +6665,7 @@ if(m_SongFlags[SONG_LINEARSLIDES]) { - int l = ((NOTE_MAX - note) << 6) - (nFineTune / 2); + int l = ((120 - note) << 6) - (nFineTune / 2); if (l < 1) l = 1; return static_cast<uint32>(l); } else |
From: <sv...@op...> - 2024-11-05 17:46:20
|
Author: sagamusix Date: Tue Nov 5 18:46:08 2024 New Revision: 22103 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22103 Log: Merged revision(s) 22100 from trunk/OpenMPT: [Fix] MED: Don't enable Amiga resampler if any stereo samples are found. Fixes silent playback with samples that contain identical but inverted sample data on both channels (https://www.un4seen.com/forum/?topic=15448.msg144058#msg144058). ........ Modified: branches/OpenMPT-1.29/ (props changed) branches/OpenMPT-1.29/soundlib/Load_med.cpp Modified: branches/OpenMPT-1.29/soundlib/Load_med.cpp ============================================================================== --- branches/OpenMPT-1.29/soundlib/Load_med.cpp Tue Nov 5 18:45:40 2024 (r22102) +++ branches/OpenMPT-1.29/soundlib/Load_med.cpp Tue Nov 5 18:46:08 2024 (r22103) @@ -914,6 +914,7 @@ { sampleIO |= SampleIO::stereoSplit; length /= 2; + m_SongFlags.reset(SONG_ISAMIGA); // Amiga resampler does not handle stereo samples } if(instrHeader.type & MMDInstrHeader::DELTA) { |
From: <sv...@op...> - 2024-11-05 17:45:47
|
Author: sagamusix Date: Tue Nov 5 18:45:40 2024 New Revision: 22102 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22102 Log: Merged revision(s) 22100 from trunk/OpenMPT: [Fix] MED: Don't enable Amiga resampler if any stereo samples are found. Fixes silent playback with samples that contain identical but inverted sample data on both channels (https://www.un4seen.com/forum/?topic=15448.msg144058#msg144058). ........ Modified: branches/OpenMPT-1.30/ (props changed) branches/OpenMPT-1.30/soundlib/Load_med.cpp Modified: branches/OpenMPT-1.30/soundlib/Load_med.cpp ============================================================================== --- branches/OpenMPT-1.30/soundlib/Load_med.cpp Tue Nov 5 18:44:52 2024 (r22101) +++ branches/OpenMPT-1.30/soundlib/Load_med.cpp Tue Nov 5 18:45:40 2024 (r22102) @@ -919,6 +919,7 @@ { sampleIO |= SampleIO::stereoSplit; length /= 2; + m_SongFlags.reset(SONG_ISAMIGA); // Amiga resampler does not handle stereo samples } if(instrHeader.type & MMDInstrHeader::DELTA) { |
From: <sv...@op...> - 2024-11-05 17:45:05
|
Author: sagamusix Date: Tue Nov 5 18:44:52 2024 New Revision: 22101 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22101 Log: Merged revision(s) 22100 from trunk/OpenMPT: [Fix] MED: Don't enable Amiga resampler if any stereo samples are found. Fixes silent playback with samples that contain identical but inverted sample data on both channels (https://www.un4seen.com/forum/?topic=15448.msg144058#msg144058). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_med.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_med.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_med.cpp Tue Nov 5 18:40:58 2024 (r22100) +++ branches/OpenMPT-1.31/soundlib/Load_med.cpp Tue Nov 5 18:44:52 2024 (r22101) @@ -969,6 +969,7 @@ { sampleIO |= SampleIO::stereoSplit; length /= 2; + m_SongFlags.reset(SONG_ISAMIGA); // Amiga resampler does not handle stereo samples } if(instrHeader.type & MMDInstrHeader::DELTA) { |
From: <sv...@op...> - 2024-11-05 17:41:09
|
Author: sagamusix Date: Tue Nov 5 18:40:58 2024 New Revision: 22100 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22100 Log: [Fix] MED: Don't enable Amiga resampler if any stereo samples are found. Fixes silent playback with samples that contain identical but inverted sample data on both channels (https://www.un4seen.com/forum/?topic=15448.msg144058#msg144058). Modified: trunk/OpenMPT/soundlib/Load_med.cpp Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Mon Nov 4 23:32:04 2024 (r22099) +++ trunk/OpenMPT/soundlib/Load_med.cpp Tue Nov 5 18:40:58 2024 (r22100) @@ -1160,6 +1160,7 @@ { sampleIO |= SampleIO::stereoSplit; length /= 2; + m_SongFlags.reset(SONG_ISAMIGA); // Amiga resampler does not handle stereo samples } if(instrHeader.type & MMDInstrHeader::DELTA) { |
From: <sv...@op...> - 2024-11-04 22:32:16
|
Author: sagamusix Date: Mon Nov 4 23:32:04 2024 New Revision: 22099 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22099 Log: [Mod] Slightly improve spacings in reworked stream export dialog. Modified: trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 4 21:11:44 2024 (r22098) +++ trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 4 23:32:04 2024 (r22099) @@ -1165,13 +1165,13 @@ LTEXT "50ms",IDC_STATIC,211,257,23,8 END -IDD_WAVECONVERT DIALOGEX 0, 0, 389, 290 +IDD_WAVECONVERT DIALOGEX 0, 0, 389, 284 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Export" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - DEFPUSHBUTTON "&OK",IDOK,270,270,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,330,270,50,14 + DEFPUSHBUTTON "&OK",IDOK,270,264,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,330,264,50,14 GROUPBOX "For&mat",IDC_STATIC,6,6,186,66 COMBOBOX IDC_COMBO5,12,18,174,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO1,12,36,54,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -1191,7 +1191,7 @@ "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,180,174,12 CONTROL "Clear plugin &buffers before exporting",IDC_RENDERSILENCE, "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,192,174,12 - GROUPBOX "Limit",IDC_STATIC,198,6,186,126 + GROUPBOX "Limit",IDC_STATIC,198,6,186,120 CONTROL "Limit song &length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,18,114,10 EDITTEXT IDC_EDIT2,324,18,50,12,ES_AUTOHSCROLL LTEXT "Repea&t",IDC_STATIC,204,34,36,12,SS_CENTERIMAGE @@ -1200,34 +1200,34 @@ LTEXT "times",IDC_STATIC,282,34,59,12,SS_CENTERIMAGE CONTROL "All Sub Songs (S&eparate Files)",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,204,54,138,12 CONTROL "&Sub Song:",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,204,72,72,12 - CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,204,114,72,12 + CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,204,108,72,12 EDITTEXT IDC_EDIT12,276,72,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN6,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,306,72,11,11 - CONTROL "",IDC_SUBSONG,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,215,90,163,18 - EDITTEXT IDC_EDIT3,276,114,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,300,119,11,11 - CTEXT "to",IDC_STATIC,318,114,8,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT4,330,114,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,354,119,11,11 - GROUPBOX "Tags",IDC_STATIC,198,138,186,126 - CONTROL "Incl&ude Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,156,174,10 - LTEXT "Title:",IDC_STATIC,204,174,17,8 - EDITTEXT IDC_EDIT11,240,170,138,12,ES_AUTOHSCROLL - LTEXT "Author:",IDC_STATIC,204,190,30,8 - EDITTEXT IDC_EDIT6,240,190,138,12,ES_AUTOHSCROLL - LTEXT "Album:",IDC_STATIC,204,209,30,8 - EDITTEXT IDC_EDIT7,240,206,138,12,ES_AUTOHSCROLL - LTEXT "URL:",IDC_STATIC,204,226,30,8 - EDITTEXT IDC_EDIT8,240,225,138,12,ES_AUTOHSCROLL - LTEXT "Genre:",IDC_STATIC,204,244,29,8 - EDITTEXT IDC_EDIT10,240,242,78,12,ES_AUTOHSCROLL - COMBOBOX IDC_COMBO3,240,242,78,64,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "Year:",IDC_STATIC,324,244,18,8 - EDITTEXT IDC_EDIT9,348,242,30,12,ES_AUTOHSCROLL | ES_NUMBER - GROUPBOX "Export To",IDC_STATIC,6,216,186,48 + CONTROL "",IDC_SUBSONG,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,215,86,163,18 + EDITTEXT IDC_EDIT3,276,108,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,300,113,11,11 + CTEXT "to",IDC_STATIC,318,108,8,12,SS_CENTERIMAGE + EDITTEXT IDC_EDIT4,330,108,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,354,113,11,11 + GROUPBOX "Tags",IDC_STATIC,198,132,186,126 + CONTROL "Incl&ude Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,151,174,10 + LTEXT "Title:",IDC_STATIC,204,169,17,8 + EDITTEXT IDC_EDIT11,240,164,138,12,ES_AUTOHSCROLL + LTEXT "Author:",IDC_STATIC,204,185,30,8 + EDITTEXT IDC_EDIT6,240,185,138,12,ES_AUTOHSCROLL + LTEXT "Album:",IDC_STATIC,204,204,30,8 + EDITTEXT IDC_EDIT7,240,201,138,12,ES_AUTOHSCROLL + LTEXT "URL:",IDC_STATIC,204,220,30,8 + EDITTEXT IDC_EDIT8,240,220,138,12,ES_AUTOHSCROLL + LTEXT "Genre:",IDC_STATIC,204,239,29,8 + EDITTEXT IDC_EDIT10,240,236,78,12,ES_AUTOHSCROLL + COMBOBOX IDC_COMBO3,240,236,78,64,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "Year:",IDC_STATIC,324,239,18,8 + EDITTEXT IDC_EDIT9,348,236,30,12,ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX "Export To",IDC_STATIC,6,216,186,42 CONTROL "&File",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,228,38,8 - CONTROL "Sampl&e Slot",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,246,56,8 - COMBOBOX IDC_COMBO9,72,243,114,119,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Sampl&e Slot",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,243,56,8 + COMBOBOX IDC_COMBO9,72,240,114,119,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_PROGRESS DIALOGEX 0, 0, 220, 55 @@ -2330,7 +2330,7 @@ IDD_WAVECONVERT, DIALOG BEGIN RIGHTMARGIN, 338 - BOTTOMMARGIN, 287 + BOTTOMMARGIN, 281 END IDD_PROGRESS, DIALOG |
From: <sv...@op...> - 2024-11-04 20:11:51
|
Author: sagamusix Date: Mon Nov 4 21:11:44 2024 New Revision: 22098 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22098 Log: [Ref] Small NOTE_MAX related cleanups. Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp Mon Nov 4 19:54:34 2024 (r22097) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp Mon Nov 4 21:11:44 2024 (r22098) @@ -1686,7 +1686,7 @@ { ModInstrument *pIns = sndFile.Instruments[m->instr]; s += mpt::ToCString(sndFile.GetCharsetInternal(), pIns->name); - if((m->note) && (m->note <= NOTE_MAX)) + if(m->IsNote()) { const SAMPLEINDEX nsmp = pIns->Keyboard[m->note - 1]; if((nsmp) && (nsmp <= sndFile.GetNumSamples())) Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp ============================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp Mon Nov 4 19:54:34 2024 (r22097) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp Mon Nov 4 21:11:44 2024 (r22098) @@ -1165,12 +1165,7 @@ DialogBase::OnInitDialog(); ModInstrument *pIns = sndFile.Instruments[m_nInstrument]; if(pIns) - { - for(UINT i = 0; i < NOTE_MAX; i++) - { - KeyboardMap[i] = pIns->Keyboard[i]; - } - } + KeyboardMap = pIns->Keyboard; m_Keyboard.Init(this, 3, TRUE); m_SbOctave.SetRange(0, 7); m_SbOctave.SetPos(4); Modified: trunk/OpenMPT/mptrack/dlg_misc.h ============================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h Mon Nov 4 19:54:34 2024 (r22097) +++ trunk/OpenMPT/mptrack/dlg_misc.h Mon Nov 4 21:11:44 2024 (r22098) @@ -166,8 +166,8 @@ bool m_mouseCapture = false, m_cursorNotify = false; bool m_mouseDown = false; - uint8 KeyFlags[NOTE_MAX]; // 10 octaves max - SAMPLEINDEX m_sampleNum[NOTE_MAX]; + std::array<uint8, NOTE_MAX> KeyFlags; // 10 octaves max + std::array<SAMPLEINDEX, NOTE_MAX> m_sampleNum; public: CKeyboardControl() = default; @@ -211,7 +211,7 @@ CSoundFile &sndFile; const INSTRUMENTINDEX m_nInstrument; - SAMPLEINDEX KeyboardMap[NOTE_MAX]; + std::array<SAMPLEINDEX, NOTE_MAX - NOTE_MIN + 1> KeyboardMap; MouseAction mouseAction = MouseAction::Unknown; public: |
From: <sv...@op...> - 2024-11-04 18:54:46
|
Author: sagamusix Date: Mon Nov 4 19:54:34 2024 New Revision: 22097 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22097 Log: [Mod] FC: Import a volume sequence speed of 0 more accurately (waits 256 ticks instead of stopping script, not that it would matter much...) Modified: trunk/OpenMPT/soundlib/Load_fc.cpp Modified: trunk/OpenMPT/soundlib/Load_fc.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_fc.cpp Mon Nov 4 18:59:19 2024 (r22096) +++ trunk/OpenMPT/soundlib/Load_fc.cpp Mon Nov 4 19:54:34 2024 (r22097) @@ -118,8 +118,9 @@ { FileReader file{script}; const bool isVolume = startSequence > 255; + const uint8 volScriptSpeed = (script[0] > 0) ? script[0] : uint8_max; if(isVolume) - events.push_back(InstrumentSynth::Event::SetStepSpeed(script[0], true)); + events.push_back(InstrumentSynth::Event::SetStepSpeed(volScriptSpeed, true)); std::vector<uint8> sequencesToParse(1, static_cast<uint8>(isVolume ? 0 : startSequence)); std::bitset<256> parsedSequences; @@ -221,11 +222,11 @@ case 0xE8: // Sustain (time) { const uint8 delay = file.ReadUint8(); - if(isVolume && script[0] > 1) + if(isVolume && volScriptSpeed > 1) { events.push_back(InstrumentSynth::Event::SetStepSpeed(1, true)); - events.push_back(InstrumentSynth::Event::Delay(static_cast<uint16>(delay + script[0] - 2))); - events.push_back(InstrumentSynth::Event::SetStepSpeed(script[0], true)); + events.push_back(InstrumentSynth::Event::Delay(static_cast<uint16>(delay + volScriptSpeed - 2))); + events.push_back(InstrumentSynth::Event::SetStepSpeed(volScriptSpeed, true)); } else if(delay) { events.push_back(InstrumentSynth::Event::Delay(delay - 1)); @@ -473,7 +474,7 @@ { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 32, 16, 32, 32, 16, 16, 48, + 16, 16, 16, 16, 16, 16, 16, 16, 32, 16, 32, 32, 16, 16, 48, // Future Composer 1.4 imports the last sample with a length of 32 instead, causing some older FC files to be detuned. }; static constexpr uint8 SampleData[] = |
From: <sv...@op...> - 2024-11-04 17:59:32
|
Author: sagamusix Date: Mon Nov 4 18:59:19 2024 New Revision: 22096 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22096 Log: Merged revision(s) 22090, 22092 from trunk/OpenMPT: [Fix] MED: Fix correct octave transposition in some MED files that have hardware mixing disabled but sample transpose enabled; hopefully doesn't break anything else. Fixes Journey.med (https://www.un4seen.com/forum/?topic=15448.msg143713#msg143713). ........ [Var] Update links in credits. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/common/version.cpp branches/OpenMPT-1.31/soundlib/Load_med.cpp Modified: branches/OpenMPT-1.31/common/version.cpp ============================================================================== --- branches/OpenMPT-1.31/common/version.cpp Mon Nov 4 18:58:14 2024 (r22095) +++ branches/OpenMPT-1.31/common/version.cpp Mon Nov 4 18:59:19 2024 (r22096) @@ -660,7 +660,7 @@ "https://github.com/iamgreaser/it2everything/\n" "\n" "Antti S. Lankila for Amiga resampler implementation\n" - "https://bel.fi/alankila/modguide/interpolate.txt\n" + "https://web.archive.org/web/20221228071135/https://bel.fi/alankila/modguide/\n" "\n" "Shayde / Reality Productions for Opal OPL3 emulator\n" "https://www.3eality.com/\n" @@ -774,7 +774,7 @@ "https://www.behance.net/ulfurkolka\n" "\n" "Nobuyuki for file icon\n" - "https://twitter.com/nobuyukinyuu\n" + "https://github.com/nobuyukinyuu/\n" "\n" #endif "Daniel Collin (emoon/TBL) for providing test infrastructure\n" @@ -784,8 +784,8 @@ "in the form of ideas, testing and support;\n" "thanks particularly to:\n" "33, 8bitbubsy, AliceLR, Anboi, BooT-SectoR-ViruZ, Bvanoudtshoorn\n" - "christofori, cubaxd, Diamond, Ganja, Georg, Goor00,\n" - "Harbinger, jmkz, KrazyKatz, LPChip, Nofold, Rakib, Sam Zen\n" + "a11cf0, christofori, cubaxd, Diamond, Ganja, Georg, Goor00,\n" + "Harbinger, jmkz, KrazyKatz, LPChip, MiDoRi, Nofold, Rakib, Sam Zen\n" "Skaven, Skilletaudio, Snu, Squirrel Havoc, Teimoso, Waxhead\n" "\n" #ifdef MPT_WITH_VST Modified: branches/OpenMPT-1.31/soundlib/Load_med.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_med.cpp Mon Nov 4 18:58:14 2024 (r22095) +++ branches/OpenMPT-1.31/soundlib/Load_med.cpp Mon Nov 4 18:59:19 2024 (r22096) @@ -602,7 +602,7 @@ param1 = param; } // Octave wrapping for 4-channel modules - if(ctx.hardwareMixSamples && note >= NOTE_MIDDLEC + 2 * 12) + if(note >= NOTE_MIDDLEC + 2 * 12) needInstruments = true; if(note >= NOTE_MIN && note <= NOTE_MAX) @@ -895,13 +895,14 @@ { needInstruments = true; instr.Transpose(-24); - } else if(!isSynth && hardwareMixSamples) + } else if(!isSynth && (hardwareMixSamples || sampleHeader.sampleTranspose)) { + int offset = NOTE_MIDDLEC + (hardwareMixSamples ? 24 : 36); for(auto ¬e : instr.NoteMap) { int realNote = note + sampleHeader.sampleTranspose; - if(realNote >= NOTE_MIDDLEC + 24) - note -= static_cast<uint8>(mpt::align_down(realNote - NOTE_MIDDLEC - 12, 12)); + if(realNote >= offset) + note -= static_cast<uint8>(mpt::align_down(realNote - offset + 12, 12)); } } |
From: <sv...@op...> - 2024-11-04 17:58:27
|
Author: sagamusix Date: Mon Nov 4 18:58:14 2024 New Revision: 22095 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22095 Log: Merged revision(s) 22094 from trunk/OpenMPT: [Fix] After loading a file with missing external samples, OpenMPT still prompted to save those empty sample slots to disk when closing the module. Doing that resulted in a crash. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp branches/OpenMPT-1.31/soundlib/SampleFormats.cpp Modified: branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp Mon Nov 4 18:57:43 2024 (r22094) +++ branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp Mon Nov 4 18:58:14 2024 (r22095) @@ -270,6 +270,8 @@ if(m_sndFile.GetSample(smp).uFlags[SMP_MODIFIED]) status = _T("modified"); + else if(!m_sndFile.GetSample(smp).HasSampleData()) + continue; // Sample was already missing when the file was loaded, nothing we can do here else if(!mpt::native_fs{}.is_file(m_sndFile.GetSamplePath(smp))) status = _T("missing"); else Modified: branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp Mon Nov 4 18:57:43 2024 (r22094) +++ branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp Mon Nov 4 18:58:14 2024 (r22095) @@ -558,7 +558,7 @@ { #ifdef MPT_WITH_FLAC const ModSample &sample = Samples[nSample]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; FLAC__StreamEncoder_RAII encoder(f); Modified: branches/OpenMPT-1.31/soundlib/SampleFormats.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/SampleFormats.cpp Mon Nov 4 18:57:43 2024 (r22094) +++ branches/OpenMPT-1.31/soundlib/SampleFormats.cpp Mon Nov 4 18:58:14 2024 (r22095) @@ -559,7 +559,7 @@ bool CSoundFile::SaveWAVSample(SAMPLEINDEX nSample, std::ostream &f) const { const ModSample &sample = Samples[nSample]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; mpt::IO::OFile<std::ostream> ff(f); @@ -843,6 +843,8 @@ bool CSoundFile::SaveRAWSample(SAMPLEINDEX nSample, std::ostream &f) const { const ModSample &sample = Samples[nSample]; + if(!sample.HasSampleData()) + return false; SampleIO( sample.uFlags[CHN_16BIT] ? SampleIO::_16bit : SampleIO::_8bit, sample.uFlags[CHN_STEREO] ? SampleIO::stereoInterleaved : SampleIO::mono, @@ -1188,6 +1190,8 @@ bool CSoundFile::SaveS3ISample(SAMPLEINDEX smp, std::ostream &f) const { const ModSample &sample = Samples[smp]; + if(!sample.uFlags[CHN_ADLIB] && !sample.HasSampleData()) + return false; S3MSampleHeader sampleHeader{}; SmpLength length = sampleHeader.ConvertToS3M(sample); mpt::String::WriteBuf(mpt::String::nullTerminated, sampleHeader.name) = m_szNames[smp]; @@ -2762,7 +2766,7 @@ bool CSoundFile::SaveIFFSample(SAMPLEINDEX smp, std::ostream &f) const { const ModSample &sample = Samples[smp]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; mpt::IO::OFile<std::ostream> ff(f); |
From: <sv...@op...> - 2024-11-04 17:57:50
|
Author: sagamusix Date: Mon Nov 4 18:57:43 2024 New Revision: 22094 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22094 Log: [Fix] After loading a file with missing external samples, OpenMPT still prompted to save those empty sample slots to disk when closing the module. Doing that resulted in a crash. Modified: trunk/OpenMPT/mptrack/ExternalSamples.cpp trunk/OpenMPT/soundlib/SampleFormatFLAC.cpp trunk/OpenMPT/soundlib/SampleFormats.cpp Modified: trunk/OpenMPT/mptrack/ExternalSamples.cpp ============================================================================== --- trunk/OpenMPT/mptrack/ExternalSamples.cpp Mon Nov 4 18:38:39 2024 (r22093) +++ trunk/OpenMPT/mptrack/ExternalSamples.cpp Mon Nov 4 18:57:43 2024 (r22094) @@ -271,6 +271,8 @@ if(m_sndFile.GetSample(smp).uFlags[SMP_MODIFIED]) status = _T("modified"); + else if(!m_sndFile.GetSample(smp).HasSampleData()) + continue; // Sample was already missing when the file was loaded, nothing we can do here else if(!mpt::native_fs{}.is_file(m_sndFile.GetSamplePath(smp))) status = _T("missing"); else Modified: trunk/OpenMPT/soundlib/SampleFormatFLAC.cpp ============================================================================== --- trunk/OpenMPT/soundlib/SampleFormatFLAC.cpp Mon Nov 4 18:38:39 2024 (r22093) +++ trunk/OpenMPT/soundlib/SampleFormatFLAC.cpp Mon Nov 4 18:57:43 2024 (r22094) @@ -558,7 +558,7 @@ { #ifdef MPT_WITH_FLAC const ModSample &sample = Samples[nSample]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; FLAC__StreamEncoder_RAII encoder(f); Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp ============================================================================== --- trunk/OpenMPT/soundlib/SampleFormats.cpp Mon Nov 4 18:38:39 2024 (r22093) +++ trunk/OpenMPT/soundlib/SampleFormats.cpp Mon Nov 4 18:57:43 2024 (r22094) @@ -559,7 +559,7 @@ bool CSoundFile::SaveWAVSample(SAMPLEINDEX nSample, std::ostream &f) const { const ModSample &sample = Samples[nSample]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; mpt::IO::OFile<std::ostream> ff(f); @@ -843,6 +843,8 @@ bool CSoundFile::SaveRAWSample(SAMPLEINDEX nSample, std::ostream &f) const { const ModSample &sample = Samples[nSample]; + if(!sample.HasSampleData()) + return false; SampleIO( sample.uFlags[CHN_16BIT] ? SampleIO::_16bit : SampleIO::_8bit, sample.uFlags[CHN_STEREO] ? SampleIO::stereoInterleaved : SampleIO::mono, @@ -1188,6 +1190,8 @@ bool CSoundFile::SaveS3ISample(SAMPLEINDEX smp, std::ostream &f) const { const ModSample &sample = Samples[smp]; + if(!sample.uFlags[CHN_ADLIB] && !sample.HasSampleData()) + return false; S3MSampleHeader sampleHeader{}; SmpLength length = sampleHeader.ConvertToS3M(sample); mpt::String::WriteBuf(mpt::String::nullTerminated, sampleHeader.name) = m_szNames[smp]; @@ -2774,7 +2778,7 @@ bool CSoundFile::SaveIFFSample(SAMPLEINDEX smp, std::ostream &f) const { const ModSample &sample = Samples[smp]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; mpt::IO::OFile<std::ostream> ff(f); |
From: <sv...@op...> - 2024-11-04 17:38:52
|
Author: sagamusix Date: Mon Nov 4 18:38:39 2024 New Revision: 22093 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22093 Log: [Mod] Change NOTE_MAX so that there are 128 valid notes instead of 120, like in the instrument keyboard mapping. Fixes bad notes in some Future Composer files (https://www.un4seen.com/forum/?topic=15448.msg144041#msg144041). [Var] Update MPTM/XM tests to verify correct writing of special notes and notes at the upper/lower note limit. Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/soundlib/InstrumentSynth.cpp trunk/OpenMPT/soundlib/Load_fc.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/mod_specifications.cpp trunk/OpenMPT/soundlib/modcommand.h trunk/OpenMPT/test/test.cpp trunk/OpenMPT/test/test.mptm trunk/OpenMPT/test/test.xm Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -175,6 +175,13 @@ dc.IntersectClipRect(&rcClient); const CSoundFile &sndFile = m_modDoc.GetSoundFile(); + const auto &modSpecs = sndFile.GetModSpecifications(); + int noteMin = 0, noteMax = NOTE_MAX - NOTE_MIN; + if(modSpecs.instrumentsMax) + { + noteMin = modSpecs.noteMin - NOTE_MIN; + noteMax = modSpecs.noteMax - NOTE_MIN; + } if (m_cxFont > 0 && m_cyFont > 0) { const bool focus = (::GetFocus() == m_hWnd); @@ -185,11 +192,11 @@ int nPos = m_nNote - (nNotes/2); int ypaint = 0; mpt::winstring s; - for (int ynote=0; ynote<nNotes; ynote++, ypaint+=m_cyFont, nPos++) + for(int ynote = 0; ynote < nNotes; ynote++, ypaint += m_cyFont, nPos++) { // Note - bool isValidPos = (nPos >= 0) && (nPos < NOTE_MAX - NOTE_MIN + 1); - if (isValidPos) + const bool isValidPos = mpt::is_in_range(nPos, noteMin, noteMax); + if(isValidPos) { s = mpt::ToWin(sndFile.GetNoteName(static_cast<ModCommand::NOTE>(nPos + 1), m_nInstrument)); s.resize(4); @@ -230,7 +237,7 @@ rect.left = rcClient.left + m_cxFont * 2 + 3; rect.right = rcClient.right; s = _T(" .."); - if(pIns && nPos >= 0 && nPos < NOTE_MAX && pIns->Keyboard[nPos]) + if(pIns && isValidPos && pIns->Keyboard[nPos]) { s = mpt::tfmt::right(3, mpt::tfmt::dec(pIns->Keyboard[nPos])); } @@ -755,40 +762,48 @@ bool redraw = false; //HACK: handle numpad (convert numpad number key to normal number key) - if ((k >= VK_NUMPAD0) && (k <= VK_NUMPAD9)) return HandleChar(k-VK_NUMPAD0+'0'); + if ((k >= VK_NUMPAD0) && (k <= VK_NUMPAD9)) + return HandleChar(k-VK_NUMPAD0+'0'); + + const CSoundFile &sndFile = m_modDoc.GetSoundFile(); + const auto &modSpecs = sndFile.GetModSpecifications(); + UINT noteMin = 0, noteMax = NOTE_MAX - NOTE_MIN; + if(modSpecs.instrumentsMax) + { + noteMin = modSpecs.noteMin - NOTE_MIN; + noteMax = modSpecs.noteMax - NOTE_MIN; + } switch(k) { case VK_RIGHT: - if (!m_bIns) { m_bIns = true; redraw = true; } else - if (m_nNote < NOTE_MAX - NOTE_MIN) { m_nNote++; m_bIns = false; redraw = true; } + if (!m_bIns) { m_bIns = true; redraw = true; } + else if (m_nNote < noteMax) { m_nNote++; m_bIns = false; redraw = true; } break; case VK_LEFT: - if (m_bIns) { m_bIns = false; redraw = true; } else - if (m_nNote) { m_nNote--; m_bIns = true; redraw = true; } + if (m_bIns) { m_bIns = false; redraw = true; } + else if (m_nNote > noteMin) { m_nNote--; m_bIns = true; redraw = true; } break; case VK_UP: - if (m_nNote > 0) { m_nNote--; redraw = true; } + if (m_nNote > noteMin) { m_nNote--; redraw = true; } break; case VK_DOWN: - if (m_nNote < NOTE_MAX - 1) { m_nNote++; redraw = true; } + if (m_nNote < noteMax) { m_nNote++; redraw = true; } break; case VK_PRIOR: - if (m_nNote > 3) { m_nNote -= 3; redraw = true; } else - if (m_nNote > 0) { m_nNote = 0; redraw = true; } + if (m_nNote > noteMin + 3) { m_nNote -= 3; redraw = true; } + else if (m_nNote > noteMin) { m_nNote = noteMin; redraw = true; } break; case VK_NEXT: - if (m_nNote+3 < NOTE_MAX) { m_nNote += 3; redraw = true; } else - if (m_nNote < NOTE_MAX - NOTE_MIN) { m_nNote = NOTE_MAX - NOTE_MIN; redraw = true; } + if (m_nNote + 3 < noteMax) { m_nNote += 3; redraw = true; } + else if (m_nNote < noteMax) { m_nNote = noteMax; redraw = true; } break; case VK_HOME: - if(m_nNote > 0) { m_nNote = 0; redraw = true; } + if(m_nNote > noteMin) { m_nNote = noteMin; redraw = true; } break; case VK_END: - if(m_nNote < NOTE_MAX - NOTE_MIN) { m_nNote = NOTE_MAX - NOTE_MIN; redraw = true; } + if(m_nNote < noteMax) { m_nNote = noteMax; redraw = true; } break; -// case VK_TAB: -// return true; case VK_RETURN: { ModInstrument *pIns = m_modDoc.GetSoundFile().Instruments[m_nInstrument]; Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -493,7 +493,7 @@ { uint8 fcNote = static_cast<uint8>(m_fcPitch >= 0 ? m_fcPitch + chn.nLastNote - NOTE_MIN : m_fcPitch) & 0x7F; static_assert(mpt::array_size<decltype(chn.pModInstrument->NoteMap)>::size > 0x7F); - if(m_fcPitch) + if(m_fcPitch && ModCommand::IsNote(chn.nLastNote)) period += (sndFile.GetPeriodFromNote(chn.pModInstrument->NoteMap[fcNote], chn.nFineTune, chn.nC5Speed) - sndFile.GetPeriodFromNote(chn.pModInstrument->NoteMap[chn.nLastNote - NOTE_MIN], chn.nFineTune, chn.nC5Speed)); if(doVibratoFC) Modified: trunk/OpenMPT/soundlib/Load_fc.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_fc.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/Load_fc.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -423,6 +423,7 @@ if(!instr) return false; + static_assert(NOTE_MAX - NOTE_MIN + 1 >= 128, "Need at least a note range of 128 for correct emulation of note wrap-around logic in Future Composer"); for(uint8 note = 0; note < static_cast<uint8>(instr->NoteMap.size()); note++) { if(note < 48) Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/Load_it.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -1098,11 +1098,14 @@ uint8 note = patternData.ReadUint8(); if(note < 0x80) note += NOTE_MIN; - if(!(GetType() & MOD_TYPE_MPT)) - { - if(note > NOTE_MAX && note < 0xFD) note = NOTE_FADE; - else if(note == 0xFD) note = NOTE_NONE; - } + else if(note == 0xFF) + note = NOTE_KEYOFF; + else if(note == 0xFE) + note = NOTE_NOTECUT; + else if(note == 0xFD && GetType() != MOD_TYPE_MPT) + note = NOTE_NONE; // Note: in MPTM format, NOTE_FADE is written as 0xFD to preserve compatibility with older OpenMPT versions. + else + note = NOTE_FADE; m.note = lastValue[ch].note = note; } if(chnMask[ch] & 2) @@ -1769,14 +1772,23 @@ } auto &chnState = chnStates[ch]; - uint8 b = 0; + uint8 b = 1; uint8 vol = 0xFF; uint8 note = m->note; - if (note != NOTE_NONE) b |= 1; - if (m->IsNote()) note -= NOTE_MIN; - if (note == NOTE_FADE && GetType() != MOD_TYPE_MPT) note = 0xF6; - if (m->instr) b |= 2; - if (m->volcmd != VOLCMD_NONE) + if(note >= NOTE_MIN && note <= NOTE_MIN + 119) + note = m->note - NOTE_MIN; + else if(note == NOTE_FADE) + note = (GetType() == MOD_TYPE_MPT) ? 0xFD : 0xF6; + else if(note == NOTE_NOTECUT) + note = 0xFE; + else if(note == NOTE_KEYOFF) + note = 0xFF; + else + b = 0; + + if(m->instr) + b |= 2; + if(m->volcmd != VOLCMD_NONE) { vol = std::min(m->vol, uint8(9)); switch(m->volcmd) @@ -1801,7 +1813,8 @@ default: vol = 0xFF; } } - if (vol != 0xFF) b |= 4; + if(vol != 0xFF) + b |= 4; uint8 command = 0, param = 0; if(m->command == CMD_VOLUME && vol == 0xFF) { Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_s3m.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/Load_s3m.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -969,22 +969,23 @@ { info |= s3mNotePresent; - if(note == NOTE_NONE) - { - note = s3mNoteNone; - } else if(ModCommand::IsSpecialNote(note)) + if(ModCommand::IsSpecialNote(note)) { // Note Cut note = s3mNoteOff; - } else if(note < 12 + NOTE_MIN) + } else if(note < NOTE_MIN + 12) { // Too low note = 0; - } else if(note <= NOTE_MAX) + } else if(note <= NOTE_MIN + 107) { note -= (12 + NOTE_MIN); note = static_cast<uint8>((note % 12) + ((note / 12) << 4)); } + else + { + note = s3mNoteNone; + } if(m.instr > 0 && m.instr <= GetNumSamples()) { Modified: trunk/OpenMPT/soundlib/Load_xm.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/Load_xm.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -1262,9 +1262,12 @@ uint8 note = p->note, command = 0, param = 0; ModSaveCommand(*p, command, param, true, compatibilityExport); - if (note >= NOTE_MIN_SPECIAL) note = 97; else - if ((note <= 12) || (note > 96+12)) note = 0; else - note -= 12; + if(note >= NOTE_MIN_SPECIAL) + note = 97; + else if(note < NOTE_MIN + 12 || note >= NOTE_MIN + 12 + 96) + note = 0; + else + note -= 12; uint8 vol = 0; if (p->volcmd != VOLCMD_NONE) { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/Sndfile.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -1643,9 +1643,10 @@ return specialNoteNames[note - NOTE_MIN_SPECIAL]; } else if(ModCommand::IsNote(note)) { + const int octave = (note - NOTE_MIN) / 12; return mpt::ustring() .append(noteNames[(note - NOTE_MIN) % 12]) - .append(1, static_cast<mpt::uchar>(UC_('0') + ((note - NOTE_MIN) / 12))) + .append(1, static_cast<mpt::uchar>((octave <= 9 ? UC_('0') : UC_('A') - 10) + octave)) ; // e.g. "C#" + "5" } else if(note == NOTE_NONE) { @@ -2014,7 +2015,7 @@ if(targetIns == nullptr) return false; - return mpt::contains(mpt::as_span(targetIns->Keyboard).first(NOTE_MAX), sample); + return mpt::contains(mpt::as_span(targetIns->Keyboard).first(NOTE_MAX - NOTE_MIN + 1), sample); } Modified: trunk/OpenMPT/soundlib/mod_specifications.cpp ============================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/mod_specifications.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -29,7 +29,7 @@ MOD_TYPE_MPT, // Internal MODTYPE value "mptm", // File extension NOTE_MIN, // Minimum note index - NOTE_MAX, // Maximum note index + NOTE_MIN + 119, // Maximum note index 4000, // Pattern max. 4000, // Order max. MAX_SEQUENCES, // Sequences max Modified: trunk/OpenMPT/soundlib/modcommand.h ============================================================================== --- trunk/OpenMPT/soundlib/modcommand.h Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/soundlib/modcommand.h Mon Nov 4 18:38:39 2024 (r22093) @@ -23,7 +23,7 @@ { NOTE_NONE = 0, // Empty note cell NOTE_MIN = 1, // Minimum note value - NOTE_MAX = 120, // Maximum note value + NOTE_MAX = 128, // Maximum note value NOTE_MIDDLEC = (5 * 12 + NOTE_MIN), NOTE_KEYOFF = 0xFF, // === (Note Off, releases envelope / fades samples, stops plugin note) NOTE_NOTECUT = 0xFE, // ^^^ (Cuts sample / stops all plugin notes) Modified: trunk/OpenMPT/test/test.cpp ============================================================================== --- trunk/OpenMPT/test/test.cpp Sun Nov 3 18:28:27 2024 (r22092) +++ trunk/OpenMPT/test/test.cpp Mon Nov 4 18:38:39 2024 (r22093) @@ -2863,6 +2863,9 @@ VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 0)->instr, 0); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 0)->volcmd, VOLCMD_VIBRATOSPEED); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 0)->vol, 15); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 1)->note, NOTE_MIN + 12); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 1)->note, NOTE_MIN + 12 + 95); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(2, 1)->note, NOTE_KEYOFF); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(31, 0)->IsEmpty(), true); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(31, 1)->IsEmpty(), false); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(31, 1)->IsPcNote(), false); @@ -3128,7 +3131,7 @@ VERIFY_EQUAL_NONCONT(pIns->pluginVelocityHandling, PLUGIN_VELOCITYHANDLING_VOLUME); VERIFY_EQUAL_NONCONT(pIns->pluginVolumeHandling, PLUGIN_VOLUMEHANDLING_MIDI); - for(size_t i = 0; i < NOTE_MAX; i++) + for(size_t i = 0; i < 120; i++) { VERIFY_EQUAL_NONCONT(pIns->Keyboard[i], (i == NOTE_MIDDLEC - 1) ? (ins * 1111) : 1); VERIFY_EQUAL_NONCONT(pIns->NoteMap[i], (i == NOTE_MIDDLEC - 1) ? (i + 13) : (i + 1)); @@ -3211,6 +3214,17 @@ VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 0)->instr, 99); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 0)->GetValueVolCol(), 1); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 0)->GetValueEffectCol(), 200); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 0)->IsPcNote(), true); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 0)->note, NOTE_PCS); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 0)->instr, 250); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 0)->GetValueVolCol(), 999); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 0)->GetValueEffectCol(), 999); + + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(0, 1)->note, NOTE_MIN); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(1, 1)->note, NOTE_MIN + 119); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(2, 1)->note, NOTE_KEYOFF); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(3, 1)->note, NOTE_NOTECUT); + VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(4, 1)->note, NOTE_FADE); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(31, 0)->IsEmpty(), true); VERIFY_EQUAL_NONCONT(sndFile.Patterns[1].GetpModCommand(31, 1)->IsEmpty(), false); Modified: trunk/OpenMPT/test/test.mptm ============================================================================== Binary file (source and/or target). No diff available. Modified: trunk/OpenMPT/test/test.xm ============================================================================== Binary file (source and/or target). No diff available. |
From: <sv...@op...> - 2024-11-03 17:28:41
|
Author: sagamusix Date: Sun Nov 3 18:28:27 2024 New Revision: 22092 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22092 Log: [Var] Update links in credits. Modified: trunk/OpenMPT/common/version.cpp Modified: trunk/OpenMPT/common/version.cpp ============================================================================== --- trunk/OpenMPT/common/version.cpp Sun Nov 3 09:06:42 2024 (r22091) +++ trunk/OpenMPT/common/version.cpp Sun Nov 3 18:28:27 2024 (r22092) @@ -657,7 +657,7 @@ "https://github.com/iamgreaser/it2everything/\n" "\n" "Antti S. Lankila for Amiga resampler implementation\n" - "https://bel.fi/alankila/modguide/interpolate.txt\n" + "https://web.archive.org/web/20221228071135/https://bel.fi/alankila/modguide/\n" "\n" "Shayde / Reality Productions for Opal OPL3 emulator\n" "https://www.3eality.com/\n" @@ -771,7 +771,7 @@ "https://www.behance.net/ulfurkolka\n" "\n" "Nobuyuki for file icon\n" - "https://twitter.com/nobuyukinyuu\n" + "https://github.com/nobuyukinyuu/\n" "\n" #endif "Daniel Collin (emoon/TBL) for providing test infrastructure\n" @@ -781,8 +781,8 @@ "in the form of ideas, testing and support;\n" "thanks particularly to:\n" "33, 8bitbubsy, AliceLR, Anboi, BooT-SectoR-ViruZ, Bvanoudtshoorn\n" - "christofori, cubaxd, Diamond, Ganja, Georg, Goor00,\n" - "Harbinger, jmkz, KrazyKatz, LPChip, Nofold, Rakib, Sam Zen\n" + "a11cf0, christofori, cubaxd, Diamond, Ganja, Georg, Goor00,\n" + "Harbinger, jmkz, KrazyKatz, LPChip, MiDoRi, Nofold, Rakib, Sam Zen\n" "Skaven, Skilletaudio, Snu, Squirrel Havoc, Teimoso, Waxhead\n" "\n" #ifdef MPT_WITH_VST |
From: <sv...@op...> - 2024-11-03 08:06:54
|
Author: manx Date: Sun Nov 3 09:06:42 2024 New Revision: 22091 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22091 Log: [Fix] mpt/string/types.hpp: Fix typo in r22063. Modified: trunk/OpenMPT/src/mpt/string/types.hpp Modified: trunk/OpenMPT/src/mpt/string/types.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/string/types.hpp Sat Nov 2 22:11:52 2024 (r22090) +++ trunk/OpenMPT/src/mpt/string/types.hpp Sun Nov 3 09:06:42 2024 (r22091) @@ -285,10 +285,10 @@ using u8string = std::u8string; using u8string_view = std::u8string_view; using u8char = char8_t; -#define MPT_U8CHAR(x) u8##x -#define MPT_U8LITERAL(x) u8##x -#define MPT_U8STRING(x) std::u8string(u8##x) -#define MPT_U8STRINVIEW(x) std::u8string_view(u8##x) +#define MPT_U8CHAR(x) u8##x +#define MPT_U8LITERAL(x) u8##x +#define MPT_U8STRING(x) std::u8string(u8##x) +#define MPT_U8STRINGVIEW(x) std::u8string_view(u8##x) #else // !C++20 |
From: <sv...@op...> - 2024-11-02 21:12:05
|
Author: sagamusix Date: Sat Nov 2 22:11:52 2024 New Revision: 22090 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22090 Log: [Fix] MED: Fix correct octave transposition in some MED files that have hardware mixing disabled but sample transpose enabled; hopefully doesn't break anything else. Fixes Journey.med (https://www.un4seen.com/forum/?topic=15448.msg143713#msg143713). Modified: trunk/OpenMPT/soundlib/Load_med.cpp Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Sat Nov 2 18:02:13 2024 (r22089) +++ trunk/OpenMPT/soundlib/Load_med.cpp Sat Nov 2 22:11:52 2024 (r22090) @@ -625,7 +625,7 @@ param1 = param; } // Octave wrapping for 4-channel modules - if(ctx.hardwareMixSamples && note >= NOTE_MIDDLEC + 2 * 12) + if(note >= NOTE_MIDDLEC + 2 * 12) needInstruments = true; if(note >= NOTE_MIN && note <= NOTE_MAX) @@ -1055,13 +1055,14 @@ { needInstruments = true; instr.Transpose(-24); - } else if(!isSynth && hardwareMixSamples) + } else if(!isSynth && (hardwareMixSamples || sampleHeader.sampleTranspose)) { + int offset = NOTE_MIDDLEC + (hardwareMixSamples ? 24 : 36); for(auto ¬e : instr.NoteMap) { int realNote = note + sampleHeader.sampleTranspose; - if(realNote >= NOTE_MIDDLEC + 24) - note -= static_cast<uint8>(mpt::align_down(realNote - NOTE_MIDDLEC - 12, 12)); + if(realNote >= offset) + note -= static_cast<uint8>(mpt::align_down(realNote - offset + 12, 12)); } } |
From: <sv...@op...> - 2024-11-02 17:02:19
|
Author: manx Date: Sat Nov 2 18:02:13 2024 New Revision: 22089 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22089 Log: [Fix] build: Makefile: DJGPP: Set MPT_COMPILER_NO_O instead of OPTIMIZE=none, to catch non-O optimization flags and properly support FLAVOUR suffixes again. [Fix] build: Makefile: DJGPP: Add flavour suffixes for all OPTIMIZE options. Modified: trunk/OpenMPT/build/make/config-djgpp.mk Modified: trunk/OpenMPT/build/make/config-djgpp.mk ============================================================================== --- trunk/OpenMPT/build/make/config-djgpp.mk Sat Nov 2 18:02:00 2024 (r22088) +++ trunk/OpenMPT/build/make/config-djgpp.mk Sat Nov 2 18:02:13 2024 (r22089) @@ -37,8 +37,10 @@ else CFLAGS_STDC = -std=gnu11 endif -CXXFLAGS += $(CXXFLAGS_STDCXX) -fallow-store-data-races -fno-threadsafe-statics -CFLAGS += $(CFLAGS_STDC) -fallow-store-data-races +CXXFLAGS += $(CXXFLAGS_STDCXX) +CFLAGS += $(CFLAGS_STDC) +OVERWRITE_CXXFLAGS += -fallow-store-data-races -fno-threadsafe-statics +OVERWRITE_CFLAGS += -fallow-store-data-races CPU?=generic/compatible @@ -95,6 +97,8 @@ +ifeq ($(OPTIMIZE),default) + OPT_UARCH_EMUL := -Os # interpreter OPT_UARCH_CISC := -Os # non-pipelined, scalar, in-order, optimize for size i386 am386 OPT_UARCH_PIPE := -Os # pipelined, scalar, in-order, optimize for size i486 am486 cx486slc @@ -127,6 +131,17 @@ OPT_UARCH_COMP_128 := -O3 # recompiler endif +else + +OPT_UARCH_EMUL := +OPT_UARCH_CISC := +OPT_UARCH_PIPE := +OPT_UARCH_SCAL := +OPT_UARCH_OOOE := +OPT_UARCH_COMP := + +endif + CACHE_386 :=64 # 0/64/128 @@ -394,25 +409,25 @@ # parse CPU optimization options ifeq ($(findstring -O3,$(CPUFLAGS)),-O3) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif ifeq ($(findstring -O2,$(CPUFLAGS)),-O2) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif ifeq ($(findstring -Os,$(CPUFLAGS)),-Os) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif ifeq ($(findstring -Oz,$(CPUFLAGS)),-Oz) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif ifeq ($(findstring -O1,$(CPUFLAGS)),-O1) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif ifeq ($(findstring -O0,$(CPUFLAGS)),-O0) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif ifeq ($(findstring -Og,$(CPUFLAGS)),-Og) -OPTIMIZE=none +MPT_COMPILER_NO_O=1 endif # Handle the no-FPU case by linking DJGPP's own emulator. @@ -456,7 +471,13 @@ EXESUFFIX:=-SSE$(EXESUFFIX) SOSUFFIX:=-SSE$(SOSUFFIX) endif -ifeq ($(OPTIMIZE),size) +ifeq ($(OPTIMIZE),some) +EXESUFFIX:=-O1$(EXESUFFIX) +SOSUFFIX:=-O1$(SOSUFFIX) +else ifeq ($(OPTIMIZE),extrasize) +EXESUFFIX:=-Oz$(EXESUFFIX) +SOSUFFIX:=-Oz$(SOSUFFIX) +else ifeq ($(OPTIMIZE),size) EXESUFFIX:=-Os$(EXESUFFIX) SOSUFFIX:=-Os$(SOSUFFIX) else ifeq ($(OPTIMIZE),speed) @@ -512,6 +533,7 @@ MPT_COMPILER_NOVISIBILITY=1 # causes crashes on process shutdown with liballegro +MPT_COMPILER_NOSECTIONS=1 MPT_COMPILER_NOGCSECTIONS=1 MPT_COMPILER_NOALLOCAH=1 |
From: <sv...@op...> - 2024-11-02 17:02:07
|
Author: manx Date: Sat Nov 2 18:02:00 2024 New Revision: 22088 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22088 Log: [Ref] build: Makefile: Add OPTIMIZE=default which is detectable by individual CONFIGs. [Ref] build: Makefile: Add MPT_COMPILER_NO_O to allow CONFIGs overwriting default OPTIMIZE flags. Modified: trunk/OpenMPT/Makefile Modified: trunk/OpenMPT/Makefile ============================================================================== --- trunk/OpenMPT/Makefile Sat Nov 2 17:14:58 2024 (r22087) +++ trunk/OpenMPT/Makefile Sat Nov 2 18:02:00 2024 (r22088) @@ -51,9 +51,12 @@ # XMP_OPENMPT=0 Build xmp-openmpt (XMPlay plugin) # SHARED_SONAME=1 Set SONAME of shared library # DEBUG=0 Build debug binaries without optimization and with symbols -# OPTIMIZE=vectorize -O3 +# OPTIMIZE=default vectorize +# vectorize -O3 # speed -O2 -# size -Os/-Oz +# size -Os +# extrasize -Oz +# some -O1 # test -Og # debug -O0 # none @@ -203,7 +206,7 @@ FUZZ=0 SHARED_SONAME=1 DEBUG=0 -OPTIMIZE=vectorize +OPTIMIZE=default OPTIMIZE_LTO=0 OPTIMIZE_FASTMATH=0 TEST=1 @@ -467,15 +470,56 @@ CFLAGS += -g else ifeq ($(OPTIMIZE),debug) CPPFLAGS += -CXXFLAGS += -O0 -fno-omit-frame-pointer -CFLAGS += -O0 -fno-omit-frame-pointer +ifneq ($(MPT_COMPILER_NO_O),1) +CXXFLAGS += -O0 +CFLAGS += -O0 +endif +CXXFLAGS += -fno-omit-frame-pointer +CFLAGS += -fno-omit-frame-pointer else ifeq ($(OPTIMIZE),test) CPPFLAGS += -CXXFLAGS += -Og -fno-omit-frame-pointer -CFLAGS += -Og -fno-omit-frame-pointer +ifneq ($(MPT_COMPILER_NO_O),1) +CXXFLAGS += -Og +CFLAGS += -Og +endif +CXXFLAGS += -fno-omit-frame-pointer +CFLAGS += -fno-omit-frame-pointer +else ifeq ($(OPTIMIZE),some) +ifneq ($(MPT_COMPILER_NO_O),1) +CXXFLAGS += -O1 +CFLAGS += -O1 +endif +CXXFLAGS += +CFLAGS += -fno-strict-aliasing +ifneq ($(MPT_COMPILER_NOSECTIONS),1) +CXXFLAGS += -ffunction-sections -fdata-sections +CFLAGS += -ffunction-sections -fdata-sections +endif +ifneq ($(MPT_COMPILER_NOGCSECTIONS),1) +LDFLAGS += -Wl,--gc-sections +endif +else ifeq ($(OPTIMIZE),extrasize) +ifneq ($(MPT_COMPILER_NO_O),1) +CXXFLAGS += -Oz +CFLAGS += -Oz +endif +CXXFLAGS += +CFLAGS += -fno-strict-aliasing +LDFLAGS += +ifneq ($(MPT_COMPILER_NOSECTIONS),1) +CXXFLAGS += -ffunction-sections -fdata-sections +CFLAGS += -ffunction-sections -fdata-sections +endif +ifneq ($(MPT_COMPILER_NOGCSECTIONS),1) +LDFLAGS += -Wl,--gc-sections +endif else ifeq ($(OPTIMIZE),size) +ifneq ($(MPT_COMPILER_NO_O),1) CXXFLAGS += -Os -CFLAGS += -Os -fno-strict-aliasing +CFLAGS += -Os +endif +CXXFLAGS += +CFLAGS += -fno-strict-aliasing LDFLAGS += ifneq ($(MPT_COMPILER_NOSECTIONS),1) CXXFLAGS += -ffunction-sections -fdata-sections @@ -485,8 +529,12 @@ LDFLAGS += -Wl,--gc-sections endif else ifeq ($(OPTIMIZE),speed) +ifneq ($(MPT_COMPILER_NO_O),1) CXXFLAGS += -O2 -CFLAGS += -O2 -fno-strict-aliasing +CFLAGS += -O2 +endif +CXXFLAGS += +CFLAGS += -fno-strict-aliasing ifneq ($(MPT_COMPILER_NOSECTIONS),1) CXXFLAGS += -ffunction-sections -fdata-sections CFLAGS += -ffunction-sections -fdata-sections @@ -495,8 +543,26 @@ LDFLAGS += -Wl,--gc-sections endif else ifeq ($(OPTIMIZE),vectorize) +ifneq ($(MPT_COMPILER_NO_O),1) CXXFLAGS += -O3 -CFLAGS += -O3 -fno-strict-aliasing +CFLAGS += -O3 +endif +CXXFLAGS += +CFLAGS += -fno-strict-aliasing +ifneq ($(MPT_COMPILER_NOSECTIONS),1) +CXXFLAGS += -ffunction-sections -fdata-sections +CFLAGS += -ffunction-sections -fdata-sections +endif +ifneq ($(MPT_COMPILER_NOGCSECTIONS),1) +LDFLAGS += -Wl,--gc-sections +endif +else ifeq ($(OPTIMIZE),default) +ifneq ($(MPT_COMPILER_NO_O),1) +CXXFLAGS += -O3 +CFLAGS += -O3 +endif +CXXFLAGS += +CFLAGS += -fno-strict-aliasing ifneq ($(MPT_COMPILER_NOSECTIONS),1) CXXFLAGS += -ffunction-sections -fdata-sections CFLAGS += -ffunction-sections -fdata-sections @@ -636,6 +702,9 @@ CFLAGS += -Wall -Wextra -Wpedantic $(CFLAGS_WARNINGS) LDFLAGS += $(LDFLAGS_WARNINGS) +CXXFLAGS += $(OVERWRITE_CXXFLAGS) +CFLAGS += $(OVERWRITE_CFLAGS) + endif ifeq ($(STRICT),1) |
Author: manx Date: Sat Nov 2 17:14:58 2024 New Revision: 22087 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22087 Log: [Var] Regenerate project files. Modified: trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2022win10clang/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2022win10clang/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2022win10uwp/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2022win10uwp/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2022win7/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2022win7/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2022win8/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2022win8/ext/mpg123.vcxproj.filters trunk/OpenMPT/build/vs2022win81/ext/mpg123.vcxproj trunk/OpenMPT/build/vs2022win81/ext/mpg123.vcxproj.filters Modified: trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj ============================================================================== --- trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj Sat Nov 2 17:14:58 2024 (r22087) @@ -601,9 +601,55 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h" /> + </ItemGroup> + <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c" /> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c" /> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c" /> Modified: trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj.filters ============================================================================== --- trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2017winxp/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:58 2024 (r22087) @@ -1,91 +1,243 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <Filter Include="compat"> - <UniqueIdentifier>{A909E4F6-95AB-0ECD-7E66-22216AA7951D}</UniqueIdentifier> + <Filter Include="ports"> + <UniqueIdentifier>{FD8A2810-699F-50C1-3221-F4209EF44CF2}</UniqueIdentifier> </Filter> - <Filter Include="libmpg123"> - <UniqueIdentifier>{5620CE7B-C28A-82F2-0BC9-339877726047}</UniqueIdentifier> + <Filter Include="ports\MSVC++"> + <UniqueIdentifier>{5B499528-47AC-24CD-F031-5D83DC73F04F}</UniqueIdentifier> </Filter> + <Filter Include="ports\makefile"> + <UniqueIdentifier>{8A017C94-76CF-6F9A-5F63-E0C04BD04BFF}</UniqueIdentifier> + </Filter> + <Filter Include="src"> + <UniqueIdentifier>{2DAB880B-99B4-887C-2230-9F7C8E38947C}</UniqueIdentifier> + </Filter> + <Filter Include="src\common"> + <UniqueIdentifier>{E5D74254-D18F-84A1-3A97-5DFD266E1F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\compat"> + <UniqueIdentifier>{E0E24254-CC9A-84A1-35A2-5DFD21791F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\include"> + <UniqueIdentifier>{A0AF70A7-0C65-E99C-9559-E373010EE0A0}</UniqueIdentifier> + </Filter> + <Filter Include="src\libmpg123"> + <UniqueIdentifier>{2D8288BB-9942-04F2-627D-4D6FCEFC48CE}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h"> + <Filter>ports\MSVC++</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h"> + <Filter>ports\makefile</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c"> - <Filter>compat</Filter> + <Filter>src\compat</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c"> - <Filter>compat</Filter> + <Filter>src\compat</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> + </ClCompile> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c"> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\frame.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\icy.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\id3.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\index.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer1.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer2.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer3.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\libmpg123.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\ntom.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\optimize.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\parse.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\readers.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\stringbuf.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_real.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_s32.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\tabinit.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> </ItemGroup> </Project> \ No newline at end of file Modified: trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj ============================================================================== --- trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj Sat Nov 2 17:14:58 2024 (r22087) @@ -601,9 +601,55 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h" /> + </ItemGroup> + <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c" /> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c" /> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c" /> Modified: trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj.filters ============================================================================== --- trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2017winxpansi/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:58 2024 (r22087) @@ -1,91 +1,243 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <Filter Include="compat"> - <UniqueIdentifier>{A909E4F6-95AB-0ECD-7E66-22216AA7951D}</UniqueIdentifier> + <Filter Include="ports"> + <UniqueIdentifier>{FD8A2810-699F-50C1-3221-F4209EF44CF2}</UniqueIdentifier> </Filter> - <Filter Include="libmpg123"> - <UniqueIdentifier>{5620CE7B-C28A-82F2-0BC9-339877726047}</UniqueIdentifier> + <Filter Include="ports\MSVC++"> + <UniqueIdentifier>{5B499528-47AC-24CD-F031-5D83DC73F04F}</UniqueIdentifier> </Filter> + <Filter Include="ports\makefile"> + <UniqueIdentifier>{8A017C94-76CF-6F9A-5F63-E0C04BD04BFF}</UniqueIdentifier> + </Filter> + <Filter Include="src"> + <UniqueIdentifier>{2DAB880B-99B4-887C-2230-9F7C8E38947C}</UniqueIdentifier> + </Filter> + <Filter Include="src\common"> + <UniqueIdentifier>{E5D74254-D18F-84A1-3A97-5DFD266E1F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\compat"> + <UniqueIdentifier>{E0E24254-CC9A-84A1-35A2-5DFD21791F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\include"> + <UniqueIdentifier>{A0AF70A7-0C65-E99C-9559-E373010EE0A0}</UniqueIdentifier> + </Filter> + <Filter Include="src\libmpg123"> + <UniqueIdentifier>{2D8288BB-9942-04F2-627D-4D6FCEFC48CE}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h"> + <Filter>ports\MSVC++</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h"> + <Filter>ports\makefile</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c"> - <Filter>compat</Filter> + <Filter>src\compat</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c"> - <Filter>compat</Filter> + <Filter>src\compat</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> + </ClCompile> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c"> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\frame.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\icy.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\id3.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\index.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer1.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer2.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer3.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\libmpg123.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\ntom.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\optimize.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\parse.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\readers.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\stringbuf.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_real.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_s32.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\tabinit.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> </ItemGroup> </Project> \ No newline at end of file Modified: trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj ============================================================================== --- trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj Sat Nov 2 17:14:58 2024 (r22087) @@ -610,9 +610,55 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h" /> + </ItemGroup> + <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c" /> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c" /> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c" /> Modified: trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj.filters ============================================================================== --- trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2019win7/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:58 2024 (r22087) @@ -1,91 +1,243 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <Filter Include="compat"> - <UniqueIdentifier>{A909E4F6-95AB-0ECD-7E66-22216AA7951D}</UniqueIdentifier> + <Filter Include="ports"> + <UniqueIdentifier>{FD8A2810-699F-50C1-3221-F4209EF44CF2}</UniqueIdentifier> </Filter> - <Filter Include="libmpg123"> - <UniqueIdentifier>{5620CE7B-C28A-82F2-0BC9-339877726047}</UniqueIdentifier> + <Filter Include="ports\MSVC++"> + <UniqueIdentifier>{5B499528-47AC-24CD-F031-5D83DC73F04F}</UniqueIdentifier> </Filter> + <Filter Include="ports\makefile"> + <UniqueIdentifier>{8A017C94-76CF-6F9A-5F63-E0C04BD04BFF}</UniqueIdentifier> + </Filter> + <Filter Include="src"> + <UniqueIdentifier>{2DAB880B-99B4-887C-2230-9F7C8E38947C}</UniqueIdentifier> + </Filter> + <Filter Include="src\common"> + <UniqueIdentifier>{E5D74254-D18F-84A1-3A97-5DFD266E1F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\compat"> + <UniqueIdentifier>{E0E24254-CC9A-84A1-35A2-5DFD21791F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\include"> + <UniqueIdentifier>{A0AF70A7-0C65-E99C-9559-E373010EE0A0}</UniqueIdentifier> + </Filter> + <Filter Include="src\libmpg123"> + <UniqueIdentifier>{2D8288BB-9942-04F2-627D-4D6FCEFC48CE}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h"> + <Filter>ports\MSVC++</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h"> + <Filter>ports\makefile</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c"> - <Filter>compat</Filter> + <Filter>src\compat</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c"> - <Filter>compat</Filter> + <Filter>src\compat</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> + </ClCompile> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c"> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\frame.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\icy.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\id3.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\index.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer1.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer2.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\layer3.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\libmpg123.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\ntom.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\optimize.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\parse.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\readers.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\stringbuf.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_real.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\synth_s32.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\tabinit.c"> - <Filter>libmpg123</Filter> + <Filter>src\libmpg123</Filter> </ClCompile> </ItemGroup> </Project> \ No newline at end of file Modified: trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj ============================================================================== --- trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj Sat Nov 2 17:14:58 2024 (r22087) @@ -1558,9 +1558,55 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\parse.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\reader.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_8bit.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_mono.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synth_ntom.h" /> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\synths.h" /> + </ItemGroup> + <ItemGroup> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat.c" /> <ClCompile Include="..\..\..\include\mpg123\src\compat\compat_str.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dct64.c" /> + <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\dither.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\equalizer.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\feature.c" /> <ClCompile Include="..\..\..\include\mpg123\src\libmpg123\format.c" /> Modified: trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj.filters ============================================================================== --- trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:42 2024 (r22086) +++ trunk/OpenMPT/build/vs2022win10/ext/mpg123.vcxproj.filters Sat Nov 2 17:14:58 2024 (r22087) @@ -1,91 +1,243 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <Filter Include="compat"> - <UniqueIdentifier>{A909E4F6-95AB-0ECD-7E66-22216AA7951D}</UniqueIdentifier> + <Filter Include="ports"> + <UniqueIdentifier>{FD8A2810-699F-50C1-3221-F4209EF44CF2}</UniqueIdentifier> </Filter> - <Filter Include="libmpg123"> - <UniqueIdentifier>{5620CE7B-C28A-82F2-0BC9-339877726047}</UniqueIdentifier> + <Filter Include="ports\MSVC++"> + <UniqueIdentifier>{5B499528-47AC-24CD-F031-5D83DC73F04F}</UniqueIdentifier> </Filter> + <Filter Include="ports\makefile"> + <UniqueIdentifier>{8A017C94-76CF-6F9A-5F63-E0C04BD04BFF}</UniqueIdentifier> + </Filter> + <Filter Include="src"> + <UniqueIdentifier>{2DAB880B-99B4-887C-2230-9F7C8E38947C}</UniqueIdentifier> + </Filter> + <Filter Include="src\common"> + <UniqueIdentifier>{E5D74254-D18F-84A1-3A97-5DFD266E1F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\compat"> + <UniqueIdentifier>{E0E24254-CC9A-84A1-35A2-5DFD21791F92}</UniqueIdentifier> + </Filter> + <Filter Include="src\include"> + <UniqueIdentifier>{A0AF70A7-0C65-E99C-9559-E373010EE0A0}</UniqueIdentifier> + </Filter> + <Filter Include="src\libmpg123"> + <UniqueIdentifier>{2D8288BB-9942-04F2-627D-4D6FCEFC48CE}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\mpg123\ports\MSVC++\config.h"> + <Filter>ports\MSVC++</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\ports\makefile\config.h"> + <Filter>ports\makefile</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\abi_align.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\debug.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\sample.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\swap_bytes_impl.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\common\true.h"> + <Filter>src\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\compat.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\compat\wpathconv.h"> + <Filter>src\compat</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\fmt123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\include\mpg123.h"> + <Filter>src\include</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\decode.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\dither_impl.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\frame.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\gapless.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getbits.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\getcpuflags.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\huffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\icy2utf8.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\id3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\index.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_costabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer12.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\init_layer3.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l12tabs.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l2tables.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\l3bandgain.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\lfs_wrap.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mangle.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpeghead.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\mpg123lib_intern.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\newhuffman.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg123\src\libmpg123\optimize.h"> + <Filter>src\libmpg123</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mpg1... [truncated message content] |
From: <sv...@op...> - 2024-11-02 16:14:54
|
Author: manx Date: Sat Nov 2 17:14:42 2024 New Revision: 22086 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22086 Log: [Imp] build: premake: mpg123: Add header files to project. Modified: trunk/OpenMPT/build/premake/ext-mpg123.lua Modified: trunk/OpenMPT/build/premake/ext-mpg123.lua ============================================================================== --- trunk/OpenMPT/build/premake/ext-mpg123.lua Sat Nov 2 17:09:09 2024 (r22085) +++ trunk/OpenMPT/build/premake/ext-mpg123.lua Sat Nov 2 17:14:42 2024 (r22086) @@ -11,36 +11,86 @@ } filter {} files { + "../../include/mpg123/ports/makefile/config.h", + "../../include/mpg123/ports/MSVC++/config.h", + } + files { + "../../include/mpg123/src/common/abi_align.h", + "../../include/mpg123/src/common/debug.h", + "../../include/mpg123/src/common/sample.h", + "../../include/mpg123/src/common/swap_bytes_impl.h", + "../../include/mpg123/src/common/true.h", + } + files { "../../include/mpg123/src/compat/compat.c", + "../../include/mpg123/src/compat/compat.h", "../../include/mpg123/src/compat/compat_str.c", + "../../include/mpg123/src/compat/wpathconv.h", + } + files { + "../../include/mpg123/src/include/fmt123.h", + "../../include/mpg123/src/include/mpg123.h", } files { --"../../include/mpg123/src/libmpg123/calctables.c", + "../../include/mpg123/src/libmpg123/costabs.h", "../../include/mpg123/src/libmpg123/dct64.c", - --"../../include/mpg123/src/libmpg123/dither.c", + "../../include/mpg123/src/libmpg123/decode.h", + "../../include/mpg123/src/libmpg123/dither.c", + "../../include/mpg123/src/libmpg123/dither.h", + "../../include/mpg123/src/libmpg123/dither_impl.h", "../../include/mpg123/src/libmpg123/equalizer.c", "../../include/mpg123/src/libmpg123/feature.c", "../../include/mpg123/src/libmpg123/format.c", "../../include/mpg123/src/libmpg123/frame.c", + "../../include/mpg123/src/libmpg123/frame.h", + "../../include/mpg123/src/libmpg123/gapless.h", + "../../include/mpg123/src/libmpg123/getbits.h", + "../../include/mpg123/src/libmpg123/getcpuflags.h", + "../../include/mpg123/src/libmpg123/huffman.h", "../../include/mpg123/src/libmpg123/icy.c", + "../../include/mpg123/src/libmpg123/icy.h", "../../include/mpg123/src/libmpg123/icy2utf8.c", + "../../include/mpg123/src/libmpg123/icy2utf8.h", "../../include/mpg123/src/libmpg123/id3.c", + "../../include/mpg123/src/libmpg123/id3.h", "../../include/mpg123/src/libmpg123/index.c", + "../../include/mpg123/src/libmpg123/index.h", + "../../include/mpg123/src/libmpg123/init_costabs.h", + "../../include/mpg123/src/libmpg123/init_layer3.h", + "../../include/mpg123/src/libmpg123/init_layer12.h", + "../../include/mpg123/src/libmpg123/l2tables.h", + "../../include/mpg123/src/libmpg123/l3bandgain.h", + "../../include/mpg123/src/libmpg123/l12tabs.h", "../../include/mpg123/src/libmpg123/layer1.c", "../../include/mpg123/src/libmpg123/layer2.c", "../../include/mpg123/src/libmpg123/layer3.c", "../../include/mpg123/src/libmpg123/lfs_wrap.c", + "../../include/mpg123/src/libmpg123/lfs_wrap.h", "../../include/mpg123/src/libmpg123/libmpg123.c", + "../../include/mpg123/src/libmpg123/mangle.h", + "../../include/mpg123/src/libmpg123/mpeghead.h", + "../../include/mpg123/src/libmpg123/mpg123lib_intern.h", + "../../include/mpg123/src/libmpg123/newhuffman.h", "../../include/mpg123/src/libmpg123/ntom.c", "../../include/mpg123/src/libmpg123/optimize.c", + "../../include/mpg123/src/libmpg123/optimize.h", "../../include/mpg123/src/libmpg123/parse.c", + "../../include/mpg123/src/libmpg123/parse.h", "../../include/mpg123/src/libmpg123/readers.c", + "../../include/mpg123/src/libmpg123/reader.h", "../../include/mpg123/src/libmpg123/stringbuf.c", "../../include/mpg123/src/libmpg123/synth.c", + "../../include/mpg123/src/libmpg123/synth.h", "../../include/mpg123/src/libmpg123/synth_8bit.c", + "../../include/mpg123/src/libmpg123/synth_8bit.h", + "../../include/mpg123/src/libmpg123/synth_mono.h", + "../../include/mpg123/src/libmpg123/synth_ntom.h", "../../include/mpg123/src/libmpg123/synth_real.c", "../../include/mpg123/src/libmpg123/synth_s32.c", + "../../include/mpg123/src/libmpg123/synths.h", "../../include/mpg123/src/libmpg123/tabinit.c", + --"../../include/mpg123/src/libmpg123/testcpu.c", } defines { "DYNAMIC_BUILD", "OPT_GENERIC" } links { |
From: <sv...@op...> - 2024-11-02 16:09:21
|
Author: manx Date: Sat Nov 2 17:09:09 2024 New Revision: 22085 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22085 Log: [Fix] build: Makefile: DJGPP: Actually set compiler optimization level as desired per CPU. Modified: trunk/OpenMPT/build/make/config-djgpp.mk Modified: trunk/OpenMPT/build/make/config-djgpp.mk ============================================================================== --- trunk/OpenMPT/build/make/config-djgpp.mk Sat Nov 2 16:57:50 2024 (r22084) +++ trunk/OpenMPT/build/make/config-djgpp.mk Sat Nov 2 17:09:09 2024 (r22085) @@ -396,13 +396,22 @@ ifeq ($(findstring -O3,$(CPUFLAGS)),-O3) OPTIMIZE=none endif -ifeq ($(findstring -O3,$(CPUFLAGS)),-O2) +ifeq ($(findstring -O2,$(CPUFLAGS)),-O2) OPTIMIZE=none endif ifeq ($(findstring -Os,$(CPUFLAGS)),-Os) OPTIMIZE=none endif -ifeq ($(findstring -Os,$(CPUFLAGS)),-Oz) +ifeq ($(findstring -Oz,$(CPUFLAGS)),-Oz) +OPTIMIZE=none +endif +ifeq ($(findstring -O1,$(CPUFLAGS)),-O1) +OPTIMIZE=none +endif +ifeq ($(findstring -O0,$(CPUFLAGS)),-O0) +OPTIMIZE=none +endif +ifeq ($(findstring -Og,$(CPUFLAGS)),-Og) OPTIMIZE=none endif |
From: <sv...@op...> - 2024-11-02 15:57:57
|
Author: manx Date: Sat Nov 2 16:57:50 2024 New Revision: 22084 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22084 Log: [Ref] build: Makefile: DJGPP: Cleanup AMD K5. Modified: trunk/OpenMPT/build/make/config-djgpp.mk Modified: trunk/OpenMPT/build/make/config-djgpp.mk ============================================================================== --- trunk/OpenMPT/build/make/config-djgpp.mk Sat Nov 2 16:01:18 2024 (r22083) +++ trunk/OpenMPT/build/make/config-djgpp.mk Sat Nov 2 16:57:50 2024 (r22084) @@ -260,11 +260,12 @@ amd/am486dxe := $(XX_) -march=i486 $(FPU_387) -mtune=i486 $(OPT_UARCH_PIPE) --param l1-cache-size=12 --param l2-cache-size=$(CACHE_486) amd/am5x86 := $(___) -march=i486 $(FPU_387) -mtune=i486 $(OPT_UARCH_PIPE) --param l1-cache-size=12 --param l2-cache-size=$(CACHE_486) amd/k5 := $(X__) -march=i586 $(FPU_387) -mtune=i586 $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) -amd/k5-pentium := $(X__) -march=i586 $(FPU_387) -mtune=pentium $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) -amd/k5-pentiummmx := $(X__) -march=i586 $(FPU_387) -mtune=pentium-mmx $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) -amd/k5-pentiumpro := $(X__) -march=i586 $(FPU_387) -mtune=pentiumpro $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) -amd/k5-pentium2 := $(X__) -march=i586 $(FPU_387) -mtune=pentium2 $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) -amd/k5-k6 := $(X__) -march=i586 $(FPU_387) -mtune=k6 $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) +# amd/k5-i586 := $(X__) -march=i586 $(FPU_387) -mtune=i586 $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) +# amd/k5-pentium := $(X__) -march=i586 $(FPU_387) -mtune=pentium $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) +# amd/k5-pentiummmx := $(X__) -march=i586 $(FPU_387) -mtune=pentium-mmx $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) +# amd/k5-pentiumpro := $(X__) -march=i586 $(FPU_387) -mtune=pentiumpro $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) +# amd/k5-pentium2 := $(X__) -march=i586 $(FPU_387) -mtune=pentium2 $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) +# amd/k5-k6 := $(X__) -march=i586 $(FPU_387) -mtune=k6 $(OPT_UARCH_OOOE) --param l1-cache-size=8 --param l2-cache-size=$(CACHE_S7) amd/k6 := $(XX_) -march=k6 $(FPU_MMX) -mtune=k6 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=$(CACHE_S7) amd/k6-2 := $(XXX) -march=k6-2 $(FPU_3DNOW) -mtune=k6-2 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=$(CACHE_SS7) amd/k6-3 := $(___) -march=k6-3 $(FPU_3DNOW) -mtune=k6-3 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=256 |
From: <sv...@op...> - 2024-11-02 15:01:24
|
Author: manx Date: Sat Nov 2 16:01:18 2024 New Revision: 22083 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22083 Log: [Ref] MP3 Samples: libmpg123: Fix integer overflow when using 64bit internal file offsets. Modified: trunk/OpenMPT/soundlib/SampleFormatMP3.cpp Modified: trunk/OpenMPT/soundlib/SampleFormatMP3.cpp ============================================================================== --- trunk/OpenMPT/soundlib/SampleFormatMP3.cpp Sat Nov 2 15:50:19 2024 (r22082) +++ trunk/OpenMPT/soundlib/SampleFormatMP3.cpp Sat Nov 2 16:01:18 2024 (r22083) @@ -95,7 +95,7 @@ static int FileReaderRead(void *fp, void *buf, size_t count, size_t *returned) { FileReader &file = *static_cast<FileReader *>(fp); - std::size_t readBytes = std::min(count, static_cast<size_t>(file.BytesLeft())); + std::size_t readBytes = std::min(count, mpt::saturate_cast<size_t>(file.BytesLeft())); file.ReadRaw(mpt::span(mpt::void_cast<std::byte*>(buf), readBytes)); if(!returned) { |