Files
FC1/CrySoundSystem/MusicPatternInstance.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

77 lines
1.7 KiB
C++

#include "StdAfx.h"
#include "musicpatterninstance.h"
#include "MusicPattern.h"
#include "PatternDecoder.h"
CMusicPatternInstance::CMusicPatternInstance(CMusicPattern *pPattern)
{
m_nRefs=0;
m_pPattern=pPattern;
if (m_pPattern)
m_pDecoderInstance=m_pPattern->CreateDecoderInstance();
else
m_pDecoderInstance=NULL;
}
CMusicPatternInstance::~CMusicPatternInstance()
{
if (m_pDecoderInstance)
m_pDecoderInstance->Release();
m_pPattern->ReleaseInstance( this );
}
bool CMusicPatternInstance::Seek0(int nDelay)
{
if (!m_pDecoderInstance)
return false;
return m_pDecoderInstance->Seek0(nDelay);
}
bool CMusicPatternInstance::GetPCMData(signed long *pDataOut, int nSamples, bool bLoop)
{
if (!m_pDecoderInstance)
return false;
return m_pDecoderInstance->GetPCMData(pDataOut, nSamples, bLoop);
}
int CMusicPatternInstance::GetSamplesToNextFadePoint()
{
if (!m_pDecoderInstance)
return false;
int nPos=m_pDecoderInstance->GetPos();
for (TMarkerVecIt It=m_pPattern->m_vecFadePoints.begin();It!=m_pPattern->m_vecFadePoints.end();++It)
{
int nFadePos=(*It);
if (nFadePos <= 0)
{
nFadePos = m_pPattern->m_nSamples + nFadePos;
}
if (nFadePos>nPos)
return nFadePos-nPos;
}
return GetSamplesToEnd();
}
int CMusicPatternInstance::GetSamplesToLastFadePoint()
{
if (!m_pDecoderInstance)
return false;
int nPos=m_pDecoderInstance->GetPos();
if (m_pPattern->m_vecFadePoints.empty())
return GetSamplesToEnd();
int nFadePos = (*(m_pPattern->m_vecFadePoints.end()-1));
if (nFadePos <= 0)
{
nFadePos = m_pPattern->m_nSamples + nFadePos;
}
return nFadePos - nPos;
}
int CMusicPatternInstance::GetSamplesToEnd()
{
if (m_pDecoderInstance != NULL && m_pPattern != NULL)
return m_pPattern->m_nSamples - m_pDecoderInstance->GetPos();
return -1;
}