From: <sv...@op...> - 2024-10-27 13:15:57
|
Author: sagamusix Date: Sun Oct 27 14:15:50 2024 New Revision: 22003 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22003 Log: Merged revision(s) 22001-22002 from trunk/OpenMPT: [Imp] MOD: When converting sample to MOD, zero the lower 4 bits, as they won't be saved anyway. [Imp] MOD: Improve handling of tranpose = -1 / finetune = 0 case when converting sample from another format. ........ [Fix] MIDI recording: Velocity amplification only worked for integer multiples of 100% (https://bugs.openmpt.org/view.php?id=1835). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/Mpt_midi.cpp branches/OpenMPT-1.31/soundlib/ModSample.cpp Modified: branches/OpenMPT-1.31/mptrack/Mpt_midi.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/Mpt_midi.cpp Sun Oct 27 13:24:18 2024 (r22002) +++ branches/OpenMPT-1.31/mptrack/Mpt_midi.cpp Sun Oct 27 14:15:50 2024 (r22003) @@ -29,21 +29,20 @@ //Get Midi message(dwParam1), apply MIDI settings having effect on volume, and return //the volume value [0, 256]. In addition value -1 is used as 'use default value'-indicator. -int CMainFrame::ApplyVolumeRelatedSettings(const DWORD &dwParam1, const BYTE midivolume) +int CMainFrame::ApplyVolumeRelatedSettings(const DWORD &dwParam1, uint8 midiChannelVolume) { int nVol = MIDIEvents::GetDataByte2FromEvent(dwParam1); if(TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_RECORDVELOCITY) { - nVol = (CDLSBank::DLSMidiVolumeToLinear(nVol)+255) >> 8; - nVol *= TrackerSettings::Instance().midiVelocityAmp / 100; + if(!(TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_MIDIVOL_TO_NOTEVOL)) + midiChannelVolume = 127; + nVol = Util::muldivr_unsigned(CDLSBank::DLSMidiVolumeToLinear(nVol), TrackerSettings::Instance().midiVelocityAmp * midiChannelVolume, 100 * 127 * 256); Limit(nVol, 1, 256); - if(TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_MIDIVOL_TO_NOTEVOL) - nVol = static_cast<int>((midivolume / 127.0) * nVol); } else { // Case: No velocity record. if(TrackerSettings::Instance().m_dwMidiSetup & MIDISETUP_MIDIVOL_TO_NOTEVOL) - nVol = 4*((midivolume+1)/2); + nVol = (midiChannelVolume + 1) * 2; else //Use default volume nVol = -1; } Modified: branches/OpenMPT-1.31/soundlib/ModSample.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/ModSample.cpp Sun Oct 27 13:24:18 2024 (r22002) +++ branches/OpenMPT-1.31/soundlib/ModSample.cpp Sun Oct 27 14:15:50 2024 (r22003) @@ -41,6 +41,13 @@ nC5Speed = Util::muldivr_unsigned(nC5Speed, 8363, 8287); FrequencyToTranspose(); } + if(toType == MOD_TYPE_MOD) + { + if(RelativeTone == -1 && nFineTune == 0) + nFineTune = -128; + RelativeTone = 0; + nFineTune &= ~0x0F; + } // No ping-pong loop, panning and auto-vibrato for MOD / S3M samples if(toType & (MOD_TYPE_MOD | MOD_TYPE_S3M)) @@ -51,8 +58,6 @@ nVibRate = 0; nVibSweep = 0; nVibType = VIB_SINE; - - RelativeTone = 0; } // No global volume / sustain loops for MOD/S3M/XM @@ -85,7 +90,6 @@ LimitMax(nVibRate, uint8(63)); } - // Autovibrato sweep setting is inverse in XM (0 = "no sweep") and IT (0 = "no vibrato") if(((fromType & MOD_TYPE_XM) && (toType & (MOD_TYPE_IT | MOD_TYPE_MPT))) || ((toType & MOD_TYPE_XM) && (fromType & (MOD_TYPE_IT | MOD_TYPE_MPT)))) { |