@@ -1527,6 +1527,7 @@ void CSoundGen::ApplyGlobalState() // // //
15271527 int Row = IsPlaying () ? GetPlayerRow () : m_pTrackerView->GetSelectedRow ();
15281528 if (stFullState *State = m_pDocument->RetrieveSoundState (GetPlayerTrack (), Frame, Row, -1 )) {
15291529 ApplyGlobalTempoState (State);
1530+ SetupSpeed ();
15301531 m_iLastHighlight = m_pDocument->GetHighlightAt (GetPlayerTrack (), Frame, Row).First ;
15311532
15321533 for (int i = 0 ; i < m_pDocument->GetChannelCount (); i++) {
@@ -1558,7 +1559,6 @@ void CSoundGen::ApplyGlobalTempoState(stFullState *pState)
15581559 m_iSpeed = pState->Speed ;
15591560 m_iGrooveIndex = -1 ;
15601561 }
1561- SetupSpeed ();
15621562}
15631563
15641564/* ! \brief Obtains a human-readable form of a channel state object.
@@ -1874,6 +1874,9 @@ void CSoundGen::ResetTempo()
18741874 int Row = IsPlaying () ? GetPlayerRow () : m_pTrackerView->GetSelectedRow ();
18751875 if (stFullState *State = m_pDocument->RetrieveSoundState (GetPlayerTrack (), Frame, Row, -1 )) {
18761876 ApplyGlobalTempoState (State);
1877+ // Set m_iSpeed to avoid division by zero in SetupSpeed()
1878+ if (m_pDocument->GetSongGroove (m_iPlayTrack) && m_pDocument->GetGroove (m_iSpeed) == NULL )
1879+ m_iSpeed = DEFAULT_SPEED;
18771880 m_iLastHighlight = m_pDocument->GetHighlightAt (GetPlayerTrack (), Frame, Row).First ;
18781881 delete State;
18791882 }
@@ -1891,8 +1894,8 @@ void CSoundGen::ResetTempo()
18911894 if (m_pDocument->GetSongGroove (m_iPlayTrack))
18921895 m_iSpeed = DEFAULT_SPEED;
18931896 }
1894- SetupSpeed ();
18951897 }
1898+ SetupSpeed ();
18961899
18971900 m_bUpdateRow = false ;
18981901}
0 commit comments