You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-24 15:26:15 +00:00
Corrections to audio buffer size calculations
This commit is contained in:
@@ -77,7 +77,7 @@ Error AudioDriverOSX::initDevice() {
|
||||
break;
|
||||
}*/
|
||||
|
||||
mix_rate = GLOBAL_DEF("audio/mix_rate", 44100);
|
||||
mix_rate = GLOBAL_DEF("audio/mix_rate", DEFAULT_MIX_RATE);
|
||||
|
||||
zeromem(&strdesc, sizeof(strdesc));
|
||||
strdesc.mFormatID = kAudioFormatLinearPCM;
|
||||
@@ -92,16 +92,20 @@ Error AudioDriverOSX::initDevice() {
|
||||
result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &strdesc, sizeof(strdesc));
|
||||
ERR_FAIL_COND_V(result != noErr, FAILED);
|
||||
|
||||
int latency = GLOBAL_DEF("audio/output_latency", 25);
|
||||
unsigned int buffer_size = closest_power_of_2(latency * mix_rate / 1000);
|
||||
int latency = GLOBAL_DEF("audio/output_latency", DEFAULT_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);
|
||||
|
||||
result = AudioUnitSetProperty(audio_unit, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, kOutputBus, &buffer_frames, sizeof(UInt32));
|
||||
ERR_FAIL_COND_V(result != noErr, FAILED);
|
||||
|
||||
buffer_size = buffer_frames * channels;
|
||||
samples_in.resize(buffer_size);
|
||||
|
||||
if (OS::get_singleton()->is_stdout_verbose()) {
|
||||
print_line("audio buffer size: " + itos(buffer_size) + " calculated latency: " + itos(buffer_size * 1000 / mix_rate));
|
||||
print_line("audio buffer frames: " + itos(buffer_frames) + " calculated latency: " + itos(buffer_frames * 1000 / mix_rate) + "ms");
|
||||
}
|
||||
|
||||
samples_in.resize(buffer_size);
|
||||
buffer_frames = buffer_size / channels;
|
||||
|
||||
AURenderCallbackStruct callback;
|
||||
zeromem(&callback, sizeof(AURenderCallbackStruct));
|
||||
callback.inputProc = &AudioDriverOSX::output_callback;
|
||||
@@ -234,7 +238,7 @@ void AudioDriverOSX::start() {
|
||||
};
|
||||
|
||||
int AudioDriverOSX::get_mix_rate() const {
|
||||
return 44100;
|
||||
return mix_rate;
|
||||
};
|
||||
|
||||
AudioDriver::SpeakerMode AudioDriverOSX::get_speaker_mode() const {
|
||||
@@ -282,8 +286,12 @@ AudioDriverOSX::AudioDriverOSX() {
|
||||
active = false;
|
||||
mutex = NULL;
|
||||
|
||||
mix_rate = 44100;
|
||||
mix_rate = 0;
|
||||
channels = 2;
|
||||
|
||||
buffer_size = 0;
|
||||
buffer_frames = 0;
|
||||
|
||||
samples_in.clear();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user