Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for (unsigned int i = 0; i <= m_iTracks; ++i)
- for (unsigned int c = 0; c < m_iChannelsAvailable; ++c)
- {
- TRACE2("Trim: %d, %d\n", i, c);
- unsigned int uiPatternUsed[MAX_PATTERN];
- // mark all as unused
- for (unsigned int ui=0; ui < MAX_PATTERN; ++ui)
- {
- uiPatternUsed[ui] = MAX_PATTERN;
- }
- // map used patterns to themselves
- for (unsigned int f=0; f < m_pTunes[i]->GetFrameCount(); ++f)
- {
- unsigned int uiPattern = m_pTunes[i]->GetFramePattern(f,c);
- uiPatternUsed[uiPattern] = uiPattern;
- }
- // remap duplicates
- for (unsigned int ui=0; ui < MAX_PATTERN; ++ui)
- {
- if (uiPatternUsed[ui] == MAX_PATTERN) continue;
- for (unsigned int uj=0; uj < ui; ++uj)
- {
- unsigned int uiLen = m_pTunes[i]->GetPatternLength();
- bool bSame = true;
- for (unsigned int uk = 0; uk < uiLen; ++uk)
- {
- stChanNote* a = m_pTunes[i]->GetPatternData(c, ui, uk);
- stChanNote* b = m_pTunes[i]->GetPatternData(c, uj, uk);
- if (0 != ::memcmp(a, b, sizeof(stChanNote)))
- {
- bSame = false;
- break;
- }
- }
- if (bSame)
- {
- uiPatternUsed[ui] = uj;
- TRACE2("Duplicate: %d = %d\n", ui, uj);
- break;
- }
- }
- }
- // apply mapping
- for (unsigned int f=0; f < m_pTunes[i]->GetFrameCount(); ++f)
- {
- unsigned int uiPattern = m_pTunes[i]->GetFramePattern(f,c);
- m_pTunes[i]->SetFramePattern(f,c,uiPatternUsed[uiPattern]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment