Commit 0c5db775 authored by henryjandrew's avatar henryjandrew
Browse files

in SIMOVDL, changed the switching variable enum type to those in VABase, in...

in SIMOVDL, changed the switching variable enum type to those in VABase, in SIMOVDLBase added a check for the L/R overlap samples being less than 0
parent c224ffb6
......@@ -75,26 +75,13 @@ class IITASampleInterpolationRoutine;
class ITA_DSP_API CITASIMOVariableDelayLine : public CITASIMOVariableDelayLineBase
{
public:
//! Umsetzung der Verzgerungsnderung
/**
* Auflistung der Algorithmen, die zur Umsetzung einer Verzgerungsnderung
* zur Verfgung stehen.
*/
enum SwitchingAlgorithm
{
SWITCH = 0, //!< Hartes umschalten
CROSSFADE, //!< berblenden im Zeitbereich mittels Kreuzblende (Kosinus-Quadrat)
LINEAR_INTERPOLATION, //!< Stauchen und Strecken im Zeitbereich durch lineare Interpolation (Polynominterpolation der Ordnung 1)
WINDOWED_SINC_INTERPOLATION, //!< Stauchen und Strecken im Zeitbereich durch Interpolation mittels gefensterter si-Funktion
CUBIC_SPLINE_INTERPOLATION, //!< Stauchen und Strecken im Zeitbereich durch kubische Spline-Interpolation
};
//! Konstruktor der variablen Verzgerungsleitung
/**
* \param dSamplerate Abtastrate [Hz]
* \param iBlocklength Streaming-Blocklnge [Anzahl Samples]
* \param fReservedMaxDelaySamples Initiale maximale Verzgerung [Anzahl Samples]
* \param iAlgorithm Algorithmus (siehe #SwitchingAlgorithm)
* \param iAlgorithm Algorithmus (siehe #ITABase::InterpolationFunctions)
*/
CITASIMOVariableDelayLine( const double dSamplerate, const int iBlocklength, const float fReservedMaxDelaySamples, const int iAlgorithm );
......
......@@ -28,13 +28,13 @@ CITASIMOVariableDelayLine::CITASIMOVariableDelayLine( const double dSamplerate,
m_iFadeLength = std::min( m_iBlockLength, 32 );
if( m_iSwitchingAlgorithm == LINEAR_INTERPOLATION )
if( m_iSwitchingAlgorithm == ITABase::InterpolationFunctions::LINEAR)
m_pInterpolationRoutine = new CITASampleLinearInterpolation();
if( m_iSwitchingAlgorithm == CUBIC_SPLINE_INTERPOLATION )
if( m_iSwitchingAlgorithm == ITABase::InterpolationFunctions::CUBIC_SPLINE)
m_pInterpolationRoutine = new CITASampleCubicSplineInterpolation();
if( m_iSwitchingAlgorithm == WINDOWED_SINC_INTERPOLATION )
if( m_iSwitchingAlgorithm == ITABase::InterpolationFunctions::WINDOWED_SINC)
m_pInterpolationRoutine = new CITASampleWindowedSincInterpolation();
}
......@@ -137,9 +137,9 @@ void CITASIMOVariableDelayLine::ReadBlock( const int iCursorID, ITASampleBuffer*
int iDeltaDelay = iNewIntDelay - iCurrentIntDelay;
// Falls Interpolation gewnscht ist, Grenzen prfen
if( ( iAlgorithmLocalCopy == LINEAR_INTERPOLATION ) ||
( iAlgorithmLocalCopy == WINDOWED_SINC_INTERPOLATION ) ||
( iAlgorithmLocalCopy == CUBIC_SPLINE_INTERPOLATION ) )
if( ( iAlgorithmLocalCopy == ITABase::InterpolationFunctions::LINEAR ) ||
( iAlgorithmLocalCopy == ITABase::InterpolationFunctions::CUBIC_SPLINE) ||
( iAlgorithmLocalCopy == ITABase::InterpolationFunctions::WINDOWED_SINC) )
{
/*
......@@ -169,7 +169,7 @@ void CITASIMOVariableDelayLine::ReadBlock( const int iCursorID, ITASampleBuffer*
// Wenn Voraussetzungen verletzt werden, fr diesen Bearbeitungsschritt auf weiches Umschalten wechseln
if( ( fResamplingFactor <= MIN_RESAMPLING_FACTOR ) || ( fResamplingFactor > MAX_RESAMPLING_FACTOR ) )
{
iAlgorithmLocalCopy = CROSSFADE;
iAlgorithmLocalCopy = ITABase::InterpolationFunctions::NONE;
}
}
......@@ -190,17 +190,8 @@ void CITASIMOVariableDelayLine::ReadBlock( const int iCursorID, ITASampleBuffer*
switch( iAlgorithmLocalCopy )
{
// o Hartes Umschalten
case SWITCH:
{
// Direkt neue Verzgerung nehmen. Einfach kopieren. Keine Rcksicht nehmen.
psbOutput->cyclic_write( m_psbVDLBuffer, m_iBlockLength, iReadCursorNew, 0 );
break;
}
// o Umschalten mittels Kreuzblende
case CROSSFADE:
case ITABase::InterpolationFunctions::NONE:
{
// Kreuzblende mittels temporrem Puffer
assert( m_iFadeLength <= m_psbTemp->length() ); // Zu groe Blende fr diesen Puffer
......
......@@ -120,8 +120,11 @@ int CITASIMOVariableDelayLineBase::AddCursor()
void CITASIMOVariableDelayLineBase::SetOverlapSamples( const int iCursorID, const int iLeft, const int iRight )
{
if( !CursorExists( iCursorID ) )
ITA_EXCEPT1( INVALID_PARAMETER, "Invalid read cursor id" );
if (!CursorExists(iCursorID))
ITA_EXCEPT1(INVALID_PARAMETER, "Invalid read cursor id");
if (iLeft<0 || iRight<0)
ITA_EXCEPT1(INVALID_PARAMETER, "Invalid overlap to the left or right for this cursor");
std::map< int, CITAVDLReadCursor >::iterator it = m_lUserCursors.find( iCursorID );
CITAVDLReadCursor& oReadCursor( it->second );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment