コード例 #1
0
ファイル: OpOscCircle.cpp プロジェクト: eriser/es
void COpOscCircle::Proc()
{
	OP_GENERIC_CODE_PROC_PROLOG();
	
	if( m_poIn[OP_OCR_IN_CLEAR].IsValid() )
		if( m_poIn[OP_OCR_IN_CLEAR].Proc() > 0.0 )
			Reset();
	
	const double dFreq =  m_poIn[OP_OCR_IN_FREQ].Proc();
	if( dFreq != m_dFreqLast )
		InitFreq( dFreq );
	
	// Nur einmal hier prüfen, da Oversamplingrate und die Filtergrösse 2er-Potenzen sind!
	// Das geht immer schön auf, und innerhalb der Oversample-Schleife kommt es zu keinem Underrun.
	if( !m_uiBufferInPos )
		m_uiBufferInPos = m_uiFilterSize;	
	double *pdB = m_atBufferIn + m_uiBufferInPos;
	double dFT = m_dFT;
	unsigned int i = m_uiOverSample;
	
	if( m_poIn[OP_OCR_IN_PHASE].IsValid() )
	{
		dFT += m_poIn[OP_OCR_IN_PHASE].Proc();
		
		do
		{
			--i;
			--pdB;
			const double dT = fmod( dFT, 2.0 ) - 1.0;
			*pdB = ( ( fmod( dFT, 4.0 ) <= 2.0 ) ? +1.0 : -1.0 ) * sqrt( 1.0 - dT * dT );
			dFT += m_dFTStpAA;
		}
		while( i );
	}	
	else
	{
		do
		{
			--i;
			--pdB;
			const double dT = fmod( dFT, 2.0 ) - 1.0;
			*pdB = ( ( fmod( dFT, 4.0 ) <= 2.0 ) ? +1.0 : -1.0 ) * sqrt( 1.0 - dT * dT );
			dFT += m_dFTStpAA;
		}
		while( i );
	}
	
	m_uiBufferInPos -= m_uiOverSample;
	m_dFT += m_dFTStp;
	
	m_pdOut[OP_OCR_OUT_DST] = COpTkFltAA44100<double>::Filter(); //*pdB
}
コード例 #2
0
ファイル: Timer.cpp プロジェクト: septag/stcore
Timer::Timer()
{
    lastTick = 0;
    elapsedTime = 0;
    lastTime = 0;
    rate = 0;
    factor = 0;

    static bool is_init = false;
    if (!is_init)   {
        InitFreq();
        is_init = true;
    }
}
コード例 #3
0
ファイル: OpOscCircle.cpp プロジェクト: eriser/es
COpOscCircle::COpOscCircle()
: COp( 3, 1 )
, COpTkFltAA44100<double>()
, m_uiFilterIndex( 0 )
{
	Init();
	OP_SET_NAME_INSTANCE( "oCir" );
	m_poIn[OP_OCR_IN_PHASE].SetFlags( OP_LINK_FLAG_OPTIONAL );
	m_poIn[OP_OCR_IN_CLEAR].SetFlags( OP_LINK_FLAG_OPTIONAL );
	OP_SET_NAME_AND_INFO_INPUT( OP_OCR_IN_FREQ, "f", OP_OCR_IN_FREQ_INFO );
	OP_SET_NAME_AND_INFO_INPUT( OP_OCR_IN_PHASE, "p", OP_OCR_IN_PHASE_INFO );
	OP_SET_NAME_AND_INFO_INPUT( OP_OCR_IN_CLEAR, "cl", OP_OCR_IN_CLEAR_INFO );
	OP_SET_NAME_AND_INFO_OUTPUT( OP_OCR_OUT_DST, "o", OP_OCR_OUT_DST_INFO );
	OP_SET_COUNT_ROUTINE( 1 );
	OP_SET_NAME_AND_INFO_ROUTINE( 0, "o" OP_STR_ROUTINE, OP_OCR_ROUTINE_AA_INFO );
	Reset();
	Update();
	Validate();
	InitFreq( 0.0 );
}