Move mix_rate, ouput_latency to AudioDriverManager
Each driver used to define the (same) project settings values `audio/mix_rate` and `audio/output_latency`, but the setting names are not driver specific. Overriding is still possible via platform tags.
This commit is contained in:
parent
245c179bd3
commit
90c7102b51
11 changed files with 24 additions and 21 deletions
|
@ -38,7 +38,7 @@
|
|||
#include <errno.h>
|
||||
|
||||
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;
|
||||
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
|
||||
// Ref: https://www.alsa-project.org/main/index.php/FramesPeriods
|
||||
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_size = buffer_frames * periods;
|
||||
period_size = buffer_frames;
|
||||
|
|
|
@ -116,7 +116,7 @@ Error AudioDriverCoreAudio::init() {
|
|||
break;
|
||||
}
|
||||
|
||||
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE);
|
||||
mix_rate = GLOBAL_GET("audio/mix_rate");
|
||||
|
||||
zeromem(&strdesc, sizeof(strdesc));
|
||||
strdesc.mFormatID = kAudioFormatLinearPCM;
|
||||
|
@ -131,7 +131,7 @@ Error AudioDriverCoreAudio::init() {
|
|||
result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &strdesc, sizeof(strdesc));
|
||||
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)
|
||||
buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
|
||||
|
||||
|
@ -403,7 +403,7 @@ Error AudioDriverCoreAudio::capture_init() {
|
|||
break;
|
||||
}
|
||||
|
||||
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE);
|
||||
mix_rate = GLOBAL_GET("audio/mix_rate");
|
||||
|
||||
zeromem(&strdesc, sizeof(strdesc));
|
||||
strdesc.mFormatID = kAudioFormatLinearPCM;
|
||||
|
|
|
@ -179,7 +179,7 @@ Error AudioDriverPulseAudio::init_device() {
|
|||
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);
|
||||
pa_buffer_size = buffer_frames * pa_map.channels;
|
||||
|
||||
|
@ -237,7 +237,7 @@ Error AudioDriverPulseAudio::init() {
|
|||
thread_exited = 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();
|
||||
ERR_FAIL_COND_V(pa_ml == nullptr, ERR_CANT_OPEN);
|
||||
|
|
|
@ -387,7 +387,7 @@ Error AudioDriverWASAPI::finish_capture_device() {
|
|||
}
|
||||
|
||||
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();
|
||||
if (err != OK) {
|
||||
|
|
|
@ -44,12 +44,12 @@ Error AudioDriverXAudio2::init() {
|
|||
pcm_open = false;
|
||||
samples_in = nullptr;
|
||||
|
||||
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
|
||||
speaker_mode = SPEAKER_MODE_STEREO;
|
||||
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);
|
||||
|
||||
samples_in = memnew_arr(int32_t, buffer_size * channels);
|
||||
|
|
|
@ -73,9 +73,9 @@ Error AudioDriverAndroid::init() {
|
|||
// __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device");
|
||||
|
||||
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);
|
||||
print_verbose("Audio buffer size: " + itos(buffer_size));
|
||||
|
||||
|
|
|
@ -39,11 +39,11 @@ int32_t *AudioDriverMediaKit::samples_in = nullptr;
|
|||
Error AudioDriverMediaKit::init() {
|
||||
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;
|
||||
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);
|
||||
samples_in = memnew_arr(int32_t, buffer_size * channels);
|
||||
|
||||
|
|
|
@ -64,8 +64,8 @@ void AudioDriverJavaScript::process_capture(float sample) {
|
|||
}
|
||||
|
||||
Error AudioDriverJavaScript::init() {
|
||||
int mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE);
|
||||
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY);
|
||||
int mix_rate = GLOBAL_GET("audio/mix_rate");
|
||||
int latency = GLOBAL_GET("audio/output_latency");
|
||||
|
||||
/* clang-format off */
|
||||
_driver_id = EM_ASM_INT({
|
||||
|
|
|
@ -39,11 +39,11 @@ Error AudioDriverDummy::init() {
|
|||
exit_thread = false;
|
||||
samples_in = nullptr;
|
||||
|
||||
mix_rate = DEFAULT_MIX_RATE;
|
||||
mix_rate = GLOBAL_GET("audio/mix_rate");
|
||||
speaker_mode = SPEAKER_MODE_STEREO;
|
||||
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);
|
||||
|
||||
samples_in = memnew_arr(int32_t, buffer_frames * channels);
|
||||
|
|
|
@ -182,6 +182,9 @@ int AudioDriverManager::get_driver_count() {
|
|||
|
||||
void AudioDriverManager::initialize(int p_driver) {
|
||||
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;
|
||||
|
||||
// Check if there is a selected driver
|
||||
|
|
|
@ -80,9 +80,6 @@ public:
|
|||
SPEAKER_SURROUND_71,
|
||||
};
|
||||
|
||||
static const int DEFAULT_MIX_RATE = 44100;
|
||||
static const int DEFAULT_OUTPUT_LATENCY = 15;
|
||||
|
||||
static AudioDriver *get_singleton();
|
||||
void set_singleton();
|
||||
|
||||
|
@ -129,6 +126,9 @@ class AudioDriverManager {
|
|||
MAX_DRIVERS = 10
|
||||
};
|
||||
|
||||
static const int DEFAULT_MIX_RATE = 44100;
|
||||
static const int DEFAULT_OUTPUT_LATENCY = 15;
|
||||
|
||||
static AudioDriver *drivers[MAX_DRIVERS];
|
||||
static int driver_count;
|
||||
|
||||
|
|
Loading…
Reference in a new issue