Exposes capture methods to AudioServer, variable renames for consistency,

added documentation.
This commit is contained in:
Saracen
2019-07-09 18:11:11 +01:00
parent e6230a36f8
commit c81ec6f26d
9 changed files with 146 additions and 72 deletions

View File

@ -134,31 +134,31 @@ AudioStreamMicrophone::AudioStreamMicrophone() {
void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_frames) {
AudioDriver::get_singleton()->lock();
AudioServer::get_singleton()->lock();
Vector<int32_t> buf = AudioDriver::get_singleton()->get_input_buffer();
unsigned int input_size = AudioDriver::get_singleton()->get_input_size();
int mix_rate = AudioDriver::get_singleton()->get_mix_rate();
unsigned int playback_delay = MIN(((50 * mix_rate) / 1000) * 2, buf.size() >> 1);
PoolVector<int32_t> capture_buffer = AudioServer::get_singleton()->get_capture_buffer();
unsigned int capture_size = AudioServer::get_singleton()->get_capture_size();
int mix_rate = AudioServer::get_singleton()->get_mix_rate();
unsigned int playback_delay = MIN(((50 * mix_rate) / 1000) * 2, capture_buffer.size() >> 1);
#ifdef DEBUG_ENABLED
unsigned int input_position = AudioDriver::get_singleton()->get_input_position();
unsigned int capture_position = AudioServer::get_singleton()->get_capture_position();
#endif
if (playback_delay > input_size) {
if (playback_delay > capture_size) {
for (int i = 0; i < p_frames; i++) {
p_buffer[i] = AudioFrame(0.0f, 0.0f);
}
input_ofs = 0;
capture_ofs = 0;
} else {
for (int i = 0; i < p_frames; i++) {
if (input_size > input_ofs && (int)input_ofs < buf.size()) {
float l = (buf[input_ofs++] >> 16) / 32768.f;
if ((int)input_ofs >= buf.size()) {
input_ofs = 0;
if (capture_size > capture_ofs && (int)capture_ofs < capture_buffer.size()) {
float l = (capture_buffer[capture_ofs++] >> 16) / 32768.f;
if ((int)capture_ofs >= capture_buffer.size()) {
capture_ofs = 0;
}
float r = (buf[input_ofs++] >> 16) / 32768.f;
if ((int)input_ofs >= buf.size()) {
input_ofs = 0;
float r = (capture_buffer[capture_ofs++] >> 16) / 32768.f;
if ((int)capture_ofs >= capture_buffer.size()) {
capture_ofs = 0;
}
p_buffer[i] = AudioFrame(l, r);
@ -169,12 +169,12 @@ void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_fr
}
#ifdef DEBUG_ENABLED
if (input_ofs > input_position && (int)(input_ofs - input_position) < (p_frames * 2)) {
print_verbose(String(get_class_name()) + " buffer underrun: input_position=" + itos(input_position) + " input_ofs=" + itos(input_ofs) + " input_size=" + itos(input_size));
if (capture_ofs > capture_position && (int)(capture_ofs - capture_position) < (p_frames * 2)) {
print_verbose(String(get_class_name()) + " buffer underrun: capture_position=" + itos(capture_position) + " capture_ofs=" + itos(capture_ofs) + " capture_size=" + itos(capture_size));
}
#endif
AudioDriver::get_singleton()->unlock();
AudioServer::get_singleton()->unlock();
}
void AudioStreamPlaybackMicrophone::mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) {
@ -196,9 +196,9 @@ void AudioStreamPlaybackMicrophone::start(float p_from_pos) {
return;
}
input_ofs = 0;
capture_ofs = 0;
if (AudioDriver::get_singleton()->capture_start() == OK) {
if (AudioServer::get_singleton()->capture_start() == OK) {
active = true;
_begin_resample();
}
@ -206,7 +206,7 @@ void AudioStreamPlaybackMicrophone::start(float p_from_pos) {
void AudioStreamPlaybackMicrophone::stop() {
if (active) {
AudioDriver::get_singleton()->capture_stop();
AudioServer::get_singleton()->capture_stop();
active = false;
}
}