Fixed audio clipping on WASAPI by fixing argument order on AudioClient
Initialize method ensuring a larger capture buffer and adding bounds to the capture and stream.
This commit is contained in:
@ -135,19 +135,31 @@ void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_fr
|
||||
AudioDriver::get_singleton()->lock();
|
||||
|
||||
Vector<int32_t> buf = AudioDriver::get_singleton()->get_audio_input_buffer();
|
||||
unsigned int audio_input_size = AudioDriver::get_singleton()->get_audio_input_size();
|
||||
|
||||
for (int i = 0; i < p_frames; i++) {
|
||||
|
||||
float l = (buf[input_ofs++] >> 16) / 32768.f;
|
||||
if (input_ofs >= buf.size()) {
|
||||
input_ofs = 0;
|
||||
}
|
||||
float r = (buf[input_ofs++] >> 16) / 32768.f;
|
||||
if (input_ofs >= buf.size()) {
|
||||
input_ofs = 0;
|
||||
// p_frames is multipled by two since an AudioFrame is stereo
|
||||
if ((p_frames * 2) > audio_input_size) {
|
||||
for (int i = 0; i < p_frames; i++) {
|
||||
p_buffer[i] = AudioFrame(0.0f, 0.0f);
|
||||
}
|
||||
input_ofs = 0;
|
||||
} else {
|
||||
for (int i = 0; i < p_frames; i++) {
|
||||
if (audio_input_size >= input_ofs) {
|
||||
float l = (buf[input_ofs++] >> 16) / 32768.f;
|
||||
if (input_ofs >= buf.size()) {
|
||||
input_ofs = 0;
|
||||
}
|
||||
float r = (buf[input_ofs++] >> 16) / 32768.f;
|
||||
if (input_ofs >= buf.size()) {
|
||||
input_ofs = 0;
|
||||
}
|
||||
|
||||
p_buffer[i] = AudioFrame(l, r);
|
||||
p_buffer[i] = AudioFrame(l, r);
|
||||
} else {
|
||||
p_buffer[i] = AudioFrame(0.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AudioDriver::get_singleton()->unlock();
|
||||
|
||||
Reference in New Issue
Block a user