From: <sag...@us...> - 2010-05-23 15:33:05
|
Revision: 606 http://modplug.svn.sourceforge.net/modplug/?rev=606&view=rev Author: saga-games Date: 2010-05-23 15:32:59 +0000 (Sun, 23 May 2010) Log Message: ----------- [Fix] Pattern editor: Jumping between patterns also stops VSTi notes now. [Fix] Pattern editor: When deleting all patterns via the treeview and then switching to the pattern editor, pattern 0 is not created automatically anymore, to avoid confusion. [Imp] Wave Convert: When switching to another task and switching back to OpenMPT, it is now less likely that the infamous "OpenMPT does not respond" dialog from Windows occours. [Mod] Added some unfinished code for the VST file selection command. As it's unfinished, it's commented out of course. [Ref] A bit more refactoring Modified Paths: -------------- trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/packageTemplate/History.txt trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2010-05-23 15:32:59 UTC (rev 606) @@ -700,6 +700,8 @@ UINT nBytesPerSample = (CSoundFile::gnBitsPerSample * CSoundFile::gnChannels) / 8; // For calculating the remaining time DWORD dwStartTime = timeGetTime(); + // For giving away some processing time every now and then + DWORD dwSleepTime = dwStartTime; CMainFrame::GetMainFrame()->InitRenderer(m_pSndFile); //rewbs.VSTTimeInfo for (UINT n=0; ; n++) @@ -763,14 +765,22 @@ { DWORD l = (DWORD)(ullSamples / CSoundFile::gdwMixingFreq); + const DWORD dwCurrentTime = timeGetTime(); DWORD timeRemaining = 0; // estimated remainig time if((ullSamples > 0) && (ullSamples < max)) { - timeRemaining = static_cast<DWORD>(((timeGetTime() - dwStartTime) * (max - ullSamples) / ullSamples) / 1000); + timeRemaining = static_cast<DWORD>(((dwCurrentTime - dwStartTime) * (max - ullSamples) / ullSamples) / 1000); } wsprintf(s, "Writing file... (%uKB, %umn%02us, %umn%02us remaining)", datahdr.length >> 10, l / 60, l % 60, timeRemaining / 60, timeRemaining % 60); SetDlgItemText(IDC_TEXT1, s); + + // Give windows some time to redraw the window, if necessary (else, the infamous "OpenMPT does not respond" will pop up) + if ((!m_bGivePlugsIdleTime) && (dwCurrentTime > dwSleepTime + 1000)) + { + Sleep(1); + dwSleepTime = dwCurrentTime; + } } if ((progress != NULL) && ((DWORD)(ullSamples >> 14) != pos)) { @@ -782,6 +792,7 @@ ::TranslateMessage(&msg); ::DispatchMessage(&msg); } + if (m_bAbort) { ok = IDCANCEL; @@ -977,6 +988,7 @@ } static DWORD oldsndcfg = CSoundFile::gdwSoundSetup; oldrepeat = m_pSndFile->GetRepeatCount(); + const DWORD dwSongTime = m_pSndFile->GetSongTime(); CSoundFile::gdwMixingFreq = wfxSrc.nSamplesPerSec; CSoundFile::gnBitsPerSample = 16; // CSoundFile::SetResamplingMode(SRCMODE_POLYPHASE); //rewbs.resamplerConf - we don't want this anymore. @@ -998,7 +1010,7 @@ // calculate maximum samples uint64 max = ullMaxSamples; - uint64 l = m_pSndFile->GetSongTime() * wfxSrc.nSamplesPerSec; + uint64 l = dwSongTime * wfxSrc.nSamplesPerSec; if (l < max) max = l; if (progress != NULL) { Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2010-05-23 15:32:59 UTC (rev 606) @@ -163,10 +163,9 @@ m_nPlayRow = 0; m_nMidRow = 0; m_nDragItem = 0; - m_bDragging = FALSE; - m_bInItemRect = FALSE; - m_bRecord = TRUE; - m_bContinueSearch = FALSE; + m_bDragging = false; + m_bInItemRect = false; + m_bContinueSearch = false; m_dwBeginSel = m_dwEndSel = m_dwCursor = m_dwStartSel = m_dwDragPos = 0; //m_dwStatus = 0; m_dwStatus = PATSTATUS_PLUGNAMESINHEADERS; @@ -193,7 +192,7 @@ { CSoundFile *pSndFile; CModDoc *pModDoc = GetDocument(); - BOOL bUpdateScroll; + bool bUpdateScroll = false; pSndFile = pModDoc ? pModDoc->GetSoundFile() : NULL; if ( (!pModDoc) || (!pSndFile) || (npat >= pSndFile->Patterns.Size()) ) return FALSE; @@ -203,18 +202,18 @@ while ((npat > 0) && (!pSndFile->Patterns[npat])) npat--; if (!pSndFile->Patterns[npat]) { - pSndFile->Patterns.Insert(npat, 64); + // Changed behaviour here. Previously, an empty pattern was inserted and the user most likely didn't notice that. Now, we just return an error. + //pSndFile->Patterns.Insert(npat, 64); + return FALSE; } - - bUpdateScroll = FALSE; m_nPattern = npat; - if ((nrow >= 0) && (nrow != (int)m_nRow) && (nrow < (int)pSndFile->PatternSize[m_nPattern])) + if ((nrow >= 0) && (nrow != (int)m_nRow) && (nrow < (int)pSndFile->Patterns[m_nPattern].GetNumRows())) { m_nRow = nrow; - bUpdateScroll = TRUE; + bUpdateScroll = true; } - if (m_nRow >= pSndFile->PatternSize[m_nPattern]) m_nRow = 0; + if (m_nRow >= pSndFile->Patterns[m_nPattern].GetNumRows()) m_nRow = 0; int sel = m_dwCursor | (m_nRow << 16); SetCurSel(sel, sel); UpdateSizes(); @@ -363,7 +362,7 @@ { ncol += (((ncol & 0x07) - m_nDetailLevel) << 3) - (m_nDetailLevel+1); } - if ((ncol >> 3) >= pSndFile->m_nChannels) return FALSE; + if ((ncol >> 3) >= pSndFile->GetNumChannels()) return FALSE; m_dwCursor = ncol; int sel = m_dwCursor | (m_nRow << 16); int sel0 = sel; @@ -461,7 +460,7 @@ CModDoc *pModDoc = GetDocument(); CSoundFile *pSndFile; CRect rcClient, rect, plugRect; //rewbs.patPlugNames - UINT n, nmax; + UINT n; int xofs, yofs; if (!pModDoc) return 0; @@ -471,7 +470,7 @@ rect.SetRect(m_szHeader.cx, 0, m_szHeader.cx + GetColumnWidth() - 2, m_szHeader.cy); plugRect.SetRect(m_szHeader.cx, m_szHeader.cy-PLUGNAME_HEIGHT, m_szHeader.cx + GetColumnWidth() - 2, m_szHeader.cy); //rewbs.patPlugNames pSndFile = pModDoc->GetSoundFile(); - nmax = pSndFile->m_nChannels; + const UINT nmax = pSndFile->GetNumChannels(); // Checking channel headers //rewbs.patPlugNames if (m_dwStatus & PATSTATUS_PLUGNAMESINHEADERS) @@ -980,11 +979,13 @@ if (/*(m_bDragging) ||*/ (!pModDoc)) return; SetFocus(); m_nDragItem = GetDragItem(point, &m_rcDragItem); - m_bDragging = TRUE; - m_bInItemRect = TRUE; + m_bDragging = true; + m_bInItemRect = true; SetCapture(); - if ((point.x >= m_szHeader.cx) && (point.y <= m_szHeader.cy)) { - if (nFlags & MK_CONTROL) { + if ((point.x >= m_szHeader.cx) && (point.y <= m_szHeader.cy)) + { + if (nFlags & MK_CONTROL) + { TogglePendingMute((GetPositionFromPoint(point)&0xFFFF)>>3); } } @@ -1059,10 +1060,10 @@ //------------------------------------------------------- { CModDoc *pModDoc = GetDocument(); - BOOL bItemSelected = m_bInItemRect; + const bool bItemSelected = m_bInItemRect; if (/*(!m_bDragging) ||*/ (!pModDoc)) return; - m_bDragging = FALSE; - m_bInItemRect = FALSE; + m_bDragging = false; + m_bInItemRect = false; ReleaseCapture(); m_dwStatus &= ~PATSTATUS_MOUSEDRAGSEL; // Drag & Drop Editing @@ -1109,7 +1110,7 @@ } else if (!(nFlags&MK_CONTROL)) { - pModDoc->MuteChannel(nItemNo, (pSndFile->ChnSettings[nItemNo].dwFlags & CHN_MUTE) ? false : true); + pModDoc->MuteChannel(nItemNo, !pModDoc->IsChannelMuted(nItemNo)); pModDoc->UpdateAllViews(this, HINT_MODCHANNELS | ((nItemNo / CHANNELS_IN_TAB) << HINT_SHIFT_CHNTAB)); } break; @@ -1163,15 +1164,16 @@ m_dwStatus &= ~(PATSTATUS_DRAGNDROPEDIT|PATSTATUS_MOUSEDRAGSEL); if (m_bDragging) { - m_bDragging = FALSE; - m_bInItemRect = FALSE; + m_bDragging = false; + m_bInItemRect = false; ReleaseCapture(); } SetCursor(CMainFrame::curArrow); return; } - if ((hMenu = ::CreatePopupMenu()) == NULL) { + if ((hMenu = ::CreatePopupMenu()) == NULL) + { return; } @@ -1398,7 +1400,7 @@ } void CViewPattern::OnMuteChannel(BOOL current) -//-------------------------------- +//-------------------------------------------- { CModDoc *pModDoc = GetDocument(); if (pModDoc) @@ -1693,7 +1695,7 @@ m_cmdReplace.param = pageReplace.m_nParam; m_dwReplaceFlags = pageReplace.m_dwFlags; m_cInstrRelChange = pageReplace.cInstrRelChange; - m_bContinueSearch = FALSE; + m_bContinueSearch = false; OnEditFindNext(); } } @@ -1932,7 +1934,7 @@ } EndSearch: if (m_dwReplaceFlags & PATSEARCH_REPLACEALL) InvalidatePattern(); - m_bContinueSearch = TRUE; + m_bContinueSearch = true; EndWaitCursor(); // Display search results //m_dwReplaceFlags &= ~PATSEARCH_REPLACEALL; Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/mptrack/View_pat.h 2010-05-23 15:32:59 UTC (rev 606) @@ -88,7 +88,7 @@ int m_nXScroll, m_nYScroll; DWORD m_nDragItem, m_nMenuParam, m_nDetailLevel; - BOOL m_bDragging, m_bInItemRect, m_bRecord, m_bContinueSearch, m_bWholePatternFitsOnScreen; + bool m_bDragging, m_bInItemRect, m_bContinueSearch, m_bWholePatternFitsOnScreen; RECT m_rcDragItem; DWORD m_dwStatus, m_dwCursor; DWORD m_dwBeginSel, m_dwEndSel, m_dwStartSel, m_dwDragPos; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2010-05-23 15:32:59 UTC (rev 606) @@ -185,7 +185,7 @@ PVSTPLUGINLIB CVstPluginManager::AddPlugin(LPCSTR pszDllPath, BOOL bCache, const bool checkFileExistence, CString* const errStr) -//----------------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------------------------------------ { if(checkFileExistence && (PathFileExists(pszDllPath) == FALSE)) { @@ -444,7 +444,7 @@ BOOL CVstPluginManager::CreateMixPlugin(PSNDMIXPLUGIN pMixPlugin, CSoundFile* pSndFile) -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------- { UINT nMatch=0; PVSTPLUGINLIB pFound = NULL; @@ -457,15 +457,15 @@ { if (pMixPlugin) { - BOOL b1=FALSE, b2=FALSE; + bool b1 = false, b2 = false; if ((p->dwPluginId1 == pMixPlugin->Info.dwPluginId1) && (p->dwPluginId2 == pMixPlugin->Info.dwPluginId2)) { - b1 = TRUE; + b1 = true; } if (!_strnicmp(p->szLibraryName, pMixPlugin->Info.szLibraryName, 64)) { - b2 = TRUE; + b2 = true; } if ((b1) && (b2)) { @@ -645,7 +645,7 @@ Log("VST plugin to host: Eff: 0x%.8X, Opcode = %d, Index = %d, Value = %d, PTR = %.8X, OPT = %.3f\n",(int)effect, opcode,index,value,(int)ptr,opt); #endif - enum HostCanDo + enum enmHostCanDo { HostDoNotKnow = 0, HostCanDo = 1, @@ -991,7 +991,51 @@ break; // open a fileselector window with VstFileSelect* in <ptr> case audioMasterOpenFileSelector: - Log("VST plugin to host: Get Directory\n"); + { + /* + VstFileSelect *pFileSel = (VstFileSelect *)ptr; + ASSERT(false); + + if(pFileSel->command != kVstDirectorySelect) + { + std::string extensions; + for(size_t i = 0; i < pFileSel->nbFileTypes; i++) + { + VstFileType *pType = &(pFileSel->fileTypes[i]); + extensions += pType->name; + extensions += "|"; +#if (defined(WIN32) || defined(WINDOWS)) + extensions += "*."; + extensions += pType->dosType; +#elif defined(MAC) + extensions += "*"; + extensions += pType->macType; +#elif defined(UNIX) + extensions += "*."; + extensions += pType->unixType; +#else + #error Platform-specific code missing +#endif + extensions += "|"; + } + + FileDlgResult files = CTrackApp::ShowOpenSaveFileDialog( + pFileSel->command == kVstFileSave ? false : true, + "", "", extensions, pFileSel->initialPath, + pFileSel->command == kVstMultipleFilesLoad + ); + if(files.abort) + return 0; + // todo: retrieve filenames etc. + //strcpy(pFileSel->returnPath, files.first_file.c_str()); + //pFileSel->sizeReturnPath = files.first_file.length(); + return 1; + + } else */ + { + Log("VST plugin to host: Get Directory\n"); + } + } break; //---from here VST 2.2 extension opcodes------------------------------------------------------ @@ -1130,6 +1174,7 @@ }; bool CSelectPluginDlg::VerifyPlug(PVSTPLUGINLIB plug) +//--------------------------------------------------- { CString s; for (int p=0; p<NUM_PROBLEMPLUGS; p++) @@ -1837,7 +1882,7 @@ } bool CVstPlugin::SaveProgram(CString fileName) -//------------------------------------ +//-------------------------------------------- { if (!(m_pEffect)) return false; Modified: trunk/OpenMPT/packageTemplate/History.txt =================================================================== --- trunk/OpenMPT/packageTemplate/History.txt 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/packageTemplate/History.txt 2010-05-23 15:32:59 UTC (rev 606) @@ -9,7 +9,7 @@ [Var]: other (tx XYZ): thanks to XYZ for telling us about the bug -Changes from revisions [476, 605] +Changes from revisions [476, 606] --------------------------------- General tab @@ -23,6 +23,7 @@ Sequence editor [New] <Jojo> "Select All" shortcut also works here now. [Imp] <Jojo> Sequence menu also allows to insert empty sequences now. + [Fix] <Jojo> Jumping between patterns also stops VSTi notes now. Pattern tab::pattern editing [New] <Jojo> Extended context menu for PC Notes @@ -36,6 +37,7 @@ [Fix] <Jojo> When pasting pattern data that exactly reached the pattern end with overflow paste enabled, a redundant undo point was created. [Fix] <Jojo> Entered (volume) effects are now properly validated (makes a difference f.e. in MOD format where it was previously possible to enter effects like Hxx) [Fix] <Jojo> Mix Paste: When in MPT behaviour mode, empty FX commands were not overwritten properly when there previously was an effect in that field but only the effect number (and not the param value) was reset. + [Fix] <Jojo> When deleting all patterns via the treeview and then switching to the pattern editor, pattern 0 is not created automatically anymore, to avoid confusion. [Reg] <Jojo> Creating a selection using the Shift key + Mouse click now only works if there was previously no selection made; This seems reasonable as the old shift-behaviour seems to be widely used. Pattern tab::GUI @@ -173,10 +175,13 @@ [Fix] <Jojo> Because of an error in pattern count retrival, the last pattern was not checked when looking for unused samples which sometimes resulted in deleted samples (although they were actually used). [Fix] <re> Fixed a memory leak in pattern name handling. +Wave Export + [New] <Jojo> It is now also possible to render by instrument (i.e. one wave file per instrument). + [Imp] <Jojo> When switching to another task and switching back to OpenMPT, it is now less likely that the infamous "OpenMPT does not respond" dialog from Windows occours. + Misc [New] <Jojo> INI Settings: When portable mode is enabled, the most common paths in mptrack.ini are now translated to relative paths (if possible). Plugin paths are not translated to relative paths (yet). [New] <Jojo> Modules in gzip archives (single-file .gz archives) can now be imported, just to satisfy my laziness when downloading gzipped modules from Amiga Music Preservation. :-P - [New] <Jojo> Wave export can now also render by instrument (i.e. one wave file per instrument). [Imp] <Jojo> The wave export "render by channel" mode ignores empty channels now. [Imp] <Jojo> Mod Loaders: Instead of creating messageboxes in various places, errors are now written to the log and one messagebox is shown for each file. [Imp] <Jojo> Binary files are now less often falsely recognized as early MOD files (15 samples without header): If the orderlist contains orderlist items > 128, loading is cancelled. Modified: trunk/OpenMPT/soundlib/Fastmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/soundlib/Fastmix.cpp 2010-05-23 15:32:59 UTC (rev 606) @@ -1748,7 +1748,8 @@ } //didn't manage to get flag from instrument header, use channel flags. - if (pChannel->dwFlags & CHN_HQSRC) { + if (pChannel->dwFlags & CHN_HQSRC) + { if (gdwSoundSetup & SNDMIX_SPLINESRCMODE) return MIXNDX_HQSRC; if (gdwSoundSetup & SNDMIX_POLYPHASESRCMODE) return MIXNDX_KAISERSRC; if (gdwSoundSetup & SNDMIX_FIRFILTERSRCMODE) return MIXNDX_FIRFILTERSRC; @@ -1762,7 +1763,7 @@ extern int gbInitPlugins; -VOID CSoundFile::ProcessPlugins(UINT nCount) +void CSoundFile::ProcessPlugins(UINT nCount) //------------------------------------------ { // Setup float inputs @@ -1782,7 +1783,8 @@ }*/ //We should only ever reach this point if the song is playing. - if (!pPlugin->pMixPlugin->IsSongPlaying()) { + if (!pPlugin->pMixPlugin->IsSongPlaying()) + { //Plugin doesn't know it is in a song that is playing; //we must have added it during playback. Initialise it! pPlugin->pMixPlugin->NotifySongPlaying(true); Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2010-05-23 15:32:59 UTC (rev 606) @@ -768,13 +768,14 @@ } if ((m_nRestartPos >= Order.size()) || (Order[m_nRestartPos] >= Patterns.Size())) m_nRestartPos = 0; - // Load plugins only when m_pModDoc != 0. (can be == 0 for example when examining module samples in treeview. + // plugin loader string sNotFound; bool bSearchIDs[MAX_MIXPLUGINS]; memset(bSearchIDs, false, MAX_MIXPLUGINS * sizeof(bool)); UINT iShowNotFound = 0; + // Load plugins only when m_pModDoc != 0. (can be == 0 for example when examining module samples in treeview. if (gpMixPluginCreateProc && GetpModDoc()) { for (PLUGINDEX iPlug = 0; iPlug < MAX_MIXPLUGINS; iPlug++) @@ -1237,9 +1238,8 @@ void CSoundFile::SetCurrentOrder(ORDERINDEX nOrder) -//----------------------------------------------- +//------------------------------------------------- { - //while ((nPos < Order.size()) && (Order[nPos] == 0xFE)) nPos++; while ((nOrder < Order.size()) && (Order[nOrder] == Order.GetIgnoreIndex())) nOrder++; if ((nOrder >= Order.size()) || (Order[nOrder] >= Patterns.Size())) return; for (CHANNELINDEX j = 0; j < MAX_CHANNELS; j++) @@ -1259,6 +1259,12 @@ } Chn[j].nTremorCount = 0; } + +#ifndef NO_VST + // Stop hanging notes from VST instruments as well + StopAllVsti(); +#endif // NO_VST + if (!nOrder) { SetCurrentPos(0); @@ -1320,28 +1326,32 @@ void CSoundFile::StopAllVsti() //---------------------------- { - for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++) { + for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++) + { if (!m_MixPlugins[iPlug].pMixPlugin) continue; //most common branch IMixPlugin *pPlugin = m_MixPlugins[iPlug].pMixPlugin; - if (m_MixPlugins[iPlug].pMixState) { + if (m_MixPlugins[iPlug].pMixState) + { pPlugin->HardAllNotesOff(); } } - m_lTotalSampleCount=GetSampleOffset(); + m_lTotalSampleCount = GetSampleOffset(); } void CSoundFile::RecalculateGainForAllPlugs() //------------------------------------------ { - for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++) { + for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++) + { if (!m_MixPlugins[iPlug].pMixPlugin) continue; //most common branch IMixPlugin *pPlugin = m_MixPlugins[iPlug].pMixPlugin; - if (m_MixPlugins[iPlug].pMixState) { + if (m_MixPlugins[iPlug].pMixState) + { pPlugin->RecalculateGain(); } } Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2010-05-22 15:56:50 UTC (rev 605) +++ trunk/OpenMPT/soundlib/Sndfile.h 2010-05-23 15:32:59 UTC (rev 606) @@ -755,11 +755,11 @@ public: // Real-time sound functions - VOID SuspendPlugins(); //rewbs.VSTCompliance - VOID ResumePlugins(); //rewbs.VSTCompliance - VOID StopAllVsti(); //rewbs.VSTCompliance - VOID RecalculateGainForAllPlugs(); - VOID ResetChannels(); + void SuspendPlugins(); //rewbs.VSTCompliance + void ResumePlugins(); //rewbs.VSTCompliance + void StopAllVsti(); //rewbs.VSTCompliance + void RecalculateGainForAllPlugs(); + void ResetChannels(); UINT Read(LPVOID lpBuffer, UINT cbBuffer); UINT ReadMix(LPVOID lpBuffer, UINT cbBuffer, CSoundFile *, DWORD *, LPBYTE ps=NULL); UINT CreateStereoMix(int count); @@ -767,8 +767,8 @@ BOOL FadeSong(UINT msec); BOOL GlobalFadeSong(UINT msec); UINT GetTotalTickCount() const { return m_nTotalCount; } - VOID ResetTotalTickCount() { m_nTotalCount = 0;} - VOID ProcessPlugins(UINT nCount); + void ResetTotalTickCount() { m_nTotalCount = 0;} + void ProcessPlugins(UINT nCount); public: // Mixer Config This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |