Browse Source

bugfix for audio stream generators getting killed accidentally by audio server

Fabian Keller 1 year ago
parent
commit
4eac548202
1 changed files with 7 additions and 4 deletions
  1. 7 4
      servers/audio/effects/audio_stream_generator.cpp

+ 7 - 4
servers/audio/effects/audio_stream_generator.cpp

@@ -143,6 +143,10 @@ void AudioStreamGeneratorPlayback::clear_buffer() {
 }
 
 int AudioStreamGeneratorPlayback::_mix_internal(AudioFrame *p_buffer, int p_frames) {
+	if (!active) {
+		return 0;
+	}
+
 	int read_amount = buffer.data_left();
 	if (p_frames < read_amount) {
 		read_amount = p_frames;
@@ -151,16 +155,15 @@ int AudioStreamGeneratorPlayback::_mix_internal(AudioFrame *p_buffer, int p_fram
 	buffer.read(p_buffer, read_amount);
 
 	if (read_amount < p_frames) {
-		//skipped, not ideal
+		// Fill with zeros as fallback in case of buffer underrun.
 		for (int i = read_amount; i < p_frames; i++) {
 			p_buffer[i] = AudioFrame(0, 0);
 		}
-
 		skips++;
 	}
 
 	mixed += p_frames / generator->get_mix_rate();
-	return read_amount < p_frames ? read_amount : p_frames;
+	return p_frames;
 }
 
 float AudioStreamGeneratorPlayback::get_stream_sampling_rate() {
@@ -181,7 +184,7 @@ void AudioStreamGeneratorPlayback::stop() {
 }
 
 bool AudioStreamGeneratorPlayback::is_playing() const {
-	return active; //always playing, can't be stopped
+	return active;
 }
 
 int AudioStreamGeneratorPlayback::get_loop_count() const {