#ifndef __INPUTBUFFER1_H__ #define __INPUTBUFFER1_H__ #include /* Die Klasse InputBuffer1 realisiert den Eingabepuffer für einen Kanal. Er hat eine feste Größe erzeugt. Eingabedaten werden Block- und Kanalweise übergeben. Der Eingabecursor wird immer in Blocklänge-Schritten erhöht. Daten können mittels der Methode get entnommen werden. */ class CInputBuffer1 { public: // Konstruktor // Wichtig: Die Länge muß Vielfaches der Blocklänge sein! CInputBuffer1( unsigned int uiBlocklength, unsigned int uiSize ); // Destruktor ~CInputBuffer1(); // Puffer zurücksetzen void reset(); /* Daten lesen Parameter: pfDest Zielbuffer uiOffset (Lese)Position uiLength Länge (Anzahl Samples) Rückgabewert: false, falls die angeforderten Daten nur Stille sind und ausschließlich Nullsamples enthalten true, falls die Daten nicht Stille sind */ bool get( float* pfDest, unsigned int uiOffset, unsigned int uiLength ); // Daten hineinlegen // Info: Hier wird immer genau eine Blocklänge kopiert! void put( const float* pfSource, float fGain = 1.0 ); // Daten hineinmischen // Info: Hier wird immer genau eine Blocklänge eingemischt! void mix( const float* pfSource, float fGain = 1.0 ); // (Schreib)Cursor weitersetzen void incrementCursor(); /* Gibt die Leseposition im Puffer zurück, ab der - inklusive des aktuellen Block - die gewünschte Länge Samples gelesen werden können. (Für Tasks) */ unsigned int getOffset( unsigned int uiLength ); private: unsigned int uiCursor; // Schreibcursor/Basiscursor unsigned int m_uiBlocklength; unsigned int m_uiSize; float* m_pfData; std::vector< bool > m_vbSilence; }; #endif // __INPUTBUFFER1_H__