Revert "Fix AudioStreams::stop possibly causing a small noise"

(cherry picked from commit 60eec47077)
This commit is contained in:
Juan Linietsky 2019-04-27 12:17:54 -03:00 committed by Rémi Verschelde
parent c6e49cc0d9
commit 89402e38c7
6 changed files with 42 additions and 64 deletions

View File

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

View File

@ -73,9 +73,8 @@ private:
float pitch_scale; float pitch_scale;
bool autoplay; bool autoplay;
bool stream_paused; bool stream_paused;
bool stream_fade_in; bool stream_paused_fade_in;
bool stream_fade_out; bool stream_paused_fade_out;
bool stream_stop;
StringName bus; StringName bus;
void _mix_audio(); void _mix_audio();

View File

@ -38,7 +38,7 @@
void AudioStreamPlayer3D::_mix_audio() { void AudioStreamPlayer3D::_mix_audio() {
if (!stream_playback.is_valid() || !active || if (!stream_playback.is_valid() || !active ||
(stream_paused && !stream_fade_out)) { (stream_paused && !stream_paused_fade_out)) {
return; return;
} }
@ -53,7 +53,7 @@ void AudioStreamPlayer3D::_mix_audio() {
AudioFrame *buffer = mix_buffer.ptrw(); AudioFrame *buffer = mix_buffer.ptrw();
int buffer_size = mix_buffer.size(); int buffer_size = mix_buffer.size();
if (stream_fade_out) { if (stream_paused_fade_out) {
// Short fadeout ramp // Short fadeout ramp
buffer_size = MIN(buffer_size, 128); buffer_size = MIN(buffer_size, 128);
} }
@ -109,10 +109,10 @@ void AudioStreamPlayer3D::_mix_audio() {
int buffers = AudioServer::get_singleton()->get_channel_count(); int buffers = AudioServer::get_singleton()->get_channel_count();
for (int k = 0; k < buffers; k++) { for (int k = 0; k < buffers; k++) {
AudioFrame target_volume = stream_fade_out ? AudioFrame(0.f, 0.f) : current.vol[k]; AudioFrame target_volume = stream_paused_fade_out ? AudioFrame(0.f, 0.f) : current.vol[k];
AudioFrame vol_prev = stream_fade_in ? AudioFrame(0.f, 0.f) : prev_outputs[i].vol[k]; AudioFrame vol_prev = stream_paused_fade_in ? AudioFrame(0.f, 0.f) : prev_outputs[i].vol[k];
AudioFrame vol_inc = (target_volume - vol_prev) / float(buffer_size); AudioFrame vol_inc = (target_volume - vol_prev) / float(buffer_size);
AudioFrame vol = stream_fade_in ? AudioFrame(0.f, 0.f) : current.vol[k]; AudioFrame vol = stream_paused_fade_in ? AudioFrame(0.f, 0.f) : current.vol[k];
if (!AudioServer::get_singleton()->thread_has_channel_mix_buffer(current.bus_index, k)) if (!AudioServer::get_singleton()->thread_has_channel_mix_buffer(current.bus_index, k))
continue; //may have been deleted, will be updated on process continue; //may have been deleted, will be updated on process
@ -198,15 +198,9 @@ void AudioStreamPlayer3D::_mix_audio() {
active = false; active = false;
} }
if (stream_stop) {
active = false;
set_physics_process_internal(false);
setplay = -1;
}
output_ready = false; output_ready = false;
stream_fade_in = false; stream_paused_fade_in = false;
stream_fade_out = false; stream_paused_fade_out = false;
} }
float AudioStreamPlayer3D::_get_attenuation_db(float p_distance) const { float AudioStreamPlayer3D::_get_attenuation_db(float p_distance) const {
@ -662,7 +656,6 @@ float AudioStreamPlayer3D::get_pitch_scale() const {
void AudioStreamPlayer3D::play(float p_from_pos) { void AudioStreamPlayer3D::play(float p_from_pos) {
if (stream_playback.is_valid()) { if (stream_playback.is_valid()) {
stream_stop = false;
active = true; active = true;
setplay = p_from_pos; setplay = p_from_pos;
output_ready = false; output_ready = false;
@ -680,8 +673,9 @@ void AudioStreamPlayer3D::seek(float p_seconds) {
void AudioStreamPlayer3D::stop() { void AudioStreamPlayer3D::stop() {
if (stream_playback.is_valid()) { if (stream_playback.is_valid()) {
stream_stop = true; active = false;
stream_fade_out = true; set_physics_process_internal(false);
setplay = -1;
} }
} }
@ -877,8 +871,8 @@ void AudioStreamPlayer3D::set_stream_paused(bool p_pause) {
if (p_pause != stream_paused) { if (p_pause != stream_paused) {
stream_paused = p_pause; stream_paused = p_pause;
stream_fade_in = stream_paused ? false : true; stream_paused_fade_in = stream_paused ? false : true;
stream_fade_out = stream_paused ? true : false; stream_paused_fade_out = stream_paused ? true : false;
} }
} }
@ -1022,9 +1016,8 @@ AudioStreamPlayer3D::AudioStreamPlayer3D() {
out_of_range_mode = OUT_OF_RANGE_MIX; out_of_range_mode = OUT_OF_RANGE_MIX;
doppler_tracking = DOPPLER_TRACKING_DISABLED; doppler_tracking = DOPPLER_TRACKING_DISABLED;
stream_paused = false; stream_paused = false;
stream_fade_in = false; stream_paused_fade_in = false;
stream_fade_out = false; stream_paused_fade_out = false;
stream_stop = false;
velocity_tracker.instance(); velocity_tracker.instance();
AudioServer::get_singleton()->connect("bus_layout_changed", this, "_bus_layout_changed"); AudioServer::get_singleton()->connect("bus_layout_changed", this, "_bus_layout_changed");

View File

@ -109,9 +109,8 @@ private:
float pitch_scale; float pitch_scale;
bool autoplay; bool autoplay;
bool stream_paused; bool stream_paused;
bool stream_fade_in; bool stream_paused_fade_in;
bool stream_fade_out; bool stream_paused_fade_out;
bool stream_stop;
StringName bus; StringName bus;
void _mix_audio(); void _mix_audio();

View File

@ -96,14 +96,10 @@ void AudioStreamPlayer::_mix_audio() {
return; return;
} }
if (stream_fade) { if (stream_paused) {
_mix_internal(true); if (stream_paused_fade) {
stream_fade = false; _mix_internal(true);
stream_paused_fade = false;
if (stream_stop) {
stream_playback->stop();
active = false;
set_process_internal(false);
} }
return; return;
} }
@ -209,7 +205,6 @@ void AudioStreamPlayer::play(float p_from_pos) {
if (stream_playback.is_valid()) { if (stream_playback.is_valid()) {
//mix_volume_db = volume_db; do not reset volume ramp here, can cause clicks //mix_volume_db = volume_db; do not reset volume ramp here, can cause clicks
stream_stop = false;
setseek = p_from_pos; setseek = p_from_pos;
active = true; active = true;
set_process_internal(true); set_process_internal(true);
@ -226,8 +221,9 @@ void AudioStreamPlayer::seek(float p_seconds) {
void AudioStreamPlayer::stop() { void AudioStreamPlayer::stop() {
if (stream_playback.is_valid()) { if (stream_playback.is_valid()) {
stream_stop = true; stream_playback->stop();
stream_fade = true; active = false;
set_process_internal(false);
} }
} }
@ -301,7 +297,7 @@ void AudioStreamPlayer::set_stream_paused(bool p_pause) {
if (p_pause != stream_paused) { if (p_pause != stream_paused) {
stream_paused = p_pause; stream_paused = p_pause;
stream_fade = p_pause ? true : false; stream_paused_fade = p_pause ? true : false;
} }
} }
@ -397,8 +393,7 @@ AudioStreamPlayer::AudioStreamPlayer() {
setseek = -1; setseek = -1;
active = false; active = false;
stream_paused = false; stream_paused = false;
stream_fade = false; stream_paused_fade = false;
stream_stop = false;
mix_target = MIX_TARGET_STEREO; mix_target = MIX_TARGET_STEREO;
AudioServer::get_singleton()->connect("bus_layout_changed", this, "_bus_layout_changed"); AudioServer::get_singleton()->connect("bus_layout_changed", this, "_bus_layout_changed");

View File

@ -58,8 +58,7 @@ private:
float volume_db; float volume_db;
bool autoplay; bool autoplay;
bool stream_paused; bool stream_paused;
bool stream_fade; bool stream_paused_fade;
bool stream_stop;
StringName bus; StringName bus;
MixTarget mix_target; MixTarget mix_target;