ITASoundSamplePool.h 3.13 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 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
*
* ----------------------------------------------------------------
*				    ____  __________  _______
*				   //  / //__   ___/ //  _   |
*				  //  /    //  /    //  /_|  |
*				 //  /    //  /    //  ___   |
*				//__/    //__/    //__/   |__|
*
* ----------------------------------------------------------------
*
*/
/*
 *      +------------------+
 *  --->| 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
68
	virtual double GetSampleRate() const=0;
Jonas Stienen's avatar
Jonas Stienen committed
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

	//! 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