ITASoundSamplePool.h 3.13 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
/*
* ----------------------------------------------------------------
*
*		ITA core libs
*		(c) Copyright Institute of Technical Acoustics (ITA)
*		RWTH Aachen University, Germany, 2015-2016
*
* ----------------------------------------------------------------
*				    ____  __________  _______
*				   //  / //__   ___/ //  _   |
*				  //  /    //  /    //  /_|  |
*				 //  /    //  /    //  ___   |
*				//__/    //__/    //__/   |__|
*
* ----------------------------------------------------------------
*
*/
/*
 *      +------------------+
 *  --->| ITA Sampler      |--->
 *  --->| o o o o      /// |--->
 *      +------------------+
 *
 *  ITASampler ist eine C++ Bibliothek die einen Sound sampler zur wavetable-basierten
 *  Klangsynthese bereitstellt. Der Begriff "sampler" bezieht sich hier auf den Terminus
 *  aus der Musikproduktion und nicht auf Abtastwerte.
 *
 *  Datei:		ITASoundSamplePool.h
 *  Zweck:		Schnittstellendefinition fr Kontainer/Verwalter von sound samples
 *  Autoren:	Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de)
 *  CVS-Datum:	$Id: ITASoundSamplePool.h,v 1.1 2008-12-10 14:15:03 fwefers Exp $
 *
 *  (c) Copyright Institut fr Technische Akustik (ITA) RWTH Aachen, 2008
 */

#ifndef INCLUDE_WATCHER_ITA_SOUND_SAMPLE_POOL
#define INCLUDE_WATCHER_ITA_SOUND_SAMPLE_POOL

#include <ITASamplerDefinition.h>

#include <string>
#include <vector>

// Vorwrtsdeklarationen
class ITASoundSample;

/**
 * Diese Klasse realisiert eine Verwaltung fr Samples.
 * Die Trennung von der Klasse ITASampler ermglicht es mehrer
 * Sampler mit einem SamplePool zu betreiben. So kann vermieden
 * werden mehrere gleiche Samples mehrfach zu laden und den
 * Speicher unntig zu belasten.
 */

class ITA_SAMPLER_API ITASoundSamplePool
{
public:
	//! Factory method
	static ITASoundSamplePool* Create(int iMaxNumberOfChannels, double dSamplerate);

	//! Destruktor
	inline virtual ~ITASoundSamplePool() {};

	//! Maximale Anzahl Kanle zurckgeben
	virtual int GetMaximumNumberOfChannels() const=0;

	//! Abtastrate [Hz] zurckgeben
	virtual double GetSamplerate() const=0;

	//! Mono-Sample aus Puffer erzeugen
	virtual int CreateSample(const float* pfData, int iLength, double dSamplerate, std::string sName="")=0;

	//! Stereo-Sample aus Puffer erzeugen
	virtual int CreateSample(const float* pfLeftChannelData, const float* pfRightChannelData, int iLength, double dSamplerate, std::string sName="")=0;

	//! Sample aus Puffer erzeugen
	virtual int CreateSample(const float** ppfChannelData, int iNumChannels, int iLength, double dSamplerate, std::string sName="")=0;

	//! Sample aus Puffer erzeugen
	virtual int CreateSample(std::vector<float*> vpfChannelData, int iLength, double dSamplerate, std::string sName="")=0;

	//! Sample aus Datei laden
	virtual int LoadSample(const std::string& sFilename, std::string sName="")=0;

	//! Sample freigeben
	virtual void FreeSample(int iSampleID)=0;

	//! IDs aller enthaltenen Samples zurckgeben
	virtual void GetSampleIDs(std::vector<int>& viSampleIDs) const=0;

	//! Sample-Objekt zurckgeben
	virtual const ITASoundSample* GetSample(int iSampleID, bool bAddPlaybackReference)=0;
};

#endif // INCLUDE_WATCHER_ITA_SOUND_SAMPLE_POOL