ITAAudiofileReader.h 3.59 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)
Dipl.-Ing. Jonas Stienen's avatar
Dipl.-Ing. Jonas Stienen committed
6
 *		RWTH Aachen University, Germany, 2015-2020
7 8 9 10 11 12 13 14 15 16 17
 *
 * ----------------------------------------------------------------
 *				    ____  __________  _______
 *				   //  / //__   ___/ //  _   |
 *				  //  /    //  /    //  /_|  |
 *				 //  /    //  /    //  ___   |
 *				//__/    //__/    //__/   |__|
 *
 * ----------------------------------------------------------------
 *
 */
Jonas Stienen's avatar
Jonas Stienen committed
18

19 20
#ifndef INCLUDE_WATCHER_ITA_AUDIOFILE_READER
#define INCLUDE_WATCHER_ITA_AUDIOFILE_READER
Jonas Stienen's avatar
Jonas Stienen committed
21 22 23 24 25 26 27

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

#include <string>
#include <vector>

28
//! Abstract reader interface for audio files
Jonas Stienen's avatar
Jonas Stienen committed
29 30 31
class ITA_BASE_API ITAAudiofileReader
{
public:
32
	//! Factory-Method (creates loader)
Jonas Stienen's avatar
Jonas Stienen committed
33
	/**
34
	 * \note Never returns NULL but raises ITAException on error.
Jonas Stienen's avatar
Jonas Stienen committed
35
	 */
36
	static ITAAudiofileReader* create( const std::string& sFilePath );
Jonas Stienen's avatar
Jonas Stienen committed
37 38 39 40
	virtual ~ITAAudiofileReader();
	ITAAudiofileProperties getAudiofileProperties() const;
	ITAQuantization getQuantization() const;
	ITADomain getDomain() const;
41
	int getNumberOfChannels() const;
Jonas Stienen's avatar
Jonas Stienen committed
42 43
	double getSamplerate() const;

44
	//! Returns absolute length of audio file in samples
45
	int getLength() const;
Jonas Stienen's avatar
Jonas Stienen committed
46

47
	//! Returns current read cursor position
48
	int getCursor() const;
Jonas Stienen's avatar
Jonas Stienen committed
49 50 51

	std::string getComment() const;

52
	//! Seek to a specified position inside audio file
53
	virtual void seek( int iOffset ) = 0;
Jonas Stienen's avatar
Jonas Stienen committed
54 55 56 57 58 59

	//! 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.
60
	 *
Jonas Stienen's avatar
Jonas Stienen committed
61 62 63 64 65
	 * \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
	 */
66
	std::vector< float* > read( int iLength );
Jonas Stienen's avatar
Jonas Stienen committed
67 68 69 70 71 72 73 74 75 76 77 78

	//! 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.
79
	 *
Jonas Stienen's avatar
Jonas Stienen committed
80 81 82 83 84 85
	 * \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
	 */
86
	virtual void read( int iLength, std::vector< float* > vpfDest ) = 0;
Jonas Stienen's avatar
Jonas Stienen committed
87 88

protected:
89 90 91 92 93 94 95
	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
96 97 98
};

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

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

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

107
#endif // INCLUDE_WATCHER_ITA_AUDIOFILE_READER