From: <sag...@us...> - 2012-10-26 17:56:06
|
Revision: 1383 http://modplug.svn.sourceforge.net/modplug/?rev=1383&view=rev Author: saga-games Date: 2012-10-26 17:55:59 +0000 (Fri, 26 Oct 2012) Log Message: ----------- [New] ASIO: Added hidden INI setting ASIOBaseChannel in [Sound Settings] category to specify the first ASIO channel to use for output (as a quick&dirty solution for http://bugs.openmpt.org/view.php?id=128) Modified Paths: -------------- trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/soundlib/SNDDEV.H trunk/OpenMPT/soundlib/SNDDEVX.H trunk/OpenMPT/soundlib/Snddev.cpp Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2012-10-26 16:36:16 UTC (rev 1382) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2012-10-26 17:55:59 UTC (rev 1383) @@ -14,6 +14,7 @@ #include "Moddoc.h" #include "Mainfrm.h" #include "snddev.h" +#include "SNDDEVX.H" #include "version.h" #include "UpdateCheck.h" #include "Mpdlgs.h" @@ -308,6 +309,7 @@ { defaultDevice = SNDDEV_BUILD_ID(0, SNDDEV_ASIO); } + CASIODevice::baseChannel = GetPrivateProfileInt("Sound Settings", "ASIOBaseChannel", CASIODevice::baseChannel, iniFile); #endif // NO_ASIO m_nWaveDevice = CMainFrame::GetPrivateProfileLong("Sound Settings", "WaveDevice", defaultDevice, iniFile); m_dwSoundSetup = CMainFrame::GetPrivateProfileDWord("Sound Settings", "SoundSetup", m_dwSoundSetup, iniFile); Modified: trunk/OpenMPT/soundlib/SNDDEV.H =================================================================== --- trunk/OpenMPT/soundlib/SNDDEV.H 2012-10-26 16:36:16 UTC (rev 1382) +++ trunk/OpenMPT/soundlib/SNDDEV.H 2012-10-26 17:55:59 UTC (rev 1383) @@ -90,7 +90,7 @@ virtual VOID Reset() = 0; virtual BOOL Directcallback() { return FALSE; } virtual UINT HasFixedBitsPerSample() { return 0; } - virtual BOOL IsOpen() = 0; + virtual bool IsOpen() = 0; virtual UINT GetCurrentLatency() = 0; virtual void SilenceAudioBuffer(ISoundSource *pSource, ULONG nMaxLatency, DWORD dwUser=0) = 0; virtual UINT GetCurrentSampleRate(UINT nDevice) { UNREFERENCED_PARAMETER(nDevice); return 0; } Modified: trunk/OpenMPT/soundlib/SNDDEVX.H =================================================================== --- trunk/OpenMPT/soundlib/SNDDEVX.H 2012-10-26 16:36:16 UTC (rev 1382) +++ trunk/OpenMPT/soundlib/SNDDEVX.H 2012-10-26 17:55:59 UTC (rev 1383) @@ -55,7 +55,7 @@ BOOL FillAudioBuffer(ISoundSource *pSource, ULONG nMaxLatency, DWORD); VOID Reset(); VOID Start() {} - BOOL IsOpen() { return (m_hWaveOut != NULL) ? TRUE : FALSE; } + bool IsOpen() { return (m_hWaveOut != NULL); } UINT GetCurrentLatency() { return m_nBuffersPending * m_nWaveBufferSize; } void SilenceAudioBuffer(ISoundSource *pSource, ULONG nMaxLatency, DWORD dwBuffer); @@ -94,7 +94,7 @@ BOOL FillAudioBuffer(ISoundSource *pSource, ULONG nMaxLatency, DWORD); VOID Reset(); VOID Start() {} - BOOL IsOpen() { return (m_pMixBuffer != NULL) ? TRUE : FALSE; } + bool IsOpen() { return (m_pMixBuffer != NULL); } UINT GetCurrentLatency() { return m_dwLatency; } void SilenceAudioBuffer(ISoundSource *pSource, ULONG nMaxLatency, DWORD dwBuffer); @@ -132,6 +132,8 @@ ASIOChannelInfo m_ChannelInfo[ASIO_MAX_CHANNELS]; ASIOBufferInfo m_BufferInfo[ASIO_MAX_CHANNELS]; int m_FrameBuffer[ASIO_BLOCK_LEN]; +public: + static int baseChannel; public: CASIODevice(); @@ -144,7 +146,7 @@ BOOL FillAudioBuffer(ISoundSource *pSource, ULONG nMaxLatency, DWORD dwUser); VOID Reset(); VOID Start(); - BOOL IsOpen() { return (m_pAsioDrv != NULL) ? TRUE : FALSE; } + bool IsOpen() { return (m_pAsioDrv != NULL); } BOOL Directcallback() { return TRUE; } UINT HasFixedBitsPerSample() { return m_nBitsPerSample; } UINT GetCurrentLatency() { return m_nAsioBufferLen; } Modified: trunk/OpenMPT/soundlib/Snddev.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snddev.cpp 2012-10-26 16:36:16 UTC (rev 1382) +++ trunk/OpenMPT/soundlib/Snddev.cpp 2012-10-26 17:55:59 UTC (rev 1383) @@ -576,6 +576,7 @@ CASIODevice *CASIODevice::gpCurrentAsio = NULL; LONG CASIODevice::gnFillBuffers = 0; +int CASIODevice::baseChannel = 0; static UINT gnNumAsioDrivers = 0; static BOOL gbAsioEnumerated = FALSE; static ASIODRIVERDESC gAsioDrivers[ASIO_MAX_DRIVERS]; @@ -721,7 +722,7 @@ ich, m_ChannelInfo[ich].isActive, m_ChannelInfo[ich].channelGroup, m_ChannelInfo[ich].type, m_ChannelInfo[ich].name); #endif m_BufferInfo[ich].isInput = ASIOFalse; - m_BufferInfo[ich].channelNum = ich; // map MPT channel i to ASIO channel i + m_BufferInfo[ich].channelNum = ich + CASIODevice::baseChannel; // map MPT channel i to ASIO channel i m_BufferInfo[ich].buffers[0] = NULL; m_BufferInfo[ich].buffers[1] = NULL; if ((m_ChannelInfo[ich].type & 0x0f) == ASIOSTInt16MSB) @@ -825,9 +826,11 @@ if (IsOpen()) { m_bMixRunning = TRUE; - try { - m_pAsioDrv->start(); - } catch(...) { + try + { + m_pAsioDrv->start(); + } catch(...) + { CASIODevice::ReportASIOException("ASIO crash in start()\n"); } } @@ -842,15 +845,19 @@ if (m_bMixRunning) { m_bMixRunning = FALSE; - try { + try + { m_pAsioDrv->stop(); - } catch(...) { + } catch(...) + { CASIODevice::ReportASIOException("ASIO crash in stop()\n"); } } - try { + try + { m_pAsioDrv->disposeBuffers(); - } catch(...) { + } catch(...) + { CASIODevice::ReportASIOException("ASIO crash in disposeBuffers()\n"); } CloseDevice(); @@ -869,9 +876,11 @@ if (IsOpen()) { m_bMixRunning = FALSE; - try { + try + { m_pAsioDrv->stop(); - } catch(...) { + } catch(...) + { CASIODevice::ReportASIOException("ASIO crash in stop()\n"); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |