ITASoundSampleImpl.h 2.43 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
/*
 *      +------------------+
 *  --->| 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:		ITASoundSampleImpl.h
 *  Zweck:		Implementierungsklasse fr sound samples
 *  Autoren:	Frank Wefers (Frank.Wefers@akustik.rwth-aachen.de)
 *  CVS-Datum:	$Id: ITASoundSampleImpl.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_IMPL
#define INCLUDE_WATCHER_ITA_SOUND_SAMPLE_IMPL

#include <ITASoundSample.h>

#include <ITACriticalSection.h>
#include <string>
#include <vector>

/** 
 * Diese Realisierung des SoundSamples wird nur intern von
 * der SoundSamplePool benutzt.
 */

class ITASoundSampleImpl : public ITASoundSample {
public:
	/* Sample aus Datei laden
	 *
	 * iMaxNumberOfChannels = Maximal mgliche Kanalanzahl bestimmt durch die Ausgangskanle des Samplers
	 *                        Wird zur Fehlerberprfung benutzt
	 * dRequiredSamplerate = Abtastrate des Samplers zwingend erforderlich
	 */
	ITASoundSampleImpl(const std::string& sFilename, int iMaxNumberOfChannels, double dRequiredSamplerate, std::string sName="");

	/* Sample aus Puffer erzeugen
	 *
	 * Hinweis: Die Sample-Daten werden kopiert.
	 */
	ITASoundSampleImpl::ITASoundSampleImpl(const float** ppfChannelData, int iNumberOfChannels, int iLength, std::string sName="");

	~ITASoundSampleImpl();

	bool OriginFile() const;
	std::string GetName() const;
	void SetName(const std::string& sName);
	std::string GetFilename() const;
	int GetNumberOfChannels() const;
	int GetLength() const;

	// Zeiger auf die Daten eines Kanals zurckgeben
	const float* GetChannelData(int iChannel) const;

	// Anzahl der vermerkten Playbacks zurckgeben
	bool HasPlaybackReferences();

	// Weiteres Playback vermerken
	void AddPlaybackReference();

	// Playback entfernen
	void RemovePlaybackReference();

private:
	std::string m_sName;
	std::string m_sFilename;
	bool m_bOriginFile;
	int m_iLength;
	std::vector<float*> m_vpData;	

	int m_iPlaybackRefCount;					// Referenzzhler fr die Anzahl der Playbacks
	ITACriticalSection m_csPlaybackRefCount;	// Globales Lock fr den 
};

#endif // INCLUDE_WATCHER_ITA_SOUND_SAMPLE_IMPL