Experimental microphone support.

This commit is contained in:
Saracen
2018-02-27 07:54:56 +00:00
parent 6afabc0335
commit f85062495c
23 changed files with 1058 additions and 27 deletions

View File

@ -44,19 +44,30 @@
class AudioDriverWASAPI : public AudioDriver {
HANDLE event;
// Audio out
IAudioClient *audio_client;
IAudioRenderClient *render_client;
// Microphone
class MicrophoneDeviceOutputDirectWASAPI : public MicrophoneDeviceOutputDirect {
public:
IAudioClient *audio_client;
IAudioCaptureClient *capture_client;
};
//
Mutex *mutex;
Thread *thread;
String device_name;
String new_device;
String capture_device_default_name;
WORD format_tag;
WORD bits_per_sample;
Vector<int32_t> samples_in;
Map<StringName, StringName> capture_device_id_map;
unsigned int buffer_size;
unsigned int channels;
unsigned int wasapi_channels;
@ -70,8 +81,13 @@ class AudioDriverWASAPI : public AudioDriver {
_FORCE_INLINE_ void write_sample(AudioDriverWASAPI *ad, BYTE *buffer, int i, int32_t sample);
static void thread_func(void *p_udata);
Error init_device(bool reinit = false);
Error finish_device();
StringName get_default_capture_device_name(IMMDeviceEnumerator *p_enumerator);
Error init_render_device(bool reinit = false);
Error init_capture_devices(bool reinit = false);
Error finish_render_device();
Error finish_capture_devices();
public:
virtual const char *get_name() const {
@ -89,6 +105,11 @@ public:
virtual void unlock();
virtual void finish();
virtual bool capture_device_start(StringName p_name);
virtual bool capture_device_stop(StringName p_name);
virtual PoolStringArray capture_device_get_names();
virtual StringName capture_device_get_default_name();
AudioDriverWASAPI();
};