Skip to content

Commit

Permalink
Merge pull request #59413 from ellenhp/preinstance-audio-streams
Browse files Browse the repository at this point in the history
  • Loading branch information
akien-mga authored Mar 31, 2022
2 parents 8f06d86 + 027546e commit 5c0dcca
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 3 deletions.
5 changes: 4 additions & 1 deletion scene/2d/audio_stream_player_2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ void AudioStreamPlayer2D::_notification(int p_what) {
}

void AudioStreamPlayer2D::set_stream(Ref<AudioStream> p_stream) {
// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();

AudioServer::get_singleton()->lock();

mix_buffer.resize(AudioServer::get_singleton()->thread_get_mix_buffer_size());
Expand All @@ -284,7 +287,7 @@ void AudioStreamPlayer2D::set_stream(Ref<AudioStream> p_stream) {

if (p_stream.is_valid()) {
stream = p_stream;
stream_playback = p_stream->instance_playback();
stream_playback = pre_instanced_playback;
}

AudioServer::get_singleton()->unlock();
Expand Down
5 changes: 4 additions & 1 deletion scene/3d/audio_stream_player_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -622,6 +622,9 @@ void AudioStreamPlayer3D::_notification(int p_what) {
}

void AudioStreamPlayer3D::set_stream(Ref<AudioStream> p_stream) {
// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();

AudioServer::get_singleton()->lock();

mix_buffer.resize(AudioServer::get_singleton()->thread_get_mix_buffer_size());
Expand All @@ -635,7 +638,7 @@ void AudioStreamPlayer3D::set_stream(Ref<AudioStream> p_stream) {

if (p_stream.is_valid()) {
stream = p_stream;
stream_playback = p_stream->instance_playback();
stream_playback = pre_instanced_playback;
}

AudioServer::get_singleton()->unlock();
Expand Down
5 changes: 4 additions & 1 deletion scene/audio/audio_stream_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ void AudioStreamPlayer::_notification(int p_what) {
}

void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) {
// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();

AudioServer::get_singleton()->lock();

if (active.is_set() && stream_playback.is_valid() && !stream_paused) {
Expand Down Expand Up @@ -203,7 +206,7 @@ void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) {

if (p_stream.is_valid()) {
stream = p_stream;
stream_playback = p_stream->instance_playback();
stream_playback = pre_instanced_playback;
}

AudioServer::get_singleton()->unlock();
Expand Down

0 comments on commit 5c0dcca

Please sign in to comment.