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:
parent
6d1ddf7eb1
commit
92031098bf
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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({
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue