From: <sv...@op...> - 2024-12-02 20:13:06
|
Author: sagamusix Date: Mon Dec 2 21:12:58 2024 New Revision: 22454 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22454 Log: Merged revision(s) 22453 from trunk/OpenMPT: [Fix] When rows per beat are unset, avoid reporting infinity for BPM or fractional PPQ position. Assume a default of 4 rows per beat instead. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/Moddoc.cpp branches/OpenMPT-1.31/soundlib/Snd_defs.h branches/OpenMPT-1.31/soundlib/Sndfile.cpp Modified: branches/OpenMPT-1.31/mptrack/Moddoc.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/Moddoc.cpp Mon Dec 2 21:10:52 2024 (r22453) +++ branches/OpenMPT-1.31/mptrack/Moddoc.cpp Mon Dec 2 21:12:58 2024 (r22454) @@ -2417,13 +2417,14 @@ } m_SndFile.RecalculateSamplesPerTick(); const double bpm = m_SndFile.GetCurrentBPM(); + const ROWINDEX rowsPerBeat = m_SndFile.m_PlayState.m_nCurrentRowsPerBeat ? m_SndFile.m_PlayState.m_nCurrentRowsPerBeat : DEFAULT_ROWS_PER_BEAT; CString s; switch(m_SndFile.m_nTempoMode) { case TempoMode::Alternative: s.Format(_T("Using alternative tempo interpretation.\n\nAssuming:\n. %.8g ticks per second\n. %u ticks per row\n. %u rows per beat\nthe tempo is approximately: %.8g BPM"), - m_SndFile.m_PlayState.m_nMusicTempo.ToDouble(), m_SndFile.m_PlayState.m_nMusicSpeed, m_SndFile.m_PlayState.m_nCurrentRowsPerBeat, bpm); + m_SndFile.m_PlayState.m_nMusicTempo.ToDouble(), m_SndFile.m_PlayState.m_nMusicSpeed, rowsPerBeat, bpm); break; case TempoMode::Modern: @@ -2433,7 +2434,7 @@ case TempoMode::Classic: default: s.Format(_T("Using standard tempo interpretation.\n\nAssuming:\n. A mod tempo (tick duration factor) of %.8g\n. %u ticks per row\n. %u rows per beat\nthe tempo is approximately: %.8g BPM"), - m_SndFile.m_PlayState.m_nMusicTempo.ToDouble(), m_SndFile.m_PlayState.m_nMusicSpeed, m_SndFile.m_PlayState.m_nCurrentRowsPerBeat, bpm); + m_SndFile.m_PlayState.m_nMusicTempo.ToDouble(), m_SndFile.m_PlayState.m_nMusicSpeed, rowsPerBeat, bpm); break; } Modified: branches/OpenMPT-1.31/soundlib/Snd_defs.h ============================================================================== --- branches/OpenMPT-1.31/soundlib/Snd_defs.h Mon Dec 2 21:10:52 2024 (r22453) +++ branches/OpenMPT-1.31/soundlib/Snd_defs.h Mon Dec 2 21:12:58 2024 (r22454) @@ -42,8 +42,12 @@ inline constexpr SmpLength MAX_SAMPLE_LENGTH = 0x10000000; // Sample length in frames. Sample size in bytes can be more than this (= 256 MB). +inline constexpr ROWINDEX MAX_ROWS_PER_MEASURE = 65536; +inline constexpr ROWINDEX MAX_ROWS_PER_BEAT = 65536; +inline constexpr ROWINDEX DEFAULT_ROWS_PER_BEAT = 4; +inline constexpr ROWINDEX DEFAULT_ROWS_PER_MEASURE = 16; + inline constexpr ROWINDEX MAX_PATTERN_ROWS = 1024; -inline constexpr ROWINDEX MAX_ROWS_PER_BEAT = 65536; inline constexpr ORDERINDEX MAX_ORDERS = ORDERINDEX_MAX + 1; inline constexpr PATTERNINDEX MAX_PATTERNS = 4000; inline constexpr SAMPLEINDEX MAX_SAMPLES = 4000; Modified: branches/OpenMPT-1.31/soundlib/Sndfile.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Sndfile.cpp Mon Dec 2 21:10:52 2024 (r22453) +++ branches/OpenMPT-1.31/soundlib/Sndfile.cpp Mon Dec 2 21:12:58 2024 (r22454) @@ -136,11 +136,11 @@ #ifdef MODPLUG_TRACKER m_bChannelMuteTogglePending.reset(); - m_nDefaultRowsPerBeat = m_PlayState.m_nCurrentRowsPerBeat = (TrackerSettings::Instance().m_nRowHighlightBeats) ? TrackerSettings::Instance().m_nRowHighlightBeats : 4; + m_nDefaultRowsPerBeat = m_PlayState.m_nCurrentRowsPerBeat = (TrackerSettings::Instance().m_nRowHighlightBeats) ? TrackerSettings::Instance().m_nRowHighlightBeats : DEFAULT_ROWS_PER_BEAT; m_nDefaultRowsPerMeasure = m_PlayState.m_nCurrentRowsPerMeasure = (TrackerSettings::Instance().m_nRowHighlightMeasures >= m_nDefaultRowsPerBeat) ? TrackerSettings::Instance().m_nRowHighlightMeasures : m_nDefaultRowsPerBeat * 4; #else - m_nDefaultRowsPerBeat = m_PlayState.m_nCurrentRowsPerBeat = 4; - m_nDefaultRowsPerMeasure = m_PlayState.m_nCurrentRowsPerMeasure = 16; + m_nDefaultRowsPerBeat = m_PlayState.m_nCurrentRowsPerBeat = DEFAULT_ROWS_PER_BEAT; + m_nDefaultRowsPerMeasure = m_PlayState.m_nCurrentRowsPerMeasure = DEFAULT_ROWS_PER_MEASURE; #endif // MODPLUG_TRACKER MemsetZero(Instruments); @@ -880,11 +880,12 @@ bpm = m_PlayState.m_nMusicTempo.ToDouble(); } else { - //with other modes, we calculate it: - double ticksPerBeat = m_PlayState.m_nMusicSpeed * m_PlayState.m_nCurrentRowsPerBeat; //ticks/beat = ticks/row * rows/beat - double samplesPerBeat = m_PlayState.m_nSamplesPerTick * ticksPerBeat; //samps/beat = samps/tick * ticks/beat - bpm = m_MixerSettings.gdwMixingFreq / samplesPerBeat * 60; //beats/sec = samps/sec / samps/beat - } //beats/min = beats/sec * 60 + // With other modes, we calculate it: + ROWINDEX rowsPerBeat = m_PlayState.m_nCurrentRowsPerBeat ? m_PlayState.m_nCurrentRowsPerBeat : DEFAULT_ROWS_PER_BEAT; + double ticksPerBeat = m_PlayState.m_nMusicSpeed * rowsPerBeat; // Ticks/beat = ticks/row * rows/beat + double samplesPerBeat = m_PlayState.m_nSamplesPerTick * ticksPerBeat; // Samps/beat = samps/tick * ticks/beat + bpm = m_MixerSettings.gdwMixingFreq / samplesPerBeat * 60; // Beats/sec = samps/sec / samps/beat + } // Beats/min = beats/sec * 60 return bpm; } |