ITAAudiofileReader.h 3.87 KB
Newer Older
Jonas Stienen's avatar
Jonas Stienen committed
1
2
3
4
5
6
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
/*
* ----------------------------------------------------------------
*
*		ITA core libs
*		(c) Copyright Institute of Technical Acoustics (ITA)
*		RWTH Aachen University, Germany, 2015-2016
*
* ----------------------------------------------------------------
*				    ____  __________  _______
*				   //  / //__   ___/ //  _   |
*				  //  /    //  /    //  /_|  |
*				 //  /    //  /    //  ___   |
*				//__/    //__/    //__/   |__|
*
* ----------------------------------------------------------------
*
*/

#ifndef INCLUDE_WATHER_ITA_AUDIOFILE_READER
#define INCLUDE_WATHER_ITA_AUDIOFILE_READER

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

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

/**
 * Abstrakte Klasse welche allgemeine Leser fr Audiodateien realisiert
 */
class ITA_BASE_API ITAAudiofileReader
{
public:
	//! Factory-Method (Lader erzeugen)
	/**
	 * \note Gibt niemals NULL zurck. Lst aber ggf. eine ITAException aus
	 */
39
	static ITAAudiofileReader* create( const std::string& sFilePath );
Jonas Stienen's avatar
Jonas Stienen committed
40
41
42
43
44
45
46
47
48

	//! Destruktor
	virtual ~ITAAudiofileReader();

	//! Eigenschaften zurckgeben
	ITAAudiofileProperties getAudiofileProperties() const;

	//! Quantisierungstyp zurckgeben
	ITAQuantization getQuantization() const;
49

Jonas Stienen's avatar
Jonas Stienen committed
50
51
52
53
	//! Domne zurckgeben
	ITADomain getDomain() const;

	//! Anzahl der Kanle zurckgeben
54
	int getNumberOfChannels() const;
Jonas Stienen's avatar
Jonas Stienen committed
55
56
57
58
59

	//! Samplerate zurckgeben
	double getSamplerate() const;

	//! Lnge der Audiodatei in Samples zurckgeben
60
	int getLength() const;
Jonas Stienen's avatar
Jonas Stienen committed
61
62

	//! Aktuelle Position in der Audiodatei zurckgeben
63
	int getCursor() const;
Jonas Stienen's avatar
Jonas Stienen committed
64
65
66
67
68

	//! Kommentar der Audio zurckgeben
	std::string getComment() const;

	//! An eine Position in der Datei springen
69
	virtual void seek( int iOffset ) = 0;
Jonas Stienen's avatar
Jonas Stienen committed
70
71
72
73
74
75

	//! Lesen und Zielpuffer erzeugen
	/**
	 * Liet uiLength Samples aus der Audiodatei in Float-Puffer,
	 * welche automatisch von der Methode erzeugt werden. Die Anzahl
	 * der Float-Puffer ist gleich der Anzahl der Kanle der Audiodatei.
76
	 *
Jonas Stienen's avatar
Jonas Stienen committed
77
78
79
80
81
	 * \param uiLength Anzahl der zu lesenden Samples
	 * \return Vektor mit den Allozierten und mit Daten gefllten Float-Puffern
	 *
	 * \note Im Fehlerfall lst die Methode eine Ausnahme des Typs ITAException aus
	 */
82
	std::vector< float* > read( int iLength );
Jonas Stienen's avatar
Jonas Stienen committed
83
84
85
86
87
88
89
90
91
92
93
94

	//! Lesen in vorgegebene Zielpuffer
	/**
	 * Liet uiLength Samples aus der Audiodatei in Float-Puffer,
	 * welche der Methode als Parameter bergeben werden. Die Anzahl
	 * der Float-Puffer ist muss <b>nicht</b> gleich der Anzahl der Kanle
	 * der Audiodatei sein, darf diese Anzahl aber nicht berschreiten.
	 * Enthlt der bergebene Vektor weniger Zeiger als die Audiodatei
	 * Kanle hat, werden nur die ersten Kanle gelesen.
	 * Ferner kann man den Lader anweisen, nur gewisse Kanle zu laden,
	 * indem man in den Vektor Nullzeiger einfgt. Ist ein Zeiger Null,
	 * so ignoriert der Lader diesen.
95
	 *
Jonas Stienen's avatar
Jonas Stienen committed
96
97
98
99
100
101
	 * \param uiLength Anzahl der zu lesenden Samples
	 * \param vpfDest  Vektor mit Zeigern auf die Puffer,
	 *                 in denen die Daten abgelegt werden sollen.
	 *
	 * \note Im Fehlerfall lst die Methode eine Ausnahme des Typs ITAException aus
	 */
102
	virtual void read( int iLength, std::vector< float* > vpfDest ) = 0;
Jonas Stienen's avatar
Jonas Stienen committed
103
104

protected:
105
106
107
108
109
110
111
	ITAQuantization m_eQuantization;
	ITADomain m_eDomain;
	int m_iChannels;
	double m_dSampleRate;
	int m_iLength;
	int m_iCursor;
	std::string m_sComment;
Jonas Stienen's avatar
Jonas Stienen committed
112
113
114
};

//! Schnffelfunktion (Nur die Eigenschaften einer Audiodatei ermitteln)
115
ITA_BASE_API void sneakAudiofile( const std::string& sFilePath, ITAAudiofileProperties& props );
Jonas Stienen's avatar
Jonas Stienen committed
116
117

//! Audiodatei in Puffer laden (Puffer werden erzeugt)
118
ITA_BASE_API std::vector<float*> readAudiofile( const std::string& sFilePath, ITAAudiofileProperties& props );
Jonas Stienen's avatar
Jonas Stienen committed
119
120

//! Audiodatei in Puffer laden (Puffer sind vorgegeben)
121
ITA_BASE_API void readAudiofile( const std::string& sFilePath, ITAAudiofileProperties& props, std::vector< float* >& vpfData );
Jonas Stienen's avatar
Jonas Stienen committed
122
123

#endif // INCLUDE_WATHER_ITA_AUDIOFILE_READER