Fix AudioStreams::stop possibly causing a small noise
This commit is contained in:
@ -37,7 +37,7 @@
|
||||
void AudioStreamPlayer2D::_mix_audio() {
|
||||
|
||||
if (!stream_playback.is_valid() || !active ||
|
||||
(stream_paused && !stream_paused_fade_out)) {
|
||||
(stream_paused && !stream_fade_out)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ void AudioStreamPlayer2D::_mix_audio() {
|
||||
AudioFrame *buffer = mix_buffer.ptrw();
|
||||
int buffer_size = mix_buffer.size();
|
||||
|
||||
if (stream_paused_fade_out) {
|
||||
if (stream_fade_out) {
|
||||
// Short fadeout ramp
|
||||
buffer_size = MIN(buffer_size, 128);
|
||||
}
|
||||
@ -84,10 +84,10 @@ void AudioStreamPlayer2D::_mix_audio() {
|
||||
}
|
||||
|
||||
//mix!
|
||||
AudioFrame target_volume = stream_paused_fade_out ? AudioFrame(0.f, 0.f) : current.vol;
|
||||
AudioFrame vol_prev = stream_paused_fade_in ? AudioFrame(0.f, 0.f) : prev_outputs[i].vol;
|
||||
AudioFrame target_volume = stream_fade_out ? AudioFrame(0.f, 0.f) : current.vol;
|
||||
AudioFrame vol_prev = stream_fade_in ? AudioFrame(0.f, 0.f) : prev_outputs[i].vol;
|
||||
AudioFrame vol_inc = (target_volume - vol_prev) / float(buffer_size);
|
||||
AudioFrame vol = stream_paused_fade_in ? AudioFrame(0.f, 0.f) : current.vol;
|
||||
AudioFrame vol = stream_fade_in ? AudioFrame(0.f, 0.f) : current.vol;
|
||||
|
||||
int cc = AudioServer::get_singleton()->get_channel_count();
|
||||
|
||||
@ -139,9 +139,15 @@ void AudioStreamPlayer2D::_mix_audio() {
|
||||
active = false;
|
||||
}
|
||||
|
||||
if (stream_stop) {
|
||||
active = false;
|
||||
set_physics_process_internal(false);
|
||||
setplay = -1;
|
||||
}
|
||||
|
||||
output_ready = false;
|
||||
stream_paused_fade_in = false;
|
||||
stream_paused_fade_out = false;
|
||||
stream_fade_in = false;
|
||||
stream_fade_out = false;
|
||||
}
|
||||
|
||||
void AudioStreamPlayer2D::_notification(int p_what) {
|
||||
@ -323,6 +329,7 @@ void AudioStreamPlayer2D::play(float p_from_pos) {
|
||||
}
|
||||
|
||||
if (stream_playback.is_valid()) {
|
||||
stream_stop = false;
|
||||
active = true;
|
||||
setplay = p_from_pos;
|
||||
output_ready = false;
|
||||
@ -340,9 +347,8 @@ void AudioStreamPlayer2D::seek(float p_seconds) {
|
||||
void AudioStreamPlayer2D::stop() {
|
||||
|
||||
if (stream_playback.is_valid()) {
|
||||
active = false;
|
||||
set_physics_process_internal(false);
|
||||
setplay = -1;
|
||||
stream_stop = true;
|
||||
stream_fade_out = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -457,8 +463,8 @@ void AudioStreamPlayer2D::set_stream_paused(bool p_pause) {
|
||||
|
||||
if (p_pause != stream_paused) {
|
||||
stream_paused = p_pause;
|
||||
stream_paused_fade_in = p_pause ? false : true;
|
||||
stream_paused_fade_out = p_pause ? true : false;
|
||||
stream_fade_in = p_pause ? false : true;
|
||||
stream_fade_out = p_pause ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -537,8 +543,9 @@ AudioStreamPlayer2D::AudioStreamPlayer2D() {
|
||||
output_ready = false;
|
||||
area_mask = 1;
|
||||
stream_paused = false;
|
||||
stream_paused_fade_in = false;
|
||||
stream_paused_fade_out = false;
|
||||
stream_fade_in = false;
|
||||
stream_fade_out = false;
|
||||
stream_stop = false;
|
||||
AudioServer::get_singleton()->connect("bus_layout_changed", this, "_bus_layout_changed");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user