mirror of
https://github.com/godotengine/godot.git
synced 2026-01-03 18:11:19 +03:00
Fix leak when using audio samples instead of streams
(cherry picked from commit d3ddce6b88)
This commit is contained in:
committed by
Rémi Verschelde
parent
f11f9e3b7f
commit
0b815cbb99
@@ -1623,6 +1623,9 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) {
|
||||
}
|
||||
|
||||
if (t_obj->call(SNAME("get_is_sample"))) {
|
||||
if (t->audio_stream_playback->get_sample_playback().is_valid()) {
|
||||
AudioServer::get_singleton()->stop_sample_playback(t->audio_stream_playback->get_sample_playback());
|
||||
}
|
||||
Ref<AudioSamplePlayback> sample_playback;
|
||||
sample_playback.instantiate();
|
||||
sample_playback->stream = stream;
|
||||
|
||||
@@ -247,6 +247,11 @@ AudioStreamPlaybackPolyphonic::ID AudioStreamPlaybackPolyphonic::play_stream(con
|
||||
sp->volume_vector.write[2] = AudioFrame(linear_volume, linear_volume);
|
||||
sp->volume_vector.write[3] = AudioFrame(linear_volume, linear_volume);
|
||||
sp->bus = p_bus;
|
||||
|
||||
if (streams[i].stream_playback->get_sample_playback().is_valid()) {
|
||||
AudioServer::get_singleton()->stop_playback_stream(sp);
|
||||
}
|
||||
|
||||
streams[i].stream_playback->set_sample_playback(sp);
|
||||
AudioServer::get_singleton()->start_sample_playback(sp);
|
||||
}
|
||||
@@ -315,6 +320,9 @@ Ref<AudioSamplePlayback> AudioStreamPlaybackPolyphonic::get_sample_playback() co
|
||||
|
||||
void AudioStreamPlaybackPolyphonic::set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) {
|
||||
sample_playback = p_playback;
|
||||
if (sample_playback.is_valid()) {
|
||||
sample_playback->stream_playback = Ref<AudioStreamPlayback>(this);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioStreamPlaybackPolyphonic::_bind_methods() {
|
||||
|
||||
@@ -479,6 +479,9 @@ Ref<AudioSamplePlayback> AudioStreamPlaybackWAV::get_sample_playback() const {
|
||||
|
||||
void AudioStreamPlaybackWAV::set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) {
|
||||
sample_playback = p_playback;
|
||||
if (sample_playback.is_valid()) {
|
||||
sample_playback->stream_playback = Ref<AudioStreamPlayback>(this);
|
||||
}
|
||||
}
|
||||
|
||||
AudioStreamPlaybackWAV::AudioStreamPlaybackWAV() {}
|
||||
|
||||
Reference in New Issue
Block a user