Pārlūkot izejas kodu

Open/close libao audio device

Anton Yabchinskiy 10 gadi atpakaļ
vecāks
revīzija
2f92e2a67a
2 mainītis faili ar 17 papildinājumiem un 0 dzēšanām
  1. 15 0
      drivers/ao/audio_driver_ao.cpp
  2. 2 0
      drivers/ao/audio_driver_ao.h

+ 15 - 0
drivers/ao/audio_driver_ao.cpp

@@ -43,6 +43,17 @@ Error AudioDriverAO::init() {
 	output_format = OUTPUT_STEREO;
 	channels = 2;
 
+	ao_sample_format format;
+
+	format.bits = 16;
+	format.rate = mix_rate;
+	format.channels = channels;
+	format.byte_format = AO_FMT_LITTLE;
+	format.matrix = "L,R";
+
+	device = ao_open_live(ao_default_driver_id(), &format, 0);
+	ERR_FAIL_COND_V(device == 0, ERR_CANT_OPEN);
+
 	int latency = GLOBAL_DEF("audio/output_latency",25);
 	buffer_size = nearest_power_of_2( latency * mix_rate / 1000 );
 
@@ -114,6 +125,10 @@ void AudioDriverAO::finish() {
 	memdelete(thread);
 	if (mutex)
 		memdelete(mutex);
+
+	if (device)
+		ao_close(device);
+
 	thread = NULL;
 };
 

+ 2 - 0
drivers/ao/audio_driver_ao.h

@@ -40,6 +40,8 @@ class AudioDriverAO : public AudioDriverSW {
 	Thread* thread;
 	Mutex* mutex;
 
+	ao_device* device;
+
 	int32_t* samples_in;
 
 	static void thread_func(void* p_udata);