Move mixrate and latency definition to AudioServer

Each driver used to define the (same) project settings value, but the
setting names are not driver specific. Ovverriding is still possible via
platform tags.

(cherry picked from commit 90c7102b51)
This commit is contained in:
Fabio Alessandrelli 2020-05-18 02:31:38 +02:00 committed by Rémi Verschelde
parent 6d1ddf7eb1
commit 92031098bf
11 changed files with 24 additions and 21 deletions

View File

@ -38,7 +38,7 @@
#include <errno.h> #include <errno.h>
Error AudioDriverALSA::init_device() { Error AudioDriverALSA::init_device() {
mix_rate = GLOBAL_DEF("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
speaker_mode = SPEAKER_MODE_STEREO; speaker_mode = SPEAKER_MODE_STEREO;
channels = 2; channels = 2;
@ -104,7 +104,7 @@ Error AudioDriverALSA::init_device() {
// In ALSA the period size seems to be the one that will determine the actual latency // In ALSA the period size seems to be the one that will determine the actual latency
// Ref: https://www.alsa-project.org/main/index.php/FramesPeriods // Ref: https://www.alsa-project.org/main/index.php/FramesPeriods
unsigned int periods = 2; unsigned int periods = 2;
int latency = GLOBAL_DEF("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
buffer_frames = closest_power_of_2(latency * mix_rate / 1000); buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
buffer_size = buffer_frames * periods; buffer_size = buffer_frames * periods;
period_size = buffer_frames; period_size = buffer_frames;

View File

@ -118,7 +118,7 @@ Error AudioDriverCoreAudio::init() {
break; break;
} }
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
zeromem(&strdesc, sizeof(strdesc)); zeromem(&strdesc, sizeof(strdesc));
strdesc.mFormatID = kAudioFormatLinearPCM; strdesc.mFormatID = kAudioFormatLinearPCM;
@ -133,7 +133,7 @@ Error AudioDriverCoreAudio::init() {
result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &strdesc, sizeof(strdesc)); result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &strdesc, sizeof(strdesc));
ERR_FAIL_COND_V(result != noErr, FAILED); ERR_FAIL_COND_V(result != noErr, FAILED);
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
// Sample rate is independent of channels (ref: https://stackoverflow.com/questions/11048825/audio-sample-frequency-rely-on-channels) // Sample rate is independent of channels (ref: https://stackoverflow.com/questions/11048825/audio-sample-frequency-rely-on-channels)
buffer_frames = closest_power_of_2(latency * mix_rate / 1000); buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
@ -419,7 +419,7 @@ Error AudioDriverCoreAudio::capture_init() {
break; break;
} }
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
zeromem(&strdesc, sizeof(strdesc)); zeromem(&strdesc, sizeof(strdesc));
strdesc.mFormatID = kAudioFormatLinearPCM; strdesc.mFormatID = kAudioFormatLinearPCM;

View File

@ -182,7 +182,7 @@ Error AudioDriverPulseAudio::init_device() {
break; break;
} }
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
buffer_frames = closest_power_of_2(latency * mix_rate / 1000); buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
pa_buffer_size = buffer_frames * pa_map.channels; pa_buffer_size = buffer_frames * pa_map.channels;
@ -241,7 +241,7 @@ Error AudioDriverPulseAudio::init() {
thread_exited = false; thread_exited = false;
exit_thread = false; exit_thread = false;
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
pa_ml = pa_mainloop_new(); pa_ml = pa_mainloop_new();
ERR_FAIL_COND_V(pa_ml == NULL, ERR_CANT_OPEN); ERR_FAIL_COND_V(pa_ml == NULL, ERR_CANT_OPEN);

View File

@ -396,7 +396,7 @@ Error AudioDriverWASAPI::finish_capture_device() {
Error AudioDriverWASAPI::init() { Error AudioDriverWASAPI::init() {
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
Error err = init_render_device(); Error err = init_render_device();
if (err != OK) { if (err != OK) {

View File

@ -45,12 +45,12 @@ Error AudioDriverXAudio2::init() {
pcm_open = false; pcm_open = false;
samples_in = NULL; samples_in = NULL;
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
// FIXME: speaker_mode seems unused in the Xaudio2 driver so far // FIXME: speaker_mode seems unused in the Xaudio2 driver so far
speaker_mode = SPEAKER_MODE_STEREO; speaker_mode = SPEAKER_MODE_STEREO;
channels = 2; channels = 2;
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
buffer_size = closest_power_of_2(latency * mix_rate / 1000); buffer_size = closest_power_of_2(latency * mix_rate / 1000);
samples_in = memnew_arr(int32_t, buffer_size * channels); samples_in = memnew_arr(int32_t, buffer_size * channels);

View File

@ -76,9 +76,9 @@ Error AudioDriverAndroid::init() {
// __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device"); // __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device");
JNIEnv *env = ThreadAndroid::get_env(); JNIEnv *env = ThreadAndroid::get_env();
int mix_rate = GLOBAL_DEF_RST("audio/mix_rate", 44100); int mix_rate = GLOBAL_GET("audio/mix_rate");
int latency = GLOBAL_DEF_RST("audio/output_latency", 25); int latency = GLOBAL_GET("audio/output_latency");
unsigned int buffer_size = next_power_of_2(latency * mix_rate / 1000); unsigned int buffer_size = next_power_of_2(latency * mix_rate / 1000);
print_verbose("Audio buffer size: " + itos(buffer_size)); print_verbose("Audio buffer size: " + itos(buffer_size));

View File

@ -39,11 +39,11 @@ int32_t *AudioDriverMediaKit::samples_in = NULL;
Error AudioDriverMediaKit::init() { Error AudioDriverMediaKit::init() {
active = false; active = false;
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); mix_rate = GLOBAL_GET("audio/mix_rate");
speaker_mode = SPEAKER_MODE_STEREO; speaker_mode = SPEAKER_MODE_STEREO;
channels = 2; channels = 2;
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
buffer_size = next_power_of_2(latency * mix_rate / 1000); buffer_size = next_power_of_2(latency * mix_rate / 1000);
samples_in = memnew_arr(int32_t, buffer_size * channels); samples_in = memnew_arr(int32_t, buffer_size * channels);

View File

@ -70,8 +70,8 @@ void AudioDriverJavaScript::process_capture(float sample) {
Error AudioDriverJavaScript::init() { Error AudioDriverJavaScript::init() {
int mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE); int mix_rate = GLOBAL_GET("audio/mix_rate");
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
/* clang-format off */ /* clang-format off */
EM_ASM({ EM_ASM({

View File

@ -40,11 +40,11 @@ Error AudioDriverDummy::init() {
exit_thread = false; exit_thread = false;
samples_in = NULL; samples_in = NULL;
mix_rate = DEFAULT_MIX_RATE; mix_rate = GLOBAL_GET("audio/mix_rate");
speaker_mode = SPEAKER_MODE_STEREO; speaker_mode = SPEAKER_MODE_STEREO;
channels = 2; channels = 2;
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY); int latency = GLOBAL_GET("audio/output_latency");
buffer_frames = closest_power_of_2(latency * mix_rate / 1000); buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
samples_in = memnew_arr(int32_t, buffer_frames * channels); samples_in = memnew_arr(int32_t, buffer_frames * channels);

View File

@ -182,6 +182,9 @@ int AudioDriverManager::get_driver_count() {
void AudioDriverManager::initialize(int p_driver) { void AudioDriverManager::initialize(int p_driver) {
GLOBAL_DEF_RST("audio/enable_audio_input", false); GLOBAL_DEF_RST("audio/enable_audio_input", false);
GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE);
GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY);
int failed_driver = -1; int failed_driver = -1;
// Check if there is a selected driver // Check if there is a selected driver

View File

@ -81,9 +81,6 @@ public:
SPEAKER_SURROUND_71, SPEAKER_SURROUND_71,
}; };
static const int DEFAULT_MIX_RATE = 44100;
static const int DEFAULT_OUTPUT_LATENCY = 15;
static AudioDriver *get_singleton(); static AudioDriver *get_singleton();
void set_singleton(); void set_singleton();
@ -131,6 +128,9 @@ class AudioDriverManager {
MAX_DRIVERS = 10 MAX_DRIVERS = 10
}; };
static const int DEFAULT_MIX_RATE = 44100;
static const int DEFAULT_OUTPUT_LATENCY = 15;
static AudioDriver *drivers[MAX_DRIVERS]; static AudioDriver *drivers[MAX_DRIVERS];
static int driver_count; static int driver_count;