#ifndef B3_SOUND_SOURCE_H
#define B3_SOUND_SOURCE_H

#include "b3Sound_C_Api.h"

class b3SoundSource
{
	struct b3SoundSourceInternalData* m_data;

public:
	b3SoundSource();
	virtual ~b3SoundSource();

	virtual bool computeSamples(double* sampleBuffer, int numSamples, double sampleRate);

	int getNumOscillators() const;
	void setOscillatorType(int oscillatorIndex, int type);
	void setOscillatorFrequency(int oscillatorIndex, double frequency);
	void setOscillatorAmplitude(int oscillatorIndex, double amplitude);
	void setOscillatorPhase(int oscillatorIndex, double phase);
	void setADSR(double attackRate, double decayRate, double sustainLevel, double releaseRate);

	bool setWavFile(int oscillatorIndex, class b3ReadWavFile* wavFilePtr, int sampleRate);

	void startSound(bool autoKeyOff);
	void stopSound();

	bool isAvailable() const;
};

#endif  //B3_SOUND_SOURCE_H
