From 9f60496beb74364c5bb484384cc1a1a27e8a229a Mon Sep 17 00:00:00 2001 From: stechyo Date: Tue, 11 Jun 2024 18:40:08 +0100 Subject: [PATCH] Add get_inner_stream_playback. --- src/player.cpp | 13 +++++++++++++ src/player.hpp | 1 + src/stream.cpp | 1 + src/stream.hpp | 1 + 4 files changed, 16 insertions(+) diff --git a/src/player.cpp b/src/player.cpp index b116382..e00353b 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -11,6 +11,7 @@ void SteamAudioPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("play_stream", "stream", "from_offset", "volume_db", "pitch_scale"), &SteamAudioPlayer::play_stream, DEFVAL(0), DEFVAL(0), DEFVAL(1.0)); ClassDB::bind_method(D_METHOD("get_inner_stream"), &SteamAudioPlayer::get_inner_stream); + ClassDB::bind_method(D_METHOD("get_inner_stream_playback"), &SteamAudioPlayer::get_inner_stream_playback); ClassDB::bind_method(D_METHOD("is_dist_attn_on"), &SteamAudioPlayer::is_dist_attn_on); ClassDB::bind_method(D_METHOD("set_dist_attn_on", "p_dist_attn_on"), &SteamAudioPlayer::set_dist_attn_on); @@ -263,6 +264,18 @@ Ref SteamAudioPlayer::get_inner_stream() { return str->get_stream(); } +Ref SteamAudioPlayer::get_inner_stream_playback() { + auto spb = dynamic_cast(get_stream_playback().ptr()); + if (spb == nullptr) { + SteamAudio::log(SteamAudio::log_warn, + "Tried to get an inner stream playback from a SteamAudioPlayer, but its outer stream playback is not a SteamAudioStreamPlayback (or the player may not be playing audio). Returning null."); + Ref null_pb; + return null_pb; + } + + return spb->get_stream_playback(); +} + float SteamAudioPlayer::get_occlusion_radius() { return cfg.occ_radius; } void SteamAudioPlayer::set_occlusion_radius(float p_occlusion_radius) { cfg.occ_radius = p_occlusion_radius; } int SteamAudioPlayer::get_occlusion_samples() { return cfg.occ_samples; } diff --git a/src/player.hpp b/src/player.hpp index 3092fb5..fb0b70f 100644 --- a/src/player.hpp +++ b/src/player.hpp @@ -73,6 +73,7 @@ class SteamAudioPlayer : public AudioStreamPlayer3D { void play_stream(const Ref &p_stream, float p_from_offset, float p_volume_db, float p_pitch_scale); Ref get_inner_stream(); + Ref get_inner_stream_playback(); PackedStringArray _get_configuration_warnings() const override; }; diff --git a/src/stream.cpp b/src/stream.cpp index e92f106..23eff02 100644 --- a/src/stream.cpp +++ b/src/stream.cpp @@ -183,3 +183,4 @@ void SteamAudioStreamPlayback::_stop() { bool SteamAudioStreamPlayback::_is_playing() const { return is_active; } void SteamAudioStreamPlayback::set_stream(Ref p_stream) { stream = p_stream; } +Ref SteamAudioStreamPlayback::get_stream_playback() { return this->stream_playback; } diff --git a/src/stream.hpp b/src/stream.hpp index c18d257..33021b1 100644 --- a/src/stream.hpp +++ b/src/stream.hpp @@ -52,6 +52,7 @@ class SteamAudioStreamPlayback : public AudioStreamPlayback { ~SteamAudioStreamPlayback(); void set_stream(Ref p_stream); + Ref get_stream_playback(); virtual int32_t _mix(AudioFrame *buffer, double rate_scale, int32_t frames) override;