From: <sag...@us...> - 2012-05-10 16:26:39
|
Revision: 1266 http://modplug.svn.sourceforge.net/modplug/?rev=1266&view=rev Author: saga-games Date: 2012-05-10 16:26:32 +0000 (Thu, 10 May 2012) Log Message: ----------- Refactoring in your general direction. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Stdafx.h trunk/OpenMPT/mptrack/Undo.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/tagging.cpp trunk/OpenMPT/mptrack/tagging.h trunk/OpenMPT/soundlib/Endianness.h trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_okt.cpp trunk/OpenMPT/soundlib/ModSample.cpp trunk/OpenMPT/soundlib/ModSample.h trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -240,23 +240,23 @@ { CHAR s[256]; m_OrderList.UpdateView(dwHintMask, pObj); - if (!m_pSndFile) return; + if(!m_pSndFile) return; - if (dwHintMask & HINT_MODSEQUENCE) + if(dwHintMask & HINT_MODSEQUENCE) { SetDlgItemText(IDC_EDIT_SEQUENCE_NAME, m_pSndFile->Order.m_sName); } - if (dwHintMask & (HINT_MODSEQUENCE|HINT_MODTYPE)) + if(dwHintMask & (HINT_MODSEQUENCE|HINT_MODTYPE)) { m_SpinSequence.SetRange(0, m_pSndFile->Order.GetNumSequences() - 1); m_SpinSequence.SetPos(m_pSndFile->Order.GetCurrentSequenceIndex()); } //rewbs.instroVST - if (dwHintMask & (HINT_MIXPLUGINS|HINT_MODTYPE)) + if(dwHintMask & (HINT_MIXPLUGINS|HINT_MODTYPE)) { if (HasValidPlug(m_nInstrument)) - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), true); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), true); else ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), false); @@ -273,7 +273,7 @@ GetDlgItem(IDC_EDIT_PATTERNNAME)->EnableWindow(isPatNameAvail); } //end rewbs.instroVST - if (dwHintMask & HINT_MPTOPTIONS) + if(dwHintMask & HINT_MPTOPTIONS) { m_ToolBar.UpdateStyle(); // -> CODE#0007 @@ -282,10 +282,10 @@ m_ToolBar.SetState(ID_OVERFLOWPASTE, ((CMainFrame::GetSettings().m_dwPatternSetup & PATTERN_OVERFLOWPASTE) ? TBSTATE_CHECKED : 0) | TBSTATE_ENABLED); // -! BEHAVIOUR_CHANGE#0007 } - if (dwHintMask & (HINT_MODTYPE|HINT_INSNAMES|HINT_SMPNAMES|HINT_PATNAMES)) + if(dwHintMask & (HINT_MODTYPE|HINT_INSNAMES|HINT_SMPNAMES|HINT_PATNAMES)) { LockControls(); - if (dwHintMask & (HINT_MODTYPE|HINT_INSNAMES|HINT_SMPNAMES)) + if(dwHintMask & (HINT_MODTYPE|HINT_INSNAMES|HINT_SMPNAMES)) { static const TCHAR szSplitFormat[] = TEXT("%02u %s %02u: %s/%s"); UINT nPos = 0; @@ -295,12 +295,12 @@ const INSTRUMENTINDEX nSplitIns = m_pModDoc->GetSplitKeyboardSettings().splitInstrument; const ModCommand::NOTE noteSplit = 1 + m_pModDoc->GetSplitKeyboardSettings().splitNote; const CString sSplitInsName = m_pModDoc->GetPatternViewInstrumentName(nSplitIns, true, false); - if (m_pSndFile->GetNumInstruments()) + if(m_pSndFile->GetNumInstruments()) { // Show instrument names - for (INSTRUMENTINDEX i = 1; i <= m_pSndFile->GetNumInstruments(); i++) + for(INSTRUMENTINDEX i = 1; i <= m_pSndFile->GetNumInstruments(); i++) { - if (m_pSndFile->Instruments[i] == nullptr) + if(m_pSndFile->Instruments[i] == nullptr) continue; CString sDisplayName; @@ -314,14 +314,14 @@ sDisplayName = m_pModDoc->GetPatternViewInstrumentName(i); UINT n = m_CbnInstrument.AddString(sDisplayName); - if (n == m_nInstrument) nPos = n; + if(n == m_nInstrument) nPos = n; m_CbnInstrument.SetItemData(n, i); } } else { // Show sample names SAMPLEINDEX nmax = m_pSndFile->GetNumSamples(); - for (SAMPLEINDEX i = 1; i <= nmax; i++) if (m_pSndFile->GetSample(i).pSample) + for(SAMPLEINDEX i = 1; i <= nmax; i++) if (m_pSndFile->GetSample(i).pSample) { if (m_pModDoc->GetSplitKeyboardSettings().IsSplitActive()) wsprintf(s, szSplitFormat, nSplitIns, GetNoteStr(noteSplit), i, m_pSndFile->m_szNames[nSplitIns], m_pSndFile->m_szNames[i]); @@ -329,23 +329,24 @@ wsprintf(s, "%02u: %s", i, m_pSndFile->m_szNames[i]); UINT n = m_CbnInstrument.AddString(s); - if (n == m_nInstrument) nPos = n; + if(n == m_nInstrument) nPos = n; m_CbnInstrument.SetItemData(n, i); } } m_CbnInstrument.SetCurSel(nPos); m_CbnInstrument.SetRedraw(TRUE); } - if (dwHintMask & (HINT_MODTYPE|HINT_PATNAMES)) + if(dwHintMask & (HINT_MODTYPE|HINT_PATNAMES)) { PATTERNINDEX nPat; - if (dwHintMask & HINT_PATNAMES) + if(dwHintMask & HINT_PATNAMES) nPat = (PATTERNINDEX)(dwHintMask >> HINT_SHIFT_PAT); else nPat = (PATTERNINDEX)SendViewMessage(VIEWMSG_GETCURRENTPATTERN); m_pSndFile->Patterns[nPat].GetName(s, CountOf(s)); m_EditPatName.SetWindowText(s); - BOOL bXMIT = (m_pSndFile->m_nType & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; + + BOOL bXMIT = (m_pSndFile->GetType() & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT)) ? TRUE : FALSE; m_ToolBar.EnableButton(ID_PATTERN_MIDIMACRO, bXMIT); m_ToolBar.EnableButton(ID_PATTERN_PROPERTIES, bXMIT); m_ToolBar.EnableButton(ID_PATTERN_EXPAND, bXMIT); @@ -483,18 +484,22 @@ break; } - bool setLoop = false; - if (lParam == -1) { + bool setLoop = false; + if (lParam == -1) + { //Toggle loop state setLoop = !(m_pSndFile->m_dwSongFlags&SONG_PATTERNLOOP); - } else { + } else + { setLoop = (lParam != 0); } - if (setLoop) { + if (setLoop) + { m_pSndFile->m_dwSongFlags |= SONG_PATTERNLOOP; CheckDlgButton(IDC_PATTERN_LOOP, BST_CHECKED); - } else { + } else + { m_pSndFile->m_dwSongFlags &= ~SONG_PATTERNLOOP; CheckDlgButton(IDC_PATTERN_LOOP, BST_UNCHECKED); } @@ -746,7 +751,7 @@ SwitchToView(); //rewbs.instroVST if (HasValidPlug(m_nInstrument)) - ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), true); + ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), true); else ::EnableWindow(::GetDlgItem(m_hWnd, IDC_PATINSTROPLUGGUI), false); //rewbs.instroVST Modified: trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/MIDIMappingDialog.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -66,8 +66,7 @@ LRESULT CMIDIMappingDialog::OnMidiMsg(WPARAM dwMidiDataParam, LPARAM) //------------------------------------------------------------------- { - const BYTE event = MIDIEvents::GetTypeFromEvent(dwMidiDataParam); - if(event == 0xB && IsDlgButtonChecked(IDC_CHECK_MIDILEARN)) + if(MIDIEvents::GetTypeFromEvent(dwMidiDataParam) == MIDIEvents::evControllerChange && IsDlgButtonChecked(IDC_CHECK_MIDILEARN)) { m_ChannelCBox.SetCurSel(1 + MIDIEvents::GetChannelFromEvent(dwMidiDataParam)); m_EventCBox.SetCurSel(0); Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2012-05-10 16:26:32 UTC (rev 1266) @@ -208,7 +208,6 @@ #define MIDISETUP_MIDIVOL_TO_NOTEVOL 0x08 // Combine MIDI volume to note velocity #define MIDISETUP_RECORDNOTEOFF 0x10 // Record MIDI Note Off to pattern #define MIDISETUP_RESPONDTOPLAYCONTROLMSGS 0x20 // Respond to Restart/Continue/Stop MIDI commands -#define MIDISETUP_AMPLIFYVELOCITY 0x40 // Amplify velocity of recorded notes #define MIDISETUP_MIDIMACROCONTROL 0x80 // Record MIDI controller changes a MIDI macro changes in pattern #define MIDISETUP_PLAYPATTERNONMIDIIN 0x100 // Play pattern if MIDI Note is received and playback is paused @@ -656,7 +655,7 @@ DECLARE_MESSAGE_MAP() public: afx_msg void OnInitMenu(CMenu* pMenu); - bool UpdateEffectKeys(void); + bool UpdateEffectKeys(); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); Modified: trunk/OpenMPT/mptrack/Stdafx.h =================================================================== --- trunk/OpenMPT/mptrack/Stdafx.h 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/Stdafx.h 2012-05-10 16:26:32 UTC (rev 1266) @@ -98,6 +98,7 @@ #include "../common/typedefs.h" // Exception type that is used to catch "operator new" exceptions. +//typedef std::bad_alloc & MPTMemoryException; typedef CMemoryException * MPTMemoryException; //To mark string that should be translated in case of multilingual version. Modified: trunk/OpenMPT/mptrack/Undo.cpp =================================================================== --- trunk/OpenMPT/mptrack/Undo.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/Undo.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -365,68 +365,68 @@ bool CSampleUndo::Undo(const SAMPLEINDEX nSmp) //-------------------------------------------- { - if(m_pModDoc == nullptr || CanUndo(nSmp) == false) return false; + if(m_pModDoc == nullptr || !CanUndo(nSmp)) return false; CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); if(pSndFile == nullptr) return false; // Select most recent undo slot - SAMPLEUNDOBUFFER *pUndo = &UndoBuffer[nSmp - 1].back(); + SAMPLEUNDOBUFFER &undo = UndoBuffer[nSmp - 1].back(); ModSample &sample = pSndFile->GetSample(nSmp); LPSTR pCurrentSample = sample.pSample; LPSTR pNewSample = nullptr; // a new sample is possibly going to be allocated, depending on what's going to be undone. - UINT nBytesPerSample = pUndo->OldSample.GetBytesPerSample(); - UINT nChangeLen = pUndo->nChangeEnd - pUndo->nChangeStart; + UINT nBytesPerSample = undo.OldSample.GetBytesPerSample(); + UINT nChangeLen = undo.nChangeEnd - undo.nChangeStart; - switch(pUndo->nChangeType) + switch(undo.nChangeType) { case sundo_none: break; case sundo_invert: // invert again - ctrlSmp::InvertSample(sample, pUndo->nChangeStart, pUndo->nChangeEnd, pSndFile); + ctrlSmp::InvertSample(sample, undo.nChangeStart, undo.nChangeEnd, pSndFile); break; case sundo_reverse: // reverse again - ctrlSmp::ReverseSample(sample, pUndo->nChangeStart, pUndo->nChangeEnd, pSndFile); + ctrlSmp::ReverseSample(sample, undo.nChangeStart, undo.nChangeEnd, pSndFile); break; case sundo_unsign: // unsign again - ctrlSmp::UnsignSample(sample, pUndo->nChangeStart, pUndo->nChangeEnd, pSndFile); + ctrlSmp::UnsignSample(sample, undo.nChangeStart, undo.nChangeEnd, pSndFile); break; case sundo_insert: // delete inserted data - ASSERT(nChangeLen == sample.nLength - pUndo->OldSample.nLength); - memcpy(pCurrentSample + pUndo->nChangeStart * nBytesPerSample, pCurrentSample + pUndo->nChangeEnd * nBytesPerSample, (sample.nLength - pUndo->nChangeEnd) * nBytesPerSample); + ASSERT(nChangeLen == sample.nLength - undo.OldSample.nLength); + memcpy(pCurrentSample + undo.nChangeStart * nBytesPerSample, pCurrentSample + undo.nChangeEnd * nBytesPerSample, (sample.nLength - undo.nChangeEnd) * nBytesPerSample); // also clean the sample end - memset(pCurrentSample + pUndo->OldSample.nLength * nBytesPerSample, 0, (sample.nLength - pUndo->OldSample.nLength) * nBytesPerSample); + memset(pCurrentSample + undo.OldSample.nLength * nBytesPerSample, 0, (sample.nLength - undo.OldSample.nLength) * nBytesPerSample); break; case sundo_update: // simply replace what has been updated. - if(sample.nLength < pUndo->nChangeEnd) return false; - memcpy(pCurrentSample + pUndo->nChangeStart * nBytesPerSample, pUndo->SamplePtr, nChangeLen * nBytesPerSample); + if(sample.nLength < undo.nChangeEnd) return false; + memcpy(pCurrentSample + undo.nChangeStart * nBytesPerSample, undo.SamplePtr, nChangeLen * nBytesPerSample); break; case sundo_delete: // insert deleted data - pNewSample = pSndFile->AllocateSample(pUndo->OldSample.GetSampleSizeInBytes() + 4 * nBytesPerSample); + pNewSample = pSndFile->AllocateSample(undo.OldSample.GetSampleSizeInBytes() + 4 * nBytesPerSample); if(pNewSample == nullptr) return false; - memcpy(pNewSample, pCurrentSample, pUndo->nChangeStart * nBytesPerSample); - memcpy(pNewSample + pUndo->nChangeStart * nBytesPerSample, pUndo->SamplePtr, nChangeLen * nBytesPerSample); - memcpy(pNewSample + pUndo->nChangeEnd * nBytesPerSample, pCurrentSample + pUndo->nChangeStart * nBytesPerSample, (pUndo->OldSample.nLength - pUndo->nChangeEnd) * nBytesPerSample); + memcpy(pNewSample, pCurrentSample, undo.nChangeStart * nBytesPerSample); + memcpy(pNewSample + undo.nChangeStart * nBytesPerSample, undo.SamplePtr, nChangeLen * nBytesPerSample); + memcpy(pNewSample + undo.nChangeEnd * nBytesPerSample, pCurrentSample + undo.nChangeStart * nBytesPerSample, (undo.OldSample.nLength - undo.nChangeEnd) * nBytesPerSample); break; case sundo_replace: // simply exchange sample pointer - pNewSample = pUndo->SamplePtr; - pUndo->SamplePtr = nullptr; // prevent sample from being deleted + pNewSample = undo.SamplePtr; + undo.SamplePtr = nullptr; // prevent sample from being deleted break; default: @@ -435,13 +435,13 @@ } // Restore old sample header - MemCopy(sample, pUndo->OldSample); + MemCopy(sample, undo.OldSample); sample.pSample = pCurrentSample; // select the "correct" old sample - MemCopy(pSndFile->m_szNames[nSmp], pUndo->szOldName); + MemCopy(pSndFile->m_szNames[nSmp], undo.szOldName); if(pNewSample != nullptr) { - ctrlSmp::ReplaceSample(sample, pNewSample, pUndo->OldSample.nLength, pSndFile); + ctrlSmp::ReplaceSample(sample, pNewSample, undo.OldSample.nLength, pSndFile); } ctrlSmp::AdjustEndOfSample(sample, pSndFile); Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -2392,7 +2392,7 @@ // Specific Note Off if (note > NOTE_KEYOFF) //rewbs.vstiLive { - note--; + note -= NOTE_MIN; uint8 i = static_cast<uint8>(note - NOTE_KEYOFF); if(channel.uNoteOnMap[i][trackChannel]) { @@ -2470,7 +2470,7 @@ bool CVstPlugin::isPlaying(UINT note, UINT midiChn, UINT trackerChn) //------------------------------------------------------------------ { - note--; + note -= NOTE_MIN; return (m_MidiCh[midiChn].uNoteOnMap[note][trackerChn] != 0); } @@ -2478,7 +2478,7 @@ bool CVstPlugin::MoveNote(UINT note, UINT midiChn, UINT sourceTrackerChn, UINT destTrackerChn) //--------------------------------------------------------------------------------------------- { - note--; + note -= NOTE_MIN; VSTInstrChannel *pMidiCh = &m_MidiCh[midiChn & 0x0f]; if (!(pMidiCh->uNoteOnMap[note][sourceTrackerChn])) Modified: trunk/OpenMPT/mptrack/tagging.cpp =================================================================== --- trunk/OpenMPT/mptrack/tagging.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/tagging.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -29,16 +29,17 @@ // Convert Integer to Synchsafe Integer (see ID3v2.4 specs) // Basically, it's a BigEndian integer, but the MSB of all bytes is 0. // Thus, a 32-bit integer turns into a 28-bit integer. -uint32 CFileTagging::intToSynchsafe(uint32 iIn) -//--------------------------------------------- +uint32 CFileTagging::intToSynchsafe(uint32 in) +//-------------------------------------------- { - uint32 iOut = 0, iSteps = 0; + uint32 out = 0, steps = 0; do { - iOut |= (iIn & 0x7F) << iSteps; - iSteps += 8; - } while(iIn >>= 7); - return BigEndian(iOut); + out |= (in & 0x7F) << steps; + steps += 8; + } while(in >>= 7); + SwapBytesBE(out); + return out; } // Write Tags Modified: trunk/OpenMPT/mptrack/tagging.h =================================================================== --- trunk/OpenMPT/mptrack/tagging.h 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/mptrack/tagging.h 2012-05-10 16:26:32 UTC (rev 1266) @@ -116,7 +116,7 @@ private: // Convert Integer to Synchsafe Integer (see ID3v2.4 specs) - uint32 intToSynchsafe(UINT32 in); + uint32 intToSynchsafe(uint32 in); // Write a frame void WriteID3v2Frame(char cFrameID[4], string sFramecontent, FILE *f); // Size of our tag Modified: trunk/OpenMPT/soundlib/Endianness.h =================================================================== --- trunk/OpenMPT/soundlib/Endianness.h 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/Endianness.h 2012-05-10 16:26:32 UTC (rev 1266) @@ -36,23 +36,23 @@ #ifdef PLATFORM_BIG_ENDIAN // PPC -inline void SwapBytesBE(uint32 &value) { value; } -inline void SwapBytesBE(uint16 &value) { value; } -inline void SwapBytesLE(uint32 &value) { value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24); } -inline void SwapBytesLE(uint16 &value) { value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00)); } -inline void SwapBytesBE(int32 &value) { value; } -inline void SwapBytesBE(int16 &value) { value; } -inline void SwapBytesLE(int32 &value) { value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24); } -inline void SwapBytesLE(int16 &value) { value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00)); } +inline uint32 SwapBytesBE(uint32 &value) { return value; } +inline uint16 SwapBytesBE(uint16 &value) { return value; } +inline uint32 SwapBytesLE(uint32 &value) { return (value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24)); } +inline uint16 SwapBytesLE(uint16 &value) { return (value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00)); } +inline int32 SwapBytesBE(int32 &value) { return value; } +inline int16 SwapBytesBE(int16 &value) { return value; } +inline int32 SwapBytesLE(int32 &value) { return (value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24)); } +inline int16 SwapBytesLE(int16 &value) { return (value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00))); } #else // x86 -inline void SwapBytesBE(uint32 &value) { value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24); } -inline void SwapBytesBE(uint16 &value) { value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00)); } -inline void SwapBytesLE(uint32 &value) { value; } -inline void SwapBytesLE(uint16 &value) { value; } -inline void SwapBytesBE(int32 &value) { value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24); } -inline void SwapBytesBE(int16 &value) { value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00)); } -inline void SwapBytesLE(int32 &value) { value; } -inline void SwapBytesLE(int16 &value) { value; } +inline uint32 SwapBytesBE(uint32 &value) { return (value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24)); } +inline uint16 SwapBytesBE(uint16 &value) { return (value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00))); } +inline uint32 SwapBytesLE(uint32 &value) { return value; } +inline uint16 SwapBytesLE(uint16 &value) { return value; } +inline int32 SwapBytesBE(int32 &value) { return (value = ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) | ((value & 0xFF000000) >> 24)); } +inline int16 SwapBytesBE(int16 &value) { return (value = (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00))); } +inline int32 SwapBytesLE(int32 &value) { return value; } +inline int16 SwapBytesLE(int16 &value) { return value; } #endif Modified: trunk/OpenMPT/soundlib/ITTools.cpp =================================================================== --- trunk/OpenMPT/soundlib/ITTools.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/ITTools.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -198,8 +198,8 @@ // Volume / Panning fadeout = LittleEndianW(static_cast<uint16>(min(mptIns.nFadeOut >> 5, 256))); - gbv = static_cast<uint8>(mptIns.nGlobalVol * 2); - dfp = static_cast<uint8>(mptIns.nPan >> 2); + gbv = static_cast<uint8>(min(mptIns.nGlobalVol * 2, 128)); + dfp = static_cast<uint8>(min(mptIns.nPan / 4, 64)); if(!(mptIns.dwFlags & INS_SETPANNING)) dfp |= ITInstrument::ignorePanning; // Random Variation @@ -281,7 +281,7 @@ mptIns.nFadeOut = LittleEndianW(fadeout) << 5; mptIns.nGlobalVol = gbv / 2; LimitMax(mptIns.nGlobalVol, 64u); - mptIns.nPan = (dfp & 0x7F) << 2; + mptIns.nPan = (dfp & 0x7F) * 4; if(mptIns.nPan > 256) mptIns.nPan = 128; if(!(dfp & ITInstrument::ignorePanning)) mptIns.dwFlags |= INS_SETPANNING; Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -896,19 +896,24 @@ #endif // Writing instruments - for(SAMPLEINDEX smp = 1; smp <= 31; smp++) if (sampleLength[smp]) + for(SAMPLEINDEX smp = 1; smp <= 31; smp++) { + if(sampleLength[smp] == 0) + { + continue; + } const ModSample &sample = Samples[sampleSource[smp]]; const long sampleStart = ftell(f); const UINT writtenBytes = WriteSample(f, &sample, RS_PCM8S, sampleLength[smp]); + static const int8 silence[] = {0, 0}; + if((sample.uFlags & CHN_LOOP) == 0) { // First two bytes of oneshot samples have to be 0 due to PT's one-shot loop const long sampleEnd = ftell(f); fseek(f, sampleStart, SEEK_SET); - int8 silence[] = {0, 0}; fwrite(&silence, min(writtenBytes, 2), 1, f); fseek(f, sampleEnd, SEEK_SET); } @@ -916,8 +921,7 @@ // Write padding byte if the sample size is odd. if((sample.nLength % 2) != 0) { - int8 padding = 0; - fwrite(&padding, 1, 1, f); + fwrite(&silence[0], 1, 1, f); } } Modified: trunk/OpenMPT/soundlib/Load_okt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/Load_okt.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -428,7 +428,7 @@ SmpLength i = mptSample.nLength; while(i--) { - *data = Clamp(*data * 2, int8(-128), int8(127)); + *data = static_cast<uint8>(Clamp(static_cast<int>(*data) * 2, int8(-128), int8(127))); *data++; } } Modified: trunk/OpenMPT/soundlib/ModSample.cpp =================================================================== --- trunk/OpenMPT/soundlib/ModSample.cpp 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/ModSample.cpp 2012-05-10 16:26:32 UTC (rev 1266) @@ -88,3 +88,15 @@ } } } + + +uint32 ModSample::GetSampleRate(const MODTYPE type) const +//------------------------------------------------------- +{ + uint32 rate; + if(type & (MOD_TYPE_MOD | MOD_TYPE_XM)) + rate = CSoundFile::TransposeToFrequency(RelativeTone, nFineTune); + else + rate = nC5Speed; + return (rate > 0) ? rate : 8363; +} Modified: trunk/OpenMPT/soundlib/ModSample.h =================================================================== --- trunk/OpenMPT/soundlib/ModSample.h 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/ModSample.h 2012-05-10 16:26:32 UTC (rev 1266) @@ -40,7 +40,7 @@ uint8 GetBytesPerSample() const { return GetElementarySampleSize() * GetNumChannels(); } // Return the size which pSample is at least. - DWORD GetSampleSizeInBytes() const { return nLength * GetBytesPerSample(); } + SmpLength GetSampleSizeInBytes() const { return nLength * GetBytesPerSample(); } // Returns sample rate of the sample. The argument is needed because // the sample rate is obtained differently for different module types. Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2012-05-06 20:50:23 UTC (rev 1265) +++ trunk/OpenMPT/soundlib/Sndfile.h 2012-05-10 16:26:32 UTC (rev 1266) @@ -742,18 +742,6 @@ #pragma warning(default : 4324) //structure was padded due to __declspec(align()) -inline uint32 ModSample::GetSampleRate(const MODTYPE type) const -//-------------------------------------------------------------- -{ - uint32 nRate; - if(type & (MOD_TYPE_MOD|MOD_TYPE_XM)) - nRate = CSoundFile::TransposeToFrequency(RelativeTone, nFineTune); - else - nRate = nC5Speed; - return (nRate > 0) ? nRate : 8363; -} - - inline IMixPlugin* CSoundFile::GetInstrumentPlugin(INSTRUMENTINDEX instr) //----------------------------------------------------------------------- { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |