2010-02-09 05:18:39 +01:00
|
|
|
// Copyright (c) 2008-2010 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones
|
|
|
|
// This file is part of the "cAudio Engine"
|
|
|
|
// For conditions of distribution and use, see copyright notice in cAudio.h
|
|
|
|
|
2009-08-11 19:57:20 +02:00
|
|
|
#ifndef CAUDIOCAPTURE_H
|
|
|
|
#define CAUDIOCAPTURE_H
|
|
|
|
|
|
|
|
#include "../include/IAudioCapture.h"
|
|
|
|
#include <vector>
|
|
|
|
#include <AL/al.h>
|
|
|
|
#include <AL/alc.h>
|
2009-08-29 13:24:31 +02:00
|
|
|
#include "../Headers/cMutex.h"
|
2009-11-20 04:39:56 +01:00
|
|
|
#include <string>
|
2010-02-13 05:47:59 +01:00
|
|
|
#include <list>
|
2010-03-08 05:56:56 +01:00
|
|
|
#include "../Headers/cMemoryOverride.h"
|
|
|
|
#include "../Headers/cSTLAllocator.h"
|
2009-08-11 19:57:20 +02:00
|
|
|
|
|
|
|
namespace cAudio
|
|
|
|
{
|
2010-03-08 05:56:56 +01:00
|
|
|
class cAudioCapture : public IAudioCapture, public cMemoryOverride
|
2009-08-11 19:57:20 +02:00
|
|
|
{
|
|
|
|
public:
|
2010-02-13 05:47:59 +01:00
|
|
|
|
|
|
|
enum Events{
|
|
|
|
ON_INIT,
|
|
|
|
ON_UPDATE,
|
|
|
|
ON_RELEASE,
|
|
|
|
ON_BEGINCAPTURE,
|
|
|
|
ON_ENDCAPTURE,
|
|
|
|
ON_USERREQUESTEDBUFFER,
|
|
|
|
};
|
|
|
|
|
2009-08-11 19:57:20 +02:00
|
|
|
cAudioCapture();
|
|
|
|
~cAudioCapture();
|
|
|
|
|
|
|
|
//! Checks to see if capturing audio is supported by OpenAL
|
|
|
|
bool checkCaptureExtension();
|
|
|
|
|
2009-11-20 04:39:56 +01:00
|
|
|
virtual bool initialize(const char* deviceName = 0x0, unsigned int frequency = 22050, AudioFormats format = EAF_16BIT_MONO, unsigned int internalBufferSize = 8192);
|
2009-08-11 19:57:20 +02:00
|
|
|
virtual bool isSupported() { return Supported; }
|
|
|
|
virtual bool isReady() { return Ready; }
|
2009-11-20 04:39:56 +01:00
|
|
|
virtual void updateCaptureBuffer(bool force = false);
|
|
|
|
virtual void shutdown();
|
|
|
|
|
|
|
|
virtual const char* getAvailableDeviceName(unsigned int index);
|
|
|
|
virtual unsigned int getAvailableDeviceCount();
|
|
|
|
virtual const char* getDefaultDeviceName();
|
2009-08-11 19:57:20 +02:00
|
|
|
|
2009-11-20 04:39:56 +01:00
|
|
|
virtual const char* getDeviceName() { return DeviceName.c_str(); }
|
2009-08-11 19:57:20 +02:00
|
|
|
virtual unsigned int getFrequency() { return Frequency; }
|
|
|
|
virtual AudioFormats getFormat() { return Format; }
|
|
|
|
virtual unsigned int getInternalBufferSize() { return InternalBufferSize; }
|
|
|
|
virtual unsigned int getSampleSize() { return SampleSize; }
|
|
|
|
|
2009-11-20 04:39:56 +01:00
|
|
|
virtual bool setDevice(const char* deviceName);
|
2009-08-11 19:57:20 +02:00
|
|
|
virtual bool setFrequency(unsigned int frequency);
|
|
|
|
virtual bool setFormat(AudioFormats format);
|
|
|
|
virtual bool setInternalBufferSize(unsigned int internalBufferSize);
|
|
|
|
|
|
|
|
virtual bool beginCapture();
|
|
|
|
virtual void stopCapture();
|
2009-08-26 03:43:45 +02:00
|
|
|
virtual unsigned int getCapturedAudio(void* outputBuffer, unsigned int outputBufferSize);
|
2009-08-11 19:57:20 +02:00
|
|
|
|
|
|
|
virtual unsigned int getCurrentCapturedAudioSize();
|
2009-11-20 04:39:56 +01:00
|
|
|
void getAvailableDevices();
|
2010-02-13 05:47:59 +01:00
|
|
|
|
|
|
|
virtual void registerEventHandler(ICaptureEventHandler* handler);
|
|
|
|
virtual void unRegisterEventHandler(ICaptureEventHandler* handler);
|
|
|
|
virtual void unRegisterAllEventHandlers();
|
|
|
|
|
2009-08-11 19:57:20 +02:00
|
|
|
protected:
|
2009-08-29 13:24:31 +02:00
|
|
|
cAudioMutex Mutex;
|
|
|
|
|
2009-08-11 19:57:20 +02:00
|
|
|
bool initOpenALDevice();
|
|
|
|
void shutdownOpenALDevice();
|
|
|
|
|
|
|
|
unsigned int Frequency;
|
|
|
|
AudioFormats Format;
|
|
|
|
unsigned int InternalBufferSize;
|
2009-11-20 04:39:56 +01:00
|
|
|
int SampleSize;
|
|
|
|
|
2010-03-08 05:56:56 +01:00
|
|
|
std::vector<char, cSTLAllocator<char> > CaptureBuffer;
|
|
|
|
std::vector<std::string, cSTLAllocator<std::string> > AvailableDevices;
|
2009-11-20 04:39:56 +01:00
|
|
|
std::string DefaultDevice;
|
2010-03-08 05:56:56 +01:00
|
|
|
std::list<ICaptureEventHandler*, cSTLAllocator<ICaptureEventHandler*> > eventHandlerList;
|
2009-11-20 04:39:56 +01:00
|
|
|
|
2009-08-11 19:57:20 +02:00
|
|
|
bool Supported;
|
|
|
|
bool Ready;
|
|
|
|
bool Capturing;
|
|
|
|
|
2009-11-20 04:39:56 +01:00
|
|
|
std::string DeviceName;
|
2009-08-11 19:57:20 +02:00
|
|
|
ALCdevice* CaptureDevice;
|
2010-01-11 01:39:08 +01:00
|
|
|
|
|
|
|
bool checkError();
|
|
|
|
ALenum convertAudioFormatEnum(AudioFormats format);
|
2010-02-17 02:42:45 +01:00
|
|
|
void signalEvent(Events sevent);
|
2009-08-11 19:57:20 +02:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif //! CAUDIOCAPTURE_H
|