Style for DSMBC filter modules

parent 70c03f30
...@@ -46,7 +46,7 @@ class ITAFFT; ...@@ -46,7 +46,7 @@ class ITAFFT;
* Nebenlüufigkeit & Synchronisation: * Nebenlüufigkeit & Synchronisation:
* *
* Folgende Methoden sind synchronisiert: * Folgende Methoden sind synchronisiert:
* *
* - getFilterPool, setFilterPool, requestFilter, releaseFilter => Blocking aber leichtgewichtig, reentrant * - getFilterPool, setFilterPool, requestFilter, releaseFilter => Blocking aber leichtgewichtig, reentrant
* - getFilterExchangeMode, setFilterExchangeMode, getFilterCrossfadeLength, setFilterCrossfadeLength, * - getFilterExchangeMode, setFilterExchangeMode, getFilterCrossfadeLength, setFilterCrossfadeLength,
* getActiveFilter, exchangeFilter => Non-blocking und wait-free, reentrant * getActiveFilter, exchangeFilter => Non-blocking und wait-free, reentrant
...@@ -57,22 +57,25 @@ class ITAFFT; ...@@ -57,22 +57,25 @@ class ITAFFT;
* Müchtest Du mehr zu den Details wissen? Frag mich! -> Frank.Wefers@akustik.rwth-aachen.de * Müchtest Du mehr zu den Details wissen? Frag mich! -> Frank.Wefers@akustik.rwth-aachen.de
*/ */
class ITA_CONVOLUTION_API DSMBCConvolver : public ITAUncopyable { class ITA_CONVOLUTION_API DSMBCConvolver : public ITAUncopyable
{
public: public:
//! Austausch-Modi //! Austausch-Modi
enum { enum
{
SWITCH = 0, //!< Hartes Umschalten SWITCH = 0, //!< Hartes Umschalten
CROSSFADE_LINEAR, //!< Lineare Kreuzblende CROSSFADE_LINEAR, //!< Lineare Kreuzblende
CROSSFADE_COSINE_SQUARE //!< Cosinus-Quadrat Kreuzblende CROSSFADE_COSINE_SQUARE //!< Cosinus-Quadrat Kreuzblende
}; };
//! Ausgabe-Modi //! Ausgabe-Modi
enum { enum
{
OUTPUT_OVERWRITE = 0, //!< Daten im Ausgabepuffer mit neuen Daten überschreiben OUTPUT_OVERWRITE = 0, //!< Daten im Ausgabepuffer mit neuen Daten überschreiben
OUTPUT_MIX, //!< Neue Daten in den Ausgabepuffer einmischen OUTPUT_MIX, //!< Neue Daten in den Ausgabepuffer einmischen
}; };
static const int AUTO=-1; static const int AUTO = -1;
//! Standard-Konstruktor //! Standard-Konstruktor
/** /**
...@@ -87,7 +90,7 @@ public: ...@@ -87,7 +90,7 @@ public:
* \param iBlocklength Blocklänge [in Samples] * \param iBlocklength Blocklänge [in Samples]
* \param iMaxFilterlength Maximale Filterlänge [Anzahl Filterkoeffizienten] * \param iMaxFilterlength Maximale Filterlänge [Anzahl Filterkoeffizienten]
*/ */
DSMBCConvolver(int iBlocklength, int iMaxFilterlength, DSMBCFilterPool* pFilterPool=NULL); DSMBCConvolver( const int iBlocklength, const int iMaxFilterlength, DSMBCFilterPool* pFilterPool = NULL );
//! Destruktor //! Destruktor
virtual ~DSMBCConvolver(); virtual ~DSMBCConvolver();
...@@ -99,7 +102,7 @@ public: ...@@ -99,7 +102,7 @@ public:
* \param iBlocklength Blocklänge [in Samples] * \param iBlocklength Blocklänge [in Samples]
* \param iMaxFilterlength Maximale Filterlänge [Anzahl Filterkoeffizienten] * \param iMaxFilterlength Maximale Filterlänge [Anzahl Filterkoeffizienten]
*/ */
void init(int iBlocklength, int iFilterLength); void init( const int iBlocklength, const int iFilterLength );
//! Blocklänge zurückgeben //! Blocklänge zurückgeben
int getBlocklength() const; int getBlocklength() const;
...@@ -111,19 +114,19 @@ public: ...@@ -111,19 +114,19 @@ public:
const DSMBCTrigger* getFilterExchangeTrigger() const; const DSMBCTrigger* getFilterExchangeTrigger() const;
//! Trigger für den Filteraustausch setzen //! Trigger für den Filteraustausch setzen
void setFilterExchangeTrigger(const DSMBCTrigger* pTrigger); void setFilterExchangeTrigger( const DSMBCTrigger* pTrigger );
//! Filteraustausch-Modus zurückgeben //! Filteraustausch-Modus zurückgeben
int getFilterExchangeMode(); int getFilterExchangeMode();
//! Filteraustausch-Modus setzen //! Filteraustausch-Modus setzen
void setFilterExchangeMode(int iMode); void setFilterExchangeMode( const int iMode );
//! überblendlänge [Samples] des Filteraustauschs zurückgeben //! überblendlänge [Samples] des Filteraustauschs zurückgeben
int getFilterCrossfadeLength(); int getFilterCrossfadeLength();
//! überblendlänge [Samples] für den Filteraustausch setzen //! überblendlänge [Samples] für den Filteraustausch setzen
void setFilterCrossfadeLength(int iLength); void setFilterCrossfadeLength( const int iLength );
//! Verstärkung zurückgeben //! Verstärkung zurückgeben
float getGain() const; float getGain() const;
...@@ -131,7 +134,7 @@ public: ...@@ -131,7 +134,7 @@ public:
//! Verstärkung setzen //! Verstärkung setzen
// Hinweis: Falls bSetImmediately==true gesetzt, wird die Verstärkung nicht // Hinweis: Falls bSetImmediately==true gesetzt, wird die Verstärkung nicht
// dynamisch angepasst, sondern hart auf den angegebenen Wert gesetzt. // dynamisch angepasst, sondern hart auf den angegebenen Wert gesetzt.
void setGain(float fGain, bool bSetImmediately=false); void setGain( const float fGain, const bool bSetImmediately = false );
//! Filterpool zurückgeben //! Filterpool zurückgeben
DSMBCFilterPool* getFilterPool() const; DSMBCFilterPool* getFilterPool() const;
...@@ -140,13 +143,13 @@ public: ...@@ -140,13 +143,13 @@ public:
/** /**
* NULL => Falter-eigenen Pool benutzen * NULL => Falter-eigenen Pool benutzen
*/ */
void setFilterPool(DSMBCFilterPool* pFilterPool); void setFilterPool( DSMBCFilterPool* pFilterPool );
//! Freies Filter anfordern //! Freies Filter anfordern
DSMBCFilter* requestFilter(); DSMBCFilter* requestFilter();
//! Filter wieder zur anderweitigen Benutzung freigeben //! Filter wieder zur anderweitigen Benutzung freigeben
void releaseFilter(DSMBCFilter* pFilter); void releaseFilter( DSMBCFilter* pFilter );
//! Aktives Filter zurückgeben //! Aktives Filter zurückgeben
/** /**
...@@ -158,7 +161,7 @@ public: ...@@ -158,7 +161,7 @@ public:
/** /**
* Hinweis: Nullzeiger => Aktives Filter entfernen * Hinweis: Nullzeiger => Aktives Filter entfernen
*/ */
void exchangeFilter(DSMBCFilter* pNewFilter, int iExchangeMode=AUTO, int iCrossfadeLength=AUTO); void exchangeFilter( DSMBCFilter* pNewFilter, const int iExchangeMode = AUTO, const int iCrossfadeLength = AUTO );
//! Löscht alle internen Samplepuffer //! Löscht alle internen Samplepuffer
void clear(); void clear();
...@@ -174,9 +177,7 @@ public: ...@@ -174,9 +177,7 @@ public:
*/ */
// TODO: Hier wird Austausch durchgeführt! // TODO: Hier wird Austausch durchgeführt!
void process(const float* pfInputData, void process( const float* pfInputData, float* pfOutputData, const int iOutputMode = OUTPUT_OVERWRITE );
float* pfOutputData,
int iOutputMode=OUTPUT_OVERWRITE);
//! Faltungsmethode (Erweitert) //! Faltungsmethode (Erweitert)
/** /**
...@@ -190,15 +191,11 @@ public: ...@@ -190,15 +191,11 @@ public:
* \param iOutputMode Ausgabemodus (überschreiben oder Einmischen) * \param iOutputMode Ausgabemodus (überschreiben oder Einmischen)
*/ */
// TODO: Hier wird Austausch durchgeführt! void process( const float* pfInputData, const int iInputLength, float* pfOutputData, const int iOutputLength, const int iOutputMode = OUTPUT_OVERWRITE );
void process(const float* pfInputData,
int iInputLength,
float* pfOutputData,
int iOutputLength,
int iOutputMode=OUTPUT_OVERWRITE);
private: private:
typedef struct { typedef struct
{
DSMBCFilter* pFilter; DSMBCFilter* pFilter;
int iExchangeMode; int iExchangeMode;
int iCrossfadeLength; int iCrossfadeLength;
...@@ -220,7 +217,7 @@ private: ...@@ -220,7 +217,7 @@ private:
float *m_pfFreqAuxBuffer; // Hilfspuffer (Frequenz-bereich) float *m_pfFreqAuxBuffer; // Hilfspuffer (Frequenz-bereich)
float *m_pfFreqMixdownBuffer; // Mischpuffer (Frequenz-bereich) float *m_pfFreqMixdownBuffer; // Mischpuffer (Frequenz-bereich)
int m_iFreqCoeffs; // Anzahl DFT-Koeffizienten (Symetrien eingerechnet) int m_iFreqCoeffs; // Anzahl DFT-Koeffizienten (Symetrien eingerechnet)
std::vector<float*> m_vpfFreqDelayLine; // Frequency-domain delay line (FDL) std::vector< float* > m_vpfFreqDelayLine; // Frequency-domain delay line (FDL)
ITAFFT *m_pFFT, *m_pIFFT; // FFT, IFFT der Daten ITAFFT *m_pFFT, *m_pIFFT; // FFT, IFFT der Daten
ITACriticalSection m_csPool; // Exklusiver Zugriff auf den Filterpool ITACriticalSection m_csPool; // Exklusiver Zugriff auf den Filterpool
...@@ -229,8 +226,8 @@ private: ...@@ -229,8 +226,8 @@ private:
DSMBCTriggerWatch m_oTriggerWatch; // TriggerWatch für den Filteraustausch DSMBCTriggerWatch m_oTriggerWatch; // TriggerWatch für den Filteraustausch
void copyOutputApplyGain1(float* pfDest, const float* pfSrc, int iNumSamples, int iOutputMode); void copyOutputApplyGain1( float* pfDest, const float* pfSrc, const int iNumSamples, const int iOutputMode );
void copyOutputApplyGain2(float* pfDest, const float* pfSrc1, const float* pfSrc2, int iOutputLength, int iCrossfadeLength, int iOutputMode); void copyOutputApplyGain2( float* pfDest, const float* pfSrc1, const float* pfSrc2, const int iOutputLength, const int iCrossfadeLength, const int iOutputMode );
}; };
#endif // INCLUDE_WATCHER_DSMBC_CONVOLVER #endif // INCLUDE_WATCHER_DSMBC_CONVOLVER
This diff is collapsed.
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