ITAAudiofileWriter.h 4.06 KB
Newer Older
Jonas Stienen's avatar
Jonas Stienen committed
1 2 3 4 5
/*
* ----------------------------------------------------------------
*
*		ITA core libs
*		(c) Copyright Institute of Technical Acoustics (ITA)
6
*		RWTH Aachen University, Germany, 2015-2017
Jonas Stienen's avatar
Jonas Stienen committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
*
* ----------------------------------------------------------------
*				    ____  __________  _______
*				   //  / //__   ___/ //  _   |
*				  //  /    //  /    //  /_|  |
*				 //  /    //  /    //  ___   |
*				//__/    //__/    //__/   |__|
*
* ----------------------------------------------------------------
*
*/

#ifndef INCLUDE_WATHER_ITA_AUDIOFILE_WRITER
#define INCLUDE_WATHER_ITA_AUDIOFILE_WRITER

#include <ITABaseDefinitions.h>
#include <ITAAudiofileCommon.h>

// Includes der Standard Template Library (STL)
#include <string>
#include <vector>

// Vorwärtsdeklarationen
class ITASampleBuffer;
class ITASampleFrame;

/**
 * Abstrakte Klasse welche allgemeine Schreiber für Audiodateien realisiert
 */
class ITA_BASE_API ITAAudiofileWriter
{
public:
39 40
	//! Factory-Method
	static ITAAudiofileWriter* create( const std::string& sFilePath, const ITAAudiofileProperties& props );
Jonas Stienen's avatar
Jonas Stienen committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
	virtual ~ITAAudiofileWriter();

	//! Schreiben
	/**
	 * Schreibt uiLength Samples aus den im �bergebenen Vektor enthaltenen
	 * Float-Puffern in die Audiodatei. Die Anzahl der Float-Puffer ist muss
	 * <b>nicht</b> gleich der Anzahl der Kan�le der Audiodatei sein,
	 * darf diese Anzahl aber nicht �berschreiten.
	 * Enth�lt der �bergebene Vektor weniger Zeiger als die Audiodatei
	 * Kan�le hat, werden nur die ersten Kan�le geschrieben. Alle weiteren
	 * Kan�le werden mit Nullsamples belegt.
	 * Ferner kann man den Schreiber anweisen, nur gewisse Kan�le zu schreiben,
	 * indem man in den Vektor Nullzeiger einf�gt. Ist ein Zeiger Null,
	 * so ignoriert der Schreiber diesen und belegt den korrespondierenden
	 * Kanal mit Nullsamples.
56
	 *
Jonas Stienen's avatar
Jonas Stienen committed
57 58 59 60 61 62
	 * \param uiLength   Anzahl der zu lesenden Samples
	 * \param vpfSource  Vektor mit Zeigern auf die Puffer,
	 *                   aus denen die Daten gelesen werden sollen.
	 *
	 * \note Im Fehlerfall l�st die Methode eine Ausnahme des Typs ITAException aus
	 */
63
	virtual void write( int iLength, std::vector< const float* > vpfSource ) = 0;
Jonas Stienen's avatar
Jonas Stienen committed
64 65 66 67 68

	//! Schreiben
	/**
	 * Variante ohne const-Pointer.
	 */
69
	virtual void write( int iLength, std::vector< float* > vpfSource );
Jonas Stienen's avatar
Jonas Stienen committed
70 71 72 73 74

	//! Schreiben (SampleFrame)
	/**
	 * Diese Variante schreibt einen kompletten SampleFrame in die Datei
	 */
75
	virtual void write( const ITASampleFrame* psfSource );
Jonas Stienen's avatar
Jonas Stienen committed
76 77 78 79 80 81

	//! Schreiben (SampleFrame)
	/**
	 * Diese Variante schreibt einen SampleFrame in die Datei, wobei
	 * die Anzahl Samples und der Startoffset im Frame gesetzt werden können.
	 */
82
	virtual void write( const ITASampleFrame* psfSource, int iNumSamples, int iOffset = 0 );
Jonas Stienen's avatar
Jonas Stienen committed
83 84 85 86 87 88
};

//! Inhalte von Puffer in Audiodatei schreiben
/**
 * \note Hier muss die L�nge in props explizit angegeben werden!
 */
89 90
ITA_BASE_API void writeAudiofile( const std::string& sFilename, const ITAAudiofileProperties& props, std::vector< const float* >& vpfSource );
ITA_BASE_API void writeAudiofile( const std::string& sFilename, const ITAAudiofileProperties& props, std::vector< float* >& vpfSource );
Jonas Stienen's avatar
Jonas Stienen committed
91 92

//! Mono-Zeitsignal in Audiodatei schreiben
93
ITA_BASE_API void writeAudiofile( const std::string& sFilename, const float* pfData, int iLength, double dSampleRate, ITAQuantization eQuantization = ITAQuantization::ITA_FLOAT );
Jonas Stienen's avatar
Jonas Stienen committed
94 95

//! Stereo-Zeitsignal in Audiodatei schreiben
96
ITA_BASE_API void writeAudiofile( const std::string& sFilename, const float* pfDataCh0, const float* pfDataCh1, int iLength, double dSampleRate, ITAQuantization eQuantization = ITAQuantization::ITA_FLOAT );
Jonas Stienen's avatar
Jonas Stienen committed
97 98

//! Inhalt eines Samplebuffer in Audiodatei schreiben
99
ITA_BASE_API void writeAudiofile( const std::string& sFilename, const ITASampleBuffer* psbData, double dSampleRate, ITAQuantization eQuantization = ITAQuantization::ITA_FLOAT );
Jonas Stienen's avatar
Jonas Stienen committed
100 101

//! Inhalt eines Sampleframe in Audiodatei schreiben
102
ITA_BASE_API void writeAudiofile( const std::string& sFilename, const ITASampleFrame* psfData, double dSampleRate, ITAQuantization eQuantization = ITAQuantization::ITA_FLOAT );
Jonas Stienen's avatar
Jonas Stienen committed
103 104

#endif // INCLUDE_WATHER_ITA_AUDIOFILE_WRITER