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
(213) |
Aug
(177) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@op...> - 2024-06-28 20:05:53
|
Author: sagamusix Date: Fri Jun 28 22:05:47 2024 New Revision: 21096 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21096 Log: Merged revision(s) 21095 from trunk/OpenMPT: [Fix] Sample tab: Don't allow OPL editor to remain focussed when switching to a non-OPL sample slot (https://bugs.openmpt.org/view.php?id=1795). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/View_smp.cpp Modified: branches/OpenMPT-1.31/mptrack/View_smp.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/View_smp.cpp Fri Jun 28 22:05:29 2024 (r21095) +++ branches/OpenMPT-1.31/mptrack/View_smp.cpp Fri Jun 28 22:05:47 2024 (r21096) @@ -414,7 +414,10 @@ if(!IsOPLInstrument()) { if(m_oplEditor) + { m_oplEditor->ShowWindow(SW_HIDE); + m_oplEditor->EnableWindow(FALSE); + } return; } CSoundFile &sndFile = GetDocument()->GetSoundFile(); @@ -434,6 +437,7 @@ if(m_oplEditor) { m_oplEditor->SetPatch(sample.adlib); + m_oplEditor->EnableWindow(TRUE); auto size = m_oplEditor->GetMinimumSize(); m_oplEditor->SetWindowPos(nullptr, -m_nScrollPosX, -m_nScrollPosY, std::max(size.cx, m_rcClient.right), std::max(size.cy, m_rcClient.bottom), SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW); } |
From: <sv...@op...> - 2024-06-28 20:05:42
|
Author: sagamusix Date: Fri Jun 28 22:05:29 2024 New Revision: 21095 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21095 Log: [Fix] Sample tab: Don't allow OPL editor to remain focussed when switching to a non-OPL sample slot (https://bugs.openmpt.org/view.php?id=1795). Modified: trunk/OpenMPT/mptrack/View_smp.cpp Modified: trunk/OpenMPT/mptrack/View_smp.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp Fri Jun 28 21:12:35 2024 (r21094) +++ trunk/OpenMPT/mptrack/View_smp.cpp Fri Jun 28 22:05:29 2024 (r21095) @@ -415,7 +415,10 @@ if(!IsOPLInstrument()) { if(m_oplEditor) + { m_oplEditor->ShowWindow(SW_HIDE); + m_oplEditor->EnableWindow(FALSE); + } return; } CSoundFile &sndFile = GetDocument()->GetSoundFile(); @@ -435,6 +438,7 @@ if(m_oplEditor) { m_oplEditor->SetPatch(sample.adlib); + m_oplEditor->EnableWindow(TRUE); auto size = m_oplEditor->GetMinimumSize(); m_oplEditor->SetWindowPos(nullptr, -m_nScrollPosX, -m_nScrollPosY, std::max(size.cx, m_rcClient.right), std::max(size.cy, m_rcClient.bottom), SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW); } |
From: <sv...@op...> - 2024-06-28 19:12:43
|
Author: sagamusix Date: Fri Jun 28 21:12:35 2024 New Revision: 21094 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21094 Log: [Imp] Convert :xx volume command to S9E/S9F on conversion if possible. Modified: trunk/OpenMPT/soundlib/modcommand.cpp Modified: trunk/OpenMPT/soundlib/modcommand.cpp ============================================================================== --- trunk/OpenMPT/soundlib/modcommand.cpp Fri Jun 28 21:11:54 2024 (r21093) +++ trunk/OpenMPT/soundlib/modcommand.cpp Fri Jun 28 21:12:35 2024 (r21094) @@ -913,6 +913,16 @@ { param = vol << 3; } + } else if(volcmd == VOLCMD_PLAYCONTROL && (vol == 2 || vol == 3) && command == CMD_NONE + && !newSpecs.HasVolCommand(VOLCMD_PLAYCONTROL) + && (newSpecs.HasCommand(CMD_S3MCMDEX) || newSpecs.HasCommand(CMD_XFINEPORTAUPDOWN))) + { + volcmd = VOLCMD_NONE; + param = vol - 2 + 0x9E; + if(newSpecs.HasCommand(CMD_S3MCMDEX)) + command = CMD_S3MCMDEX; + else + command = CMD_XFINEPORTAUPDOWN; } if((command == CMD_REVERSEOFFSET || command == CMD_OFFSETPERCENTAGE) && !newSpecs.HasCommand(command)) |
From: <sv...@op...> - 2024-06-28 19:12:02
|
Author: sagamusix Date: Fri Jun 28 21:11:54 2024 New Revision: 21093 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21093 Log: [Fix] GetLength: Set tick count so that global scripts trigger CMD_MED_SYNTH_JUMP commands correctly. Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Thu Jun 27 22:41:49 2024 (r21092) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Fri Jun 28 21:11:54 2024 (r21093) @@ -875,7 +875,7 @@ { auto &state = states[chn]; auto &modChn = playState.Chn[chn]; - if(modChn.rowCommand.command == CMD_MED_SYNTH_JUMP && modChn.isFirstTick) + if(modChn.rowCommand.command == CMD_MED_SYNTH_JUMP && !playState.m_nTickCount) states[chn].JumpToPosition(sndFile.m_globalScript, modChn.rowCommand.param); int32 period = 0; state.NextTick(sndFile.m_globalScript, playState, chn, period, sndFile, *this); Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Thu Jun 27 22:41:49 2024 (r21092) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Fri Jun 28 21:11:54 2024 (r21093) @@ -406,6 +406,7 @@ // Check if pattern is valid playState.m_nPattern = playState.m_nCurrentOrder < orderList.size() ? orderList[playState.m_nCurrentOrder] : orderList.GetInvalidPatIndex(); + playState.m_nTickCount = 0; if(!Patterns.IsValidPat(playState.m_nPattern) && playState.m_nPattern != orderList.GetInvalidPatIndex() && target.mode == GetLengthTarget::SeekPosition && playState.m_nCurrentOrder == target.pos.order) { @@ -1052,7 +1053,7 @@ if(!m_globalScript.empty()) { - for(uint32 i = 0; i < nonRowTicks; i++) + for(playState.m_nTickCount = 1; playState.m_nTickCount < numTicks; playState.m_nTickCount++) { playState.m_globalScriptState.NextTick(playState, *this); } |
From: <sv...@op...> - 2024-06-27 20:42:01
|
Author: sagamusix Date: Thu Jun 27 22:41:49 2024 New Revision: 21092 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21092 Log: [Ref] Small cleanup. Modified: trunk/OpenMPT/soundlib/Load_ftm.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp Modified: trunk/OpenMPT/soundlib/Load_ftm.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_ftm.cpp Thu Jun 27 21:46:41 2024 (r21091) +++ trunk/OpenMPT/soundlib/Load_ftm.cpp Thu Jun 27 22:41:49 2024 (r21092) @@ -15,8 +15,8 @@ struct FTMSampleHeader { - char name[30]; // FTM cannot load samples with a filename longer than 29 samples - uint8 unknown; // Probably padding. Usually contains null or space + char name[30]; // FTM cannot load samples with a filename longer than 29 characters + uint8 unknown; // Probably padding. Usually contains null or space (probably overflowing from name) uint8 iffOctave; // Only relevant in song mode }; @@ -165,7 +165,7 @@ } if(!ok) { - // Fall back to external sample mechanism. TODO: external sample loading ignores loop data on purpose, and does not support raw samples. How do we get it back? + // Fall back to external sample mechanism. TODO: external sample loading ignores loop data on purpose, and does not support raw samples or IFF octave selection. How do we get it back? Samples[smp].uFlags.set(SMP_KEEPONDISK); SetSamplePath(smp, filename); } Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp Thu Jun 27 21:46:41 2024 (r21091) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp Thu Jun 27 22:41:49 2024 (r21092) @@ -683,7 +683,7 @@ if(libraryName.length() > 4 && libraryName[libraryName.length() - 4] == '.') { // Remove ".dll" from library name - libraryName.resize(libraryName.length() - 4 ); + libraryName.resize(libraryName.length() - 4); } mixPlug.Info.szLibraryName = libraryName; mixPlug.Info.dwPluginId1 = Vst::kEffectMagic; |
From: <sv...@op...> - 2024-06-27 19:46:48
|
Author: sagamusix Date: Thu Jun 27 21:46:41 2024 New Revision: 21091 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21091 Log: [Imp] SymMOD: Make use of auto-vibrato and auto-tremolo to make space for other commands. Modified: trunk/OpenMPT/soundlib/Load_symmod.cpp Modified: trunk/OpenMPT/soundlib/Load_symmod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_symmod.cpp Thu Jun 27 20:35:40 2024 (r21090) +++ trunk/OpenMPT/soundlib/Load_symmod.cpp Thu Jun 27 21:46:41 2024 (r21091) @@ -1008,7 +1008,7 @@ InitializeGlobals(MOD_TYPE_MPT, static_cast<CHANNELINDEX>(fileHeader.numChannels)); - m_SongFlags.set(SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_IMPORTED); + m_SongFlags.set(SONG_LINEARSLIDES | SONG_EXFILTERRANGE | SONG_AUTO_VIBRATO | SONG_AUTO_TREMOLO | SONG_IMPORTED); m_playBehaviour = GetDefaultPlaybackBehaviour(MOD_TYPE_IT); m_playBehaviour.reset(kITShortSampleRetrig); m_nSamplePreAmp = Clamp(512 / GetNumChannels(), 16, 128); @@ -1326,7 +1326,9 @@ uint8 channelVol = 100; // Volume multiplier, 0...100 uint8 calculatedVol = 64; // Final channel volume uint8 fromAdd = 0; // Base sample offset for FROM and FR&P effects + bool retrigVibrato = false; uint8 curVibrato = 0; + bool retrigTremolo = false; uint8 curTremolo = 0; uint8 sampleVibSpeed = 0; uint8 sampleVibDepth = 0; @@ -1474,6 +1476,7 @@ m.SetEffectCommand(CMD_TONEPORTAMENTO, 0xFF); chnState.curPitchSlide = 0; chnState.tonePortaRemain = 0; + chnState.retrigVibrato = chnState.retrigTremolo = true; break; // fine portamentos with range up to half a semitone @@ -1506,6 +1509,7 @@ m.instr = chnState.lastInst = mappedInst; chnState.curPitchSlide = 0; chnState.tonePortaRemain = 0; + chnState.retrigVibrato = chnState.retrigTremolo = true; } if(event.param > 0) @@ -1561,14 +1565,18 @@ m.command = CMD_NONE; break; case SymEvent::Tremolo: - { - // both tremolo speed and depth can go much higher than OpenMPT supports, - // but modules will probably use pretty sane, supportable values anyway - // TODO: handle very small nonzero params - uint8 speed = std::min<uint8>(15, event.inst >> 3); - uint8 depth = std::min<uint8>(15, event.param >> 3); - chnState.curTremolo = (speed << 4) | depth; - } + { + // both tremolo speed and depth can go much higher than OpenMPT supports, + // but modules will probably use pretty sane, supportable values anyway + // TODO: handle very small nonzero params + uint8 speed = std::min<uint8>(15, event.inst >> 3); + uint8 depth = std::min<uint8>(15, event.param >> 3); + chnState.curTremolo = (speed << 4) | depth; + if(chnState.curTremolo) + chnState.retrigTremolo = true; + else + m.SetEffectCommand(CMD_TREMOLO, 0); + } break; // pitch effects @@ -1601,14 +1609,18 @@ m.command = CMD_NONE; break; case SymEvent::Vibrato: - { - // both vibrato speed and depth can go much higher than OpenMPT supports, - // but modules will probably use pretty sane, supportable values anyway - // TODO: handle very small nonzero params - uint8 speed = std::min<uint8>(15, event.inst >> 3); - uint8 depth = std::min<uint8>(15, event.param); - chnState.curVibrato = (speed << 4) | depth; - } + { + // both vibrato speed and depth can go much higher than OpenMPT supports, + // but modules will probably use pretty sane, supportable values anyway + // TODO: handle very small nonzero params + uint8 speed = std::min<uint8>(15, event.inst >> 3); + uint8 depth = std::min<uint8>(15, event.param); + chnState.curVibrato = (speed << 4) | depth; + if(chnState.curVibrato) + chnState.retrigVibrato = true; + else + m.SetEffectCommand(CMD_VIBRATO, 0); + } break; case SymEvent::AddHalfTone: m.note = chnState.lastNote = Clamp(static_cast<uint8>(chnState.lastNote + event.param), NOTE_MIN, NOTE_MAX); @@ -1822,13 +1834,15 @@ } } // Vibrato and Tremolo - if(m.command == CMD_NONE && chnState.curVibrato != 0) + if(m.command == CMD_NONE && chnState.curVibrato && chnState.retrigVibrato) { m.SetEffectCommand(CMD_VIBRATO, chnState.curVibrato); + chnState.retrigVibrato = false; } - if(m.command == CMD_NONE && chnState.curTremolo != 0) + if(m.command == CMD_NONE && chnState.curTremolo && chnState.retrigTremolo) { m.SetEffectCommand(CMD_TREMOLO, chnState.curTremolo); + chnState.retrigTremolo = false; } // Tone Portamento if(m.command != CMD_TONEPORTAMENTO && chnState.tonePortaRemain) |
From: <sv...@op...> - 2024-06-27 18:35:48
|
Author: sagamusix Date: Thu Jun 27 20:35:40 2024 New Revision: 21090 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21090 Log: [Fix] FTM: Calculate song length correctly if a file changes the speed or tempo based on channel volume (see schlendering.ftm, https://www.un4seen.com/forum/?topic=15448.msg143168#msg143168). Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Thu Jun 27 19:25:32 2024 (r21089) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Thu Jun 27 20:35:40 2024 (r21090) @@ -809,8 +809,9 @@ break; } - // The following calculations are not interesting if we just want to get the song length. - if(!(adjustMode & eAdjust)) + // The following calculations are not interesting if we just want to get the song length... + // ...unless we're playing a Face The Music module with scripts that may modify the speed or tempo based on some volume or pitch variable (see schlendering.ftm) + if(!(adjustMode & eAdjust) && m_globalScript.empty()) continue; ResetAutoSlides(chn); @@ -1049,6 +1050,14 @@ } } + if(!m_globalScript.empty()) + { + for(uint32 i = 0; i < nonRowTicks; i++) + { + playState.m_globalScriptState.NextTick(playState, *this); + } + } + // Interpret F00 effect in XM files as "stop song" if(GetType() == MOD_TYPE_XM && playState.m_nMusicSpeed == uint16_max) { |
From: <sv...@op...> - 2024-06-27 17:25:45
|
Author: sagamusix Date: Thu Jun 27 19:25:32 2024 New Revision: 21089 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21089 Log: [Fix] Puma: Tick duration of pitch commands is off-by-one compared to volume commands (toki91.puma, toki9.puma, toki5.puma, https://www.un4seen.com/forum/?topic=15448.msg143168#msg143168) Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Thu Jun 27 18:58:07 2024 (r21088) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Thu Jun 27 19:25:32 2024 (r21089) @@ -569,12 +569,12 @@ case Event::Type::Puma_SetPitch: m_linearPitchFactor = event.i8 * 8; m_periodAdd = 0; - m_ticksRemain = event.Byte2(); + m_ticksRemain = std::max(event.Byte2(), uint8(1)) - 1; return true; case Event::Type::Puma_PitchRamp: m_linearPitchFactor = 0; m_periodAdd = event.i8 * 4; - m_ticksRemain = event.Byte2(); + m_ticksRemain = std::max(event.Byte2(), uint8(1)) - 1; return true; case Event::Type::Mupp_SetWaveform: |
From: <sv...@op...> - 2024-06-27 16:58:20
|
Author: sagamusix Date: Thu Jun 27 18:58:07 2024 New Revision: 21088 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21088 Log: [Fix] FTM: Limit tempo range in scripts. huschlied.ftm uses values outside of the range supported by Face The Music (the software itself also clamps those values). Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp Modified: trunk/OpenMPT/soundlib/InstrumentSynth.cpp ============================================================================== --- trunk/OpenMPT/soundlib/InstrumentSynth.cpp Thu Jun 27 18:44:36 2024 (r21087) +++ trunk/OpenMPT/soundlib/InstrumentSynth.cpp Thu Jun 27 18:58:07 2024 (r21088) @@ -808,10 +808,13 @@ playState.m_nGlobalVolume = event.u16; return false; case Event::Type::FTM_SetTempo: - playState.m_nMusicTempo = TEMPO(1777517.482 / event.u16); + playState.m_nMusicTempo = TEMPO(1777517.482 / std::clamp(event.u16, uint16(0x1000), uint16(0x4FFF))); return false; case Event::Type::FTM_SetSpeed: - playState.m_nMusicSpeed = event.u16; + if(event.u16) + playState.m_nMusicSpeed = event.u16; + else + playState.m_nMusicSpeed = uint16_max; return false; case Event::Type::FTM_SetPlayPosition: if(ORDERINDEX playPos = sndFile.Order().FindOrder(event.u16, event.u16); playPos != ORDERINDEX_INVALID) |
From: <sv...@op...> - 2024-06-27 16:45:20
|
Author: sagamusix Revision: 21087 Property Name: svn:log Action: modified Property diff: --- old property value +++ new property value @@ -1 +1 @@ -[Fix] FTM: Volume slide should not be reset by new notes. \ No newline at end of file +[Fix] FTM: Volume slide should not be reset by new notes. Fixes shaker sound in "a walk in the dark.ftm" (https://www.un4seen.com/forum/?topic=15448.msg143168#msg143168). \ No newline at end of file |
From: <sv...@op...> - 2024-06-27 16:44:52
|
Author: sagamusix Date: Thu Jun 27 18:44:36 2024 New Revision: 21087 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21087 Log: [Fix] FTM: Volume slide should not be reset by new notes. Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Thu Jun 27 18:37:31 2024 (r21086) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Thu Jun 27 18:44:36 2024 (r21087) @@ -2178,8 +2178,10 @@ chn.paulaState.Reset(); } const bool wasGlobalSlideRunning = chn.autoSlide.IsActive(AutoSlideCommand::GlobalVolumeSlide); + const bool wasChannelVolSlideRunning = chn.autoSlide.IsActive(AutoSlideCommand::VolumeDownWithDuration); chn.autoSlide.Reset(); chn.autoSlide.SetActive(AutoSlideCommand::GlobalVolumeSlide, wasGlobalSlideRunning); + chn.autoSlide.SetActive(AutoSlideCommand::VolumeDownWithDuration, wasChannelVolSlideRunning); } |
From: <sv...@op...> - 2024-06-27 16:37:39
|
Author: sagamusix Date: Thu Jun 27 18:37:31 2024 New Revision: 21086 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21086 Log: [Ref] Silence warning. Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Wed Jun 26 23:38:43 2024 (r21085) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Thu Jun 27 18:37:31 2024 (r21086) @@ -2552,7 +2552,7 @@ const uint32 tickCount = m_PlayState.m_nTickCount % (m_PlayState.m_nMusicSpeed + m_PlayState.m_nFrameDelay); uint32 instr = chn.rowCommand.instr; ModCommand::VOLCMD volcmd = chn.rowCommand.volcmd; - uint32 vol = chn.rowCommand.vol; + ModCommand::VOL vol = chn.rowCommand.vol; ModCommand::COMMAND cmd = chn.rowCommand.command; uint32 param = chn.rowCommand.param; bool bPorta = chn.rowCommand.IsTonePortamento(); @@ -3176,7 +3176,7 @@ { // IT Compatibility: Effects in the volume column don't have an unified memory. // Test case: VolColMemory.it - if(vol) chn.nOldVolParam = static_cast<ModCommand::PARAM>(vol); else vol = chn.nOldVolParam; + if(vol) chn.nOldVolParam = vol; else vol = chn.nOldVolParam; } switch(volcmd) @@ -3192,7 +3192,7 @@ break; } else { - chn.nOldVolParam = static_cast<ModCommand::PARAM>(vol); + chn.nOldVolParam = vol; } VolumeSlide(chn, static_cast<ModCommand::PARAM>(volcmd == VOLCMD_VOLSLIDEUP ? (vol << 4) : vol)); break; @@ -3204,7 +3204,7 @@ { // IT Compatibility: Volume column volume slides have their own memory // Test case: VolColMemory.it - FineVolumeUp(chn, static_cast<ModCommand::PARAM>(vol), m_playBehaviour[kITVolColMemory]); + FineVolumeUp(chn, vol, m_playBehaviour[kITVolColMemory]); } break; @@ -3215,7 +3215,7 @@ { // IT Compatibility: Volume column volume slides have their own memory // Test case: VolColMemory.it - FineVolumeDown(chn, static_cast<ModCommand::PARAM>(vol), m_playBehaviour[kITVolColMemory]); + FineVolumeDown(chn, vol, m_playBehaviour[kITVolColMemory]); } break; @@ -3232,7 +3232,7 @@ break; case VOLCMD_PANSLIDELEFT: - PanningSlide(chn, static_cast<ModCommand::PARAM>(vol), !m_playBehaviour[kFT2VolColMemory]); + PanningSlide(chn, vol, !m_playBehaviour[kFT2VolColMemory]); break; case VOLCMD_PANSLIDERIGHT: |
From: <sv...@op...> - 2024-06-26 21:38:56
|
Author: sagamusix Date: Wed Jun 26 23:38:43 2024 New Revision: 21085 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21085 Log: [Ref] SymMOD loader: Use more SetEffectCommand/SetVolumeCommand. Modified: trunk/OpenMPT/soundlib/Load_symmod.cpp Modified: trunk/OpenMPT/soundlib/Load_symmod.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_symmod.cpp Wed Jun 26 23:37:50 2024 (r21084) +++ trunk/OpenMPT/soundlib/Load_symmod.cpp Wed Jun 26 23:38:43 2024 (r21085) @@ -1421,8 +1421,8 @@ m = syncPlayCommand; if(m.command == CMD_NONE && chnState.calculatedVol != chnStates[chn - 1].calculatedVol) { - m.command = CMD_CHANNELVOLUME; - m.param = chnState.calculatedVol = chnStates[chn - 1].calculatedVol; + chnState.calculatedVol = chnStates[chn - 1].calculatedVol; + m.SetEffectCommand(CMD_CHANNELVOLUME, chnState.calculatedVol); } if(!event.IsGlobal()) continue; @@ -1437,37 +1437,32 @@ switch(event.param) { case SymEvent::StopSample: - m.volcmd = VOLCMD_PLAYCONTROL; - m.vol = 0; + m.SetVolumeCommand(VOLCMD_PLAYCONTROL, 0); chnState.stopped = true; break; case SymEvent::ContSample: - m.volcmd = VOLCMD_PLAYCONTROL; - m.vol = 1; + m.SetVolumeCommand(VOLCMD_PLAYCONTROL, 1); chnState.stopped = false; break; case SymEvent::KeyOff: if(m.note == NOTE_NONE) m.note = chnState.lastNote; - m.volcmd = VOLCMD_OFFSET; - m.vol = 1; + m.SetVolumeCommand(VOLCMD_OFFSET, 1); break; case SymEvent::SpeedDown: if(patternSpeed > 1) { - m.command = CMD_SPEED; - m.param = --patternSpeed; + m.SetEffectCommand(CMD_SPEED, --patternSpeed); } break; case SymEvent::SpeedUp: if(patternSpeed < 0xFF) { - m.command = CMD_SPEED; - m.param = ++patternSpeed; + m.SetEffectCommand(CMD_SPEED, ++patternSpeed); } break; @@ -1476,36 +1471,29 @@ if(mappedInst != chnState.lastInst) break; m.note = note; - m.command = CMD_TONEPORTAMENTO; - m.param = 0xFF; + m.SetEffectCommand(CMD_TONEPORTAMENTO, 0xFF); chnState.curPitchSlide = 0; chnState.tonePortaRemain = 0; break; // fine portamentos with range up to half a semitone case SymEvent::PitchUp: - m.command = CMD_PORTAMENTOUP; - m.param = 0xF2; + m.SetEffectCommand(CMD_PORTAMENTOUP, 0xF2); break; case SymEvent::PitchDown: - m.command = CMD_PORTAMENTODOWN; - m.param = 0xF2; + m.SetEffectCommand(CMD_PORTAMENTODOWN, 0xF2); break; case SymEvent::PitchUp2: - m.command = CMD_PORTAMENTOUP; - m.param = 0xF4; + m.SetEffectCommand(CMD_PORTAMENTOUP, 0xF4); break; case SymEvent::PitchDown2: - m.command = CMD_PORTAMENTODOWN; - m.param = 0xF4; + m.SetEffectCommand(CMD_PORTAMENTODOWN, 0xF4); break; case SymEvent::PitchUp3: - m.command = CMD_PORTAMENTOUP; - m.param = 0xF8; + m.SetEffectCommand(CMD_PORTAMENTOUP, 0xF8); break; case SymEvent::PitchDown3: - m.command = CMD_PORTAMENTODOWN; - m.param = 0xF8; + m.SetEffectCommand(CMD_PORTAMENTODOWN, 0xF8); break; } } else @@ -1534,8 +1522,7 @@ applyVolume || chnState.calculatedVol != newVol) { chnState.calculatedVol = newVol; - m.command = CMD_CHANNELVOLUME; - m.param = newVol; + m.SetEffectCommand(CMD_CHANNELVOLUME, newVol); } // Key-On commands with stereo instruments are played on both channels - unless there's already some sort of event @@ -1604,8 +1591,8 @@ const int distance = std::abs((note - chnState.lastNote) * 32); chnState.curPitchSlide = 0; m.note = chnState.lastNote = note; - m.command = CMD_TONEPORTAMENTO; - chnState.tonePortaAmt = m.param = mpt::saturate_cast<ModCommand::PARAM>(distance / (2 * event.param)); + chnState.tonePortaAmt = mpt::saturate_cast<ModCommand::PARAM>(distance / (2 * event.param)); + m.SetEffectCommand(CMD_TONEPORTAMENTO, chnState.tonePortaAmt); chnState.tonePortaRemain = static_cast<uint16>(distance - std::min(distance, chnState.tonePortaAmt * (patternSpeed - 1))); } break; @@ -1625,8 +1612,7 @@ break; case SymEvent::AddHalfTone: m.note = chnState.lastNote = Clamp(static_cast<uint8>(chnState.lastNote + event.param), NOTE_MIN, NOTE_MAX); - m.command = CMD_TONEPORTAMENTO; - m.param = 0xFF; + m.SetEffectCommand(CMD_TONEPORTAMENTO, 0xFF); chnState.tonePortaRemain = 0; break; @@ -1638,15 +1624,13 @@ #endif if(macroMap.count(event)) { - m.command = CMD_MIDI; - m.param = macroMap[event]; + m.SetEffectCommand(CMD_MIDI, macroMap[event]); } else if(macroMap.size() < m_MidiCfg.Zxx.size()) { uint8 param = static_cast<uint8>(macroMap.size()); if(ConvertDSP(event, m_MidiCfg.Zxx[param], *this)) { - m.command = CMD_MIDI; - m.param = macroMap[event] = 0x80 | param; + m.SetEffectCommand(CMD_MIDI, macroMap[event] = 0x80 | param); if(event.command == SymEvent::DSPEcho || event.command == SymEvent::DSPDelay) useDSP = true; @@ -1660,14 +1644,13 @@ // The effect continues on the following rows until the correct amount is reached. if(event.param < 1) break; - m.command = CMD_RETRIG; - m.param = static_cast<ModCommand::PARAM>(std::min(15, event.inst + 1)); + m.SetEffectCommand(CMD_RETRIG, static_cast<ModCommand::PARAM>(std::min(15, event.inst + 1))); chnState.retriggerRemain = static_cast<uint16>(event.param * (event.inst + 1u)); break; case SymEvent::SetSpeed: - m.command = CMD_SPEED; - m.param = patternSpeed = event.param ? event.param : 4u; + patternSpeed = event.param ? event.param : 4u; + m.SetEffectCommand(CMD_SPEED, patternSpeed); break; // TODO this applies a fade on the sample level @@ -1685,17 +1668,14 @@ if(volL != chnState.channelVol) { chnState.channelVol = volL; - - m.command = CMD_CHANNELVOLUME; - m.param = chnState.calculatedVol = static_cast<uint8>(Util::muldivr_unsigned(chnState.lastVol, chnState.channelVol, 100)); + chnState.calculatedVol = static_cast<uint8>(Util::muldivr_unsigned(chnState.lastVol, chnState.channelVol, 100)); + m.SetEffectCommand(CMD_CHANNELVOLUME, chnState.calculatedVol); } if(event.note == 4 && chn < (GetNumChannels() - 1) && chnStates[chn + 1].channelVol != volR) { chnStates[chn + 1].channelVol = volR; - - ModCommand &next = rowBase[chn + 1]; - next.command = CMD_CHANNELVOLUME; - next.param = chnState.calculatedVol = static_cast<uint8>(Util::muldivr_unsigned(chnState.lastVol, chnState.channelVol, 100)); + chnState.calculatedVol = static_cast<uint8>(Util::muldivr_unsigned(chnState.lastVol, chnState.channelVol, 100)); + rowBase[chn + 1].SetEffectCommand(CMD_CHANNELVOLUME, chnState.calculatedVol); } } break; @@ -1732,8 +1712,7 @@ m.instr = chnState.lastInst = mappedInst; if(event.command == SymEvent::ReplayFrom) { - m.volcmd = VOLCMD_TONEPORTAMENTO; - m.vol = 1; + m.SetVolumeCommand(VOLCMD_TONEPORTAMENTO, 1); } // don't always add the command, because often FromAndPitch is used with offset 0 // to act as a key-on which doesn't cancel volume slides, etc @@ -1742,8 +1721,7 @@ double sampleVib = 0.0; if(chnState.sampleVibDepth) sampleVib = chnState.sampleVibDepth * (std::sin(chnState.sampleVibPhase * (mpt::numbers::pi * 2.0 / 1024.0) + 1.5 * mpt::numbers::pi) - 1.0) / 4.0; - m.command = CMD_OFFSETPERCENTAGE; - m.param = mpt::saturate_round<ModCommand::PARAM>(event.param + chnState.fromAdd + sampleVib); + m.SetEffectCommand(CMD_OFFSETPERCENTAGE, mpt::saturate_round<ModCommand::PARAM>(event.param + chnState.fromAdd + sampleVib)); } chnState.tonePortaRemain = 0; break; @@ -1759,10 +1737,7 @@ { chnState.retriggerRemain = std::max(chnState.retriggerRemain, static_cast<uint16>(patternSpeed)) - patternSpeed; if(m.command == CMD_NONE) - { - m.command = CMD_RETRIG; - m.param = 0; - } + m.SetEffectCommand(CMD_RETRIG, 0); } // Handle fractional volume slides @@ -1776,29 +1751,25 @@ uint8 slideAmt = std::min<uint8>(15, mpt::saturate_round<uint8>(chnState.curVolSlideAmt / (patternSpeed - 1))); chnState.curVolSlideAmt -= static_cast<float>(slideAmt * (patternSpeed - 1)); // normal slide up - m.command = CMD_CHANNELVOLSLIDE; - m.param = slideAmt << 4; + m.SetEffectCommand(CMD_CHANNELVOLSLIDE, slideAmt << 4); } else if(chnState.curVolSlideAmt >= 1.0f) { uint8 slideAmt = std::min<uint8>(15, mpt::saturate_round<uint8>(chnState.curVolSlideAmt)); chnState.curVolSlideAmt -= static_cast<float>(slideAmt); // fine slide up - m.command = CMD_CHANNELVOLSLIDE; - m.param = (slideAmt << 4) | 0x0F; + m.SetEffectCommand(CMD_CHANNELVOLSLIDE, (slideAmt << 4) | 0x0F); } else if(patternSpeed > 1 && chnState.curVolSlideAmt <= -(patternSpeed - 1)) { uint8 slideAmt = std::min<uint8>(15, mpt::saturate_round<uint8>(-chnState.curVolSlideAmt / (patternSpeed - 1))); chnState.curVolSlideAmt += static_cast<float>(slideAmt * (patternSpeed - 1)); // normal slide down - m.command = CMD_CHANNELVOLSLIDE; - m.param = slideAmt; + m.SetEffectCommand(CMD_CHANNELVOLSLIDE, slideAmt); } else if(chnState.curVolSlideAmt <= -1.0f) { uint8 slideAmt = std::min<uint8>(14, mpt::saturate_round<uint8>(-chnState.curVolSlideAmt)); chnState.curVolSlideAmt += static_cast<float>(slideAmt); // fine slide down - m.command = CMD_CHANNELVOLSLIDE; - m.param = slideAmt | 0xF0; + m.SetEffectCommand(CMD_CHANNELVOLSLIDE, slideAmt | 0xF0); } } } @@ -1813,29 +1784,25 @@ uint8 slideAmt = std::min<uint8>(0xDF, mpt::saturate_round<uint8>(chnState.curPitchSlideAmt / (patternSpeed - 1))); chnState.curPitchSlideAmt -= static_cast<float>(slideAmt * (patternSpeed - 1)); // normal slide up - m.command = CMD_PORTAMENTOUP; - m.param = slideAmt; + m.SetEffectCommand(CMD_PORTAMENTOUP, slideAmt); } else if(chnState.curPitchSlideAmt >= 1.0f) { uint8 slideAmt = std::min<uint8>(15, mpt::saturate_round<uint8>(chnState.curPitchSlideAmt)); chnState.curPitchSlideAmt -= static_cast<float>(slideAmt); // fine slide up - m.command = CMD_PORTAMENTOUP; - m.param = slideAmt | 0xF0; + m.SetEffectCommand(CMD_PORTAMENTOUP, slideAmt | 0xF0); } else if(patternSpeed > 1 && chnState.curPitchSlideAmt <= -(patternSpeed - 1)) { uint8 slideAmt = std::min<uint8>(0xDF, mpt::saturate_round<uint8>(-chnState.curPitchSlideAmt / (patternSpeed - 1))); chnState.curPitchSlideAmt += static_cast<float>(slideAmt * (patternSpeed - 1)); // normal slide down - m.command = CMD_PORTAMENTODOWN; - m.param = slideAmt; + m.SetEffectCommand(CMD_PORTAMENTODOWN, slideAmt); } else if(chnState.curPitchSlideAmt <= -1.0f) { uint8 slideAmt = std::min<uint8>(14, mpt::saturate_round<uint8>(-chnState.curPitchSlideAmt)); chnState.curPitchSlideAmt += static_cast<float>(slideAmt); // fine slide down - m.command = CMD_PORTAMENTODOWN; - m.param = slideAmt | 0xF0; + m.SetEffectCommand(CMD_PORTAMENTODOWN, slideAmt | 0xF0); } } // TODO: use volume column if effect column is occupied @@ -1845,27 +1812,23 @@ { uint8 slideAmt = std::min<uint8>(9, mpt::saturate_round<uint8>(chnState.curPitchSlideAmt / (patternSpeed - 1)) / 4); chnState.curPitchSlideAmt -= static_cast<float>(slideAmt * (patternSpeed - 1) * 4); - m.volcmd = VOLCMD_PORTAUP; - m.vol = slideAmt; + m.SetVolumeCommand(VOLCMD_PORTAUP, slideAmt); } else if(patternSpeed > 1 && chnState.curPitchSlideAmt / 4 <= -(patternSpeed - 1)) { uint8 slideAmt = std::min<uint8>(9, mpt::saturate_round<uint8>(-chnState.curPitchSlideAmt / (patternSpeed - 1)) / 4); chnState.curPitchSlideAmt += static_cast<float>(slideAmt * (patternSpeed - 1) * 4); - m.volcmd = VOLCMD_PORTADOWN; - m.vol = slideAmt; + m.SetVolumeCommand(VOLCMD_PORTADOWN, slideAmt); } } } // Vibrato and Tremolo if(m.command == CMD_NONE && chnState.curVibrato != 0) { - m.command = CMD_VIBRATO; - m.param = chnState.curVibrato; + m.SetEffectCommand(CMD_VIBRATO, chnState.curVibrato); } if(m.command == CMD_NONE && chnState.curTremolo != 0) { - m.command = CMD_TREMOLO; - m.param = chnState.curTremolo; + m.SetEffectCommand(CMD_TREMOLO, chnState.curTremolo); } // Tone Portamento if(m.command != CMD_TONEPORTAMENTO && chnState.tonePortaRemain) |
From: <sv...@op...> - 2024-06-26 21:38:03
|
Author: sagamusix Date: Wed Jun 26 23:37:50 2024 New Revision: 21084 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21084 Log: [Imp] Add parameters for changing sample play direction to volume column Play Control command. These can be used as a backup when there's not enough space to import all commands from non-native formats. Improves playback of "Are You Flying with Me?" by Jazzcat. Modified: trunk/OpenMPT/soundlib/ModChannel.cpp trunk/OpenMPT/soundlib/ModChannel.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/modcommand.cpp Modified: trunk/OpenMPT/soundlib/ModChannel.cpp ============================================================================== --- trunk/OpenMPT/soundlib/ModChannel.cpp Tue Jun 25 23:35:15 2024 (r21083) +++ trunk/OpenMPT/soundlib/ModChannel.cpp Wed Jun 26 23:37:50 2024 (r21084) @@ -249,4 +249,18 @@ } +// Volume command :xx +void ModChannel::PlayControl(uint8 param) +{ + switch(param) + { + case 0: isPaused = true; break; + case 1: isPaused = false; break; + case 2: dwFlags.set(CHN_PINGPONGFLAG, false); break; + case 3: dwFlags.set(CHN_PINGPONGFLAG, true); break; + case 4: dwFlags.flip(CHN_PINGPONGFLAG); break; + } +} + + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/soundlib/ModChannel.h ============================================================================== --- trunk/OpenMPT/soundlib/ModChannel.h Tue Jun 25 23:35:15 2024 (r21083) +++ trunk/OpenMPT/soundlib/ModChannel.h Wed Jun 26 23:37:50 2024 (r21084) @@ -230,6 +230,8 @@ // IT command S73-S7E void InstrumentControl(uint8 param, const CSoundFile &sndFile); + // Volume command :xx + void PlayControl(uint8 param); int32 GetMIDIPitchBend() const noexcept { return (static_cast<int32>(microTuning) + 0x8000) / 4; } void SetMIDIPitchBend(const uint8 high, const uint8 low) noexcept Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Jun 25 23:35:15 2024 (r21083) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Wed Jun 26 23:37:50 2024 (r21084) @@ -1304,8 +1304,9 @@ } break; case VOLCMD_PLAYCONTROL: - if(m.vol <= 1) - chn.isPaused = (m.vol == 0); + if(m.vol >= 2 && m.vol <= 4) + memory.RenderChannel(nChn, oldTickDuration); // Re-sync what we've got so far + chn.PlayControl(m.vol); break; default: break; @@ -3261,8 +3262,7 @@ break; case VOLCMD_PLAYCONTROL: - if(vol <= 1) - chn.isPaused = (vol == 0); + chn.PlayControl(vol); break; default: Modified: trunk/OpenMPT/soundlib/modcommand.cpp ============================================================================== --- trunk/OpenMPT/soundlib/modcommand.cpp Tue Jun 25 23:35:15 2024 (r21083) +++ trunk/OpenMPT/soundlib/modcommand.cpp Wed Jun 26 23:37:50 2024 (r21084) @@ -1300,22 +1300,26 @@ return {VOLCMD_FINEVOLDOWN, static_cast<VOL>(param & 0x0F)}; break; case CMD_S3MCMDEX: - switch(param >> 4) + switch(param & 0xF0) { - case 0x08: + case 0x80: return {VOLCMD_PANNING, static_cast<VOL>(((param & 0x0F) << 2) + 2)}; + case 0x90: + if(param >= 0x9E && force) + return {VOLCMD_PLAYCONTROL, static_cast<VOL>(param - 0x9E + 2)}; + break; default: break; } break; case CMD_MODCMDEX: - switch(param >> 4) + switch(param & 0xF0) { - case 0x08: + case 0x80: return {VOLCMD_PANNING, static_cast<VOL>(((param & 0x0F) << 2) + 2)}; - case 0x0A: + case 0xA0: return {VOLCMD_FINEVOLUP, static_cast<VOL>(param & 0x0F)}; - case 0x0B: + case 0xB0: return {VOLCMD_FINEVOLDOWN, static_cast<VOL>(param & 0x0F)}; default: break; |
From: <sv...@op...> - 2024-06-25 21:35:27
|
Author: sagamusix Date: Tue Jun 25 23:35:15 2024 New Revision: 21083 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21083 Log: Merged revision(s) 21082 from trunk/OpenMPT: [Imp] DBM: Disable a few more IT-specific playback compatibility flags. Fixes "Are You Flying with Me?" by Jazzcat. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_dbm.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_dbm.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_dbm.cpp Tue Jun 25 23:34:51 2024 (r21082) +++ branches/OpenMPT-1.31/soundlib/Load_dbm.cpp Tue Jun 25 23:35:15 2024 (r21083) @@ -389,6 +389,8 @@ m_playBehaviour.set(kSlidesAtSpeed1); m_playBehaviour.reset(kITVibratoTremoloPanbrello); m_playBehaviour.reset(kITArpeggio); + m_playBehaviour.reset(kITInstrWithNoteOff); + m_playBehaviour.reset(kITInstrWithNoteOffOldEffects); m_modFormat.formatName = U_("DigiBooster Pro"); m_modFormat.type = U_("dbm"); |
From: <sv...@op...> - 2024-06-25 21:35:03
|
Author: sagamusix Date: Tue Jun 25 23:34:51 2024 New Revision: 21082 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21082 Log: [Imp] DBM: Disable a few more IT-specific playback compatibility flags. Fixes "Are You Flying with Me?" by Jazzcat. Modified: trunk/OpenMPT/soundlib/Load_dbm.cpp Modified: trunk/OpenMPT/soundlib/Load_dbm.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_dbm.cpp Tue Jun 25 20:47:51 2024 (r21081) +++ trunk/OpenMPT/soundlib/Load_dbm.cpp Tue Jun 25 23:34:51 2024 (r21082) @@ -387,6 +387,8 @@ m_playBehaviour.set(kSlidesAtSpeed1); m_playBehaviour.reset(kITVibratoTremoloPanbrello); m_playBehaviour.reset(kITArpeggio); + m_playBehaviour.reset(kITInstrWithNoteOff); + m_playBehaviour.reset(kITInstrWithNoteOffOldEffects); m_modFormat.formatName = U_("DigiBooster Pro"); m_modFormat.type = U_("dbm"); |
From: <sv...@op...> - 2024-06-25 18:47:58
|
Author: sagamusix Date: Tue Jun 25 20:47:51 2024 New Revision: 21081 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21081 Log: Merged revision(s) 21077 from trunk/OpenMPT: [Fix] Compiler warnings. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/modcommand.cpp Modified: branches/OpenMPT-1.31/soundlib/modcommand.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/modcommand.cpp Tue Jun 25 20:40:43 2024 (r21080) +++ branches/OpenMPT-1.31/soundlib/modcommand.cpp Tue Jun 25 20:47:51 2024 (r21081) @@ -1378,6 +1378,8 @@ case CMD_VOLUME8: effect2 = CMD_NONE; break; + default: + break; } } |
From: <sv...@op...> - 2024-06-25 18:40:55
|
Author: sagamusix Date: Tue Jun 25 20:40:43 2024 New Revision: 21080 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21080 Log: [Fix] Compile fix. Modified: branches/OpenMPT-1.31/soundlib/modcommand.cpp Modified: branches/OpenMPT-1.31/soundlib/modcommand.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/modcommand.cpp Tue Jun 25 20:30:51 2024 (r21079) +++ branches/OpenMPT-1.31/soundlib/modcommand.cpp Tue Jun 25 20:40:43 2024 (r21080) @@ -1376,8 +1376,6 @@ case CMD_OFFSETPERCENTAGE: case CMD_DIGIREVERSESAMPLE: case CMD_VOLUME8: - case CMD_HMN_MEGA_ARP: - case CMD_MED_SYNTH_JUMP: effect2 = CMD_NONE; break; } |
From: <sv...@op...> - 2024-06-25 18:31:04
|
Author: sagamusix Date: Tue Jun 25 20:30:51 2024 New Revision: 21079 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21079 Log: Merged revision(s) 21076, 21078 from trunk/OpenMPT: [Imp] When combining two identical pattern commands, don't try to keep both commands. The first command is preferred to be kept (fixes DBM.143_gnoj, https://www.un4seen.com/forum/?topic=15448.msg143155#msg143155) ........ [Fix] DBM: Like in XM, offset with portamento ignores the offset command. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_dbm.cpp branches/OpenMPT-1.31/soundlib/Snd_fx.cpp branches/OpenMPT-1.31/soundlib/modcommand.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_dbm.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_dbm.cpp Tue Jun 25 20:30:16 2024 (r21078) +++ branches/OpenMPT-1.31/soundlib/Load_dbm.cpp Tue Jun 25 20:30:51 2024 (r21079) @@ -571,6 +571,14 @@ { std::swap(cmd1, cmd2); std::swap(param1, param2); + } else if(cmd1 == CMD_TONEPORTAMENTO && cmd2 == CMD_OFFSET && param2 == 0) + { + // Offset + Portmaneto: Ignore portamento. If the offset command has a non-zero parameter, keep it for effect memory. + cmd2 = CMD_NONE; + } else if(cmd2 == CMD_TONEPORTAMENTO && cmd1 == CMD_OFFSET && param1 == 0) + { + // Ditto + cmd1 = CMD_NONE; } const auto lostCommand = m.FillInTwoCommands(cmd1, param1, cmd2, param2); Modified: branches/OpenMPT-1.31/soundlib/Snd_fx.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Snd_fx.cpp Tue Jun 25 20:30:16 2024 (r21078) +++ branches/OpenMPT-1.31/soundlib/Snd_fx.cpp Tue Jun 25 20:30:51 2024 (r21079) @@ -1064,7 +1064,8 @@ { if(m.command == CMD_OFFSET) { - ProcessSampleOffset(chn, nChn, playState); + if(!porta || !(GetType() & (MOD_TYPE_XM | MOD_TYPE_DBM))) + ProcessSampleOffset(chn, nChn, playState); } else if(m.command == CMD_OFFSETPERCENTAGE) { SampleOffset(chn, Util::muldiv_unsigned(chn.nLength, m.param, 256)); @@ -3230,7 +3231,7 @@ { // FT2 compatibility: Portamento + Offset = Ignore offset // Test case: porta-offset.xm - if(bPorta && GetType() == MOD_TYPE_XM) + if(bPorta && (GetType() & (MOD_TYPE_XM | MOD_TYPE_DBM))) break; ProcessSampleOffset(chn, nChn, m_PlayState); Modified: branches/OpenMPT-1.31/soundlib/modcommand.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/modcommand.cpp Tue Jun 25 20:30:16 2024 (r21078) +++ branches/OpenMPT-1.31/soundlib/modcommand.cpp Tue Jun 25 20:30:51 2024 (r21079) @@ -1348,6 +1348,41 @@ std::pair<EffectCommand, ModCommand::PARAM> ModCommand::FillInTwoCommands(EffectCommand effect1, uint8 param1, EffectCommand effect2, uint8 param2) { + if(effect1 == effect2) + { + // For non-sliding, absolute effects, it doesn't make sense to keep both commands + switch(effect1) + { + case CMD_ARPEGGIO: + case CMD_PANNING8: + case CMD_OFFSET: + case CMD_POSITIONJUMP: + case CMD_VOLUME: + case CMD_PATTERNBREAK: + case CMD_SPEED: + case CMD_TEMPO: + case CMD_CHANNELVOLUME: + case CMD_GLOBALVOLUME: + case CMD_KEYOFF: + case CMD_SETENVPOSITION: + case CMD_MIDI: + case CMD_SMOOTHMIDI: + case CMD_DELAYCUT: + case CMD_FINETUNE: + case CMD_FINETUNE_SMOOTH: + case CMD_DUMMY: + case CMD_REVERSEOFFSET: + case CMD_DBMECHO: + case CMD_OFFSETPERCENTAGE: + case CMD_DIGIREVERSESAMPLE: + case CMD_VOLUME8: + case CMD_HMN_MEGA_ARP: + case CMD_MED_SYNTH_JUMP: + effect2 = CMD_NONE; + break; + } + } + for(uint8 n = 0; n < 4; n++) { if(auto volCmd = ModCommand::ConvertToVolCommand(effect1, param1, (n > 1)); effect1 == CMD_NONE || volCmd.first != VOLCMD_NONE) |
From: <sv...@op...> - 2024-06-25 18:30:24
|
Author: sagamusix Date: Tue Jun 25 20:30:16 2024 New Revision: 21078 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21078 Log: [Fix] DBM: Like in XM, offset with portamento ignores the offset command. Modified: trunk/OpenMPT/soundlib/Load_dbm.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Load_dbm.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_dbm.cpp Tue Jun 25 19:52:06 2024 (r21077) +++ trunk/OpenMPT/soundlib/Load_dbm.cpp Tue Jun 25 20:30:16 2024 (r21078) @@ -569,6 +569,14 @@ { std::swap(cmd1, cmd2); std::swap(param1, param2); + } else if(cmd1 == CMD_TONEPORTAMENTO && cmd2 == CMD_OFFSET && param2 == 0) + { + // Offset + Portmaneto: Ignore portamento. If the offset command has a non-zero parameter, keep it for effect memory. + cmd2 = CMD_NONE; + } else if(cmd2 == CMD_TONEPORTAMENTO && cmd1 == CMD_OFFSET && param1 == 0) + { + // Ditto + cmd1 = CMD_NONE; } const auto lostCommand = m.FillInTwoCommands(cmd1, param1, cmd2, param2); Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Jun 25 19:52:06 2024 (r21077) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Jun 25 20:30:16 2024 (r21078) @@ -1127,7 +1127,8 @@ { if(m.command == CMD_OFFSET) { - ProcessSampleOffset(chn, nChn, playState); + if(!porta || !(GetType() & (MOD_TYPE_XM | MOD_TYPE_DBM))) + ProcessSampleOffset(chn, nChn, playState); } else if(m.command == CMD_OFFSETPERCENTAGE) { SampleOffset(chn, Util::muldiv_unsigned(chn.nLength, m.param, 256)); @@ -3378,7 +3379,7 @@ { // FT2 compatibility: Portamento + Offset = Ignore offset // Test case: porta-offset.xm - if(bPorta && GetType() == MOD_TYPE_XM) + if(bPorta && (GetType() & (MOD_TYPE_XM | MOD_TYPE_DBM))) break; ProcessSampleOffset(chn, nChn, m_PlayState); |
From: <sv...@op...> - 2024-06-25 17:52:13
|
Author: sagamusix Date: Tue Jun 25 19:52:06 2024 New Revision: 21077 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21077 Log: [Fix] Compiler warnings. Modified: trunk/OpenMPT/soundlib/modcommand.cpp Modified: trunk/OpenMPT/soundlib/modcommand.cpp ============================================================================== --- trunk/OpenMPT/soundlib/modcommand.cpp Tue Jun 25 19:11:16 2024 (r21076) +++ trunk/OpenMPT/soundlib/modcommand.cpp Tue Jun 25 19:52:06 2024 (r21077) @@ -1409,6 +1409,8 @@ case CMD_MED_SYNTH_JUMP: effect2 = CMD_NONE; break; + default: + break; } } |
From: <sv...@op...> - 2024-06-25 17:11:24
|
Author: sagamusix Date: Tue Jun 25 19:11:16 2024 New Revision: 21076 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21076 Log: [Imp] When combining two identical pattern commands, don't try to keep both commands. The first command is preferred to be kept (fixes DBM.143_gnoj, https://www.un4seen.com/forum/?topic=15448.msg143155#msg143155) Modified: trunk/OpenMPT/soundlib/modcommand.cpp Modified: trunk/OpenMPT/soundlib/modcommand.cpp ============================================================================== --- trunk/OpenMPT/soundlib/modcommand.cpp Tue Jun 25 18:58:19 2024 (r21075) +++ trunk/OpenMPT/soundlib/modcommand.cpp Tue Jun 25 19:11:16 2024 (r21076) @@ -1377,6 +1377,41 @@ std::pair<EffectCommand, ModCommand::PARAM> ModCommand::FillInTwoCommands(EffectCommand effect1, uint8 param1, EffectCommand effect2, uint8 param2) { + if(effect1 == effect2) + { + // For non-sliding, absolute effects, it doesn't make sense to keep both commands + switch(effect1) + { + case CMD_ARPEGGIO: + case CMD_PANNING8: + case CMD_OFFSET: + case CMD_POSITIONJUMP: + case CMD_VOLUME: + case CMD_PATTERNBREAK: + case CMD_SPEED: + case CMD_TEMPO: + case CMD_CHANNELVOLUME: + case CMD_GLOBALVOLUME: + case CMD_KEYOFF: + case CMD_SETENVPOSITION: + case CMD_MIDI: + case CMD_SMOOTHMIDI: + case CMD_DELAYCUT: + case CMD_FINETUNE: + case CMD_FINETUNE_SMOOTH: + case CMD_DUMMY: + case CMD_REVERSEOFFSET: + case CMD_DBMECHO: + case CMD_OFFSETPERCENTAGE: + case CMD_DIGIREVERSESAMPLE: + case CMD_VOLUME8: + case CMD_HMN_MEGA_ARP: + case CMD_MED_SYNTH_JUMP: + effect2 = CMD_NONE; + break; + } + } + for(uint8 n = 0; n < 4; n++) { if(auto volCmd = ModCommand::ConvertToVolCommand(effect1, param1, (n > 1)); effect1 == CMD_NONE || volCmd.first != VOLCMD_NONE) |
From: <sv...@op...> - 2024-06-25 16:58:32
|
Author: sagamusix Date: Tue Jun 25 18:58:19 2024 New Revision: 21075 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21075 Log: [Fix] Since r20831, EffectWriter::AllowMultiple() was always set. Modified: trunk/OpenMPT/soundlib/pattern.h Modified: trunk/OpenMPT/soundlib/pattern.h ============================================================================== --- trunk/OpenMPT/soundlib/pattern.h Tue Jun 25 18:30:30 2024 (r21074) +++ trunk/OpenMPT/soundlib/pattern.h Tue Jun 25 18:58:19 2024 (r21075) @@ -190,7 +190,7 @@ }; bool m_retry = true; - bool m_allowMultiple = true; + bool m_allowMultiple = false; bool m_isVolEffect = false; }; |
From: <sv...@op...> - 2024-06-25 16:30:42
|
Author: manx Date: Tue Jun 25 18:30:30 2024 New Revision: 21074 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21074 Log: Merged revision(s) 21073 from branches/OpenMPT-1.29: Merged revision(s) 21071 from branches/OpenMPT-1.30: [Fix] build: CI: GitHub: FreeBSD: Update all already installed packages. ........ ........ Modified: branches/OpenMPT-1.28/ (props changed) branches/OpenMPT-1.28/.github/workflows/FreeBSD-13.3-Makefile.yml Modified: branches/OpenMPT-1.28/.github/workflows/FreeBSD-13.3-Makefile.yml ============================================================================== --- branches/OpenMPT-1.28/.github/workflows/FreeBSD-13.3-Makefile.yml Tue Jun 25 18:30:00 2024 (r21073) +++ branches/OpenMPT-1.28/.github/workflows/FreeBSD-13.3-Makefile.yml Tue Jun 25 18:30:30 2024 (r21074) @@ -40,6 +40,7 @@ sync_files: false shutdown_vm: false run: | + sudo pkg upgrade -y sudo pkg install -y subversion p5-XML-XPath git mawk gmake pkgconf autoconf autoconf-archive automake libtool help2man doxygen mpg123 libogg libvorbis flac libsndfile pulseaudio portaudio sdl2 - name: Build uses: cross-platform-actions/action@v0.24.0 |
From: <sv...@op...> - 2024-06-25 16:30:07
|
Author: manx Date: Tue Jun 25 18:30:00 2024 New Revision: 21073 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21073 Log: Merged revision(s) 21071 from branches/OpenMPT-1.30: [Fix] build: CI: GitHub: FreeBSD: Update all already installed packages. ........ Modified: branches/OpenMPT-1.29/ (props changed) branches/OpenMPT-1.29/.github/workflows/FreeBSD-13.3-Makefile.yml Modified: branches/OpenMPT-1.29/.github/workflows/FreeBSD-13.3-Makefile.yml ============================================================================== --- branches/OpenMPT-1.29/.github/workflows/FreeBSD-13.3-Makefile.yml Tue Jun 25 18:29:12 2024 (r21072) +++ branches/OpenMPT-1.29/.github/workflows/FreeBSD-13.3-Makefile.yml Tue Jun 25 18:30:00 2024 (r21073) @@ -40,6 +40,7 @@ sync_files: false shutdown_vm: false run: | + sudo pkg upgrade -y sudo pkg install -y subversion p5-XML-XPath git mawk gmake pkgconf autoconf autoconf-archive automake libtool help2man doxygen mpg123 libogg libvorbis flac libsndfile pulseaudio portaudio sdl2 - name: Build uses: cross-platform-actions/action@v0.24.0 |