Skip to content

Commit a4a5712

Browse files
committed
Add some useful methods in SteamAudioPlayer.
1 parent 5d98c2b commit a4a5712

File tree

9 files changed

+68
-20
lines changed

9 files changed

+68
-20
lines changed

src/config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ IPLSceneType SteamAudioConfig::scene_type = IPL_SCENETYPE_EMBREE; // TODO: suppo
1818
void SteamAudioConfig::_bind_methods() {
1919
ClassDB::bind_method(D_METHOD("get_global_log_level"), &SteamAudioConfig::get_global_log_level);
2020
ClassDB::bind_method(D_METHOD("set_global_log_level", "p_global_log_level"), &SteamAudioConfig::set_global_log_level);
21-
ADD_PROPERTY(PropertyInfo(Variant::INT, "global_log_level", PROPERTY_HINT_ENUM, "Debug,Info,Error"), "set_global_log_level", "get_global_log_level");
21+
ADD_PROPERTY(PropertyInfo(Variant::INT, "global_log_level", PROPERTY_HINT_ENUM, "Debug,Info,Warning,Error"), "set_global_log_level", "get_global_log_level");
2222

2323
ADD_GROUP("Performance", "");
2424
ClassDB::bind_method(D_METHOD("get_scene_type"), &SteamAudioConfig::get_scene_type);

src/player.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55
#include "godot_cpp/variant/utility_functions.hpp"
66
#include "server.hpp"
77
#include "server_init.hpp"
8+
#include "steam_audio.hpp"
89
#include "stream.hpp"
910

1011
void SteamAudioPlayer::_bind_methods() {
12+
ClassDB::bind_method(D_METHOD("play_stream", "stream", "from_offset", "volume_db", "pitch_scale"), &SteamAudioPlayer::play_stream, DEFVAL(0), DEFVAL(0), DEFVAL(1.0));
13+
ClassDB::bind_method(D_METHOD("get_inner_stream"), &SteamAudioPlayer::get_inner_stream);
14+
1115
ClassDB::bind_method(D_METHOD("is_dist_attn_on"), &SteamAudioPlayer::is_dist_attn_on);
1216
ClassDB::bind_method(D_METHOD("set_dist_attn_on", "p_dist_attn_on"), &SteamAudioPlayer::set_dist_attn_on);
1317
ClassDB::bind_method(D_METHOD("get_min_attenuation_distance"), &SteamAudioPlayer::get_min_attenuation_dist);
@@ -217,6 +221,48 @@ void SteamAudioPlayer::process_internal(double delta) {
217221
}
218222
}
219223

224+
void SteamAudioPlayer::play_stream(const Ref<AudioStream> &p_stream, float p_from_offset, float p_volume_db, float p_pitch_scale) {
225+
if (p_stream.is_null()) {
226+
SteamAudio::log(SteamAudio::log_warn, "Tried to play a null stream, won't play anything.");
227+
return;
228+
}
229+
230+
if (this->is_playing()) {
231+
this->stop();
232+
}
233+
this->play();
234+
235+
auto str = dynamic_cast<SteamAudioStream *>(get_stream().ptr());
236+
if (str == nullptr) {
237+
SteamAudio::log(SteamAudio::log_warn,
238+
"Tried to get an inner stream from a SteamAudioPlayer, but its outer stream is not a SteamAudioStream. Returning null.");
239+
return;
240+
}
241+
str->set_stream(p_stream);
242+
243+
auto playback_ptr = dynamic_cast<SteamAudioStreamPlayback *>(get_stream_playback().ptr());
244+
if (playback_ptr == nullptr) {
245+
SteamAudio::log(SteamAudio::log_warn,
246+
"Tried to play a new stream on SteamAudioPlayer, but this player's outer stream was not a SteamAudioStream. Will not play anything.");
247+
this->stop();
248+
return;
249+
}
250+
251+
playback_ptr->play_stream(p_stream, p_from_offset, p_volume_db, p_pitch_scale);
252+
}
253+
254+
Ref<AudioStream> SteamAudioPlayer::get_inner_stream() {
255+
auto str = dynamic_cast<SteamAudioStream *>(get_stream().ptr());
256+
if (str == nullptr) {
257+
SteamAudio::log(SteamAudio::log_warn,
258+
"Tried to get an inner stream from a SteamAudioPlayer, but its outer stream is not a SteamAudioStream. Returning null.");
259+
Ref<AudioStream> null_str;
260+
return null_str;
261+
}
262+
263+
return str->get_stream();
264+
}
265+
220266
float SteamAudioPlayer::get_occlusion_radius() { return cfg.occ_radius; }
221267
void SteamAudioPlayer::set_occlusion_radius(float p_occlusion_radius) { cfg.occ_radius = p_occlusion_radius; }
222268
int SteamAudioPlayer::get_occlusion_samples() { return cfg.occ_samples; }

src/player.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ class SteamAudioPlayer : public AudioStreamPlayer3D {
7171
bool is_occlusion_on();
7272
void set_occlusion_on(bool p_occlusion_on);
7373

74+
void play_stream(const Ref<AudioStream> &p_stream, float p_from_offset, float p_volume_db, float p_pitch_scale);
75+
Ref<AudioStream> get_inner_stream();
76+
7477
PackedStringArray _get_configuration_warnings() const override;
7578
};
7679

src/server.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,6 @@ void SteamAudioServer::tick() {
163163
SteamAudio::log(SteamAudio::log_debug, "tick: done");
164164
}
165165

166-
void SteamAudioServer::init_scene(IPLSceneSettings *scene_cfg) {
167-
SteamAudio::log(SteamAudio::log_info, "Initializing SteamAudioServer scene");
168-
IPLerror err = iplSceneCreate(global_state.ctx, scene_cfg, &global_state.scene);
169-
handleErr(err);
170-
global_state.scene = iplSceneRetain(global_state.scene);
171-
}
172-
173166
GlobalSteamAudioState *SteamAudioServer::get_global_state(bool should_init) {
174167
self->init_mux.lock();
175168
if (self->is_global_state_init.load()) {
@@ -188,7 +181,10 @@ GlobalSteamAudioState *SteamAudioServer::get_global_state(bool should_init) {
188181
global_state.ctx = create_ctx();
189182

190183
IPLSceneSettings scene_cfg = create_scene_cfg(global_state.ctx);
191-
init_scene(&scene_cfg);
184+
SteamAudio::log(SteamAudio::log_info, "Initializing SteamAudioServer scene");
185+
IPLerror err = iplSceneCreate(global_state.ctx, &scene_cfg, &global_state.scene);
186+
handleErr(err);
187+
global_state.scene = iplSceneRetain(global_state.scene);
192188
for (auto m : meshes_to_add) {
193189
iplStaticMeshAdd(m, global_state.scene);
194190
}

src/server_init.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ IPLSimulator create_simulator(IPLContext ctx, IPLAudioSettings audio_cfg, IPLSce
7272
}
7373

7474
IPLSceneSettings create_scene_cfg(IPLContext ctx) {
75-
IPLSceneSettings scene_cfg;
75+
IPLSceneSettings scene_cfg = {};
7676
scene_cfg.type = SteamAudioConfig::scene_type;
7777
if (scene_cfg.type == IPL_SCENETYPE_EMBREE) {
7878
IPLEmbreeDeviceSettings embree_cfg{};
@@ -81,12 +81,6 @@ IPLSceneSettings create_scene_cfg(IPLContext ctx) {
8181
handleErr(err);
8282
scene_cfg.embreeDevice = embree_dev;
8383
}
84-
scene_cfg.closestHitCallback = nullptr;
85-
scene_cfg.anyHitCallback = nullptr;
86-
scene_cfg.batchedClosestHitCallback = nullptr;
87-
scene_cfg.batchedAnyHitCallback = nullptr;
88-
scene_cfg.userData = nullptr;
89-
scene_cfg.radeonRaysDevice = nullptr;
9084
return scene_cfg;
9185
}
9286

src/steam_audio.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,15 @@ void SteamAudio::log(GodotSteamAudioLogLevel lvl, const char *str) {
77
return;
88
}
99

10-
if (lvl < log_error) {
11-
UtilityFunctions::print("[godot-steam-audio] ", str);
12-
} else {
13-
UtilityFunctions::push_error("[godot-steam-audio] ", str);
10+
switch (lvl) {
11+
case log_error:
12+
UtilityFunctions::push_error("[godot-steam-audio] ", str);
13+
return;
14+
case log_warn:
15+
UtilityFunctions::push_warning("[godot-steam-audio] ", str);
16+
return;
17+
default:
18+
UtilityFunctions::print("[godot-steam-audio] ", str);
19+
return;
1420
}
1521
}

src/steam_audio.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class SteamAudio {
1515
typedef enum {
1616
log_debug,
1717
log_info,
18+
log_warn,
1819
log_error
1920
} GodotSteamAudioLogLevel;
2021

src/stream.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Ref<AudioStreamPlayback> SteamAudioStream::_instantiate_playback() const {
2424
}
2525

2626
void SteamAudioStream::set_stream(Ref<AudioStream> p_stream) { stream = p_stream; }
27+
Ref<AudioStream> SteamAudioStream::get_stream() { return this->stream; }
2728

2829
// ----------------------------------------------------
2930
// SteamAudioStreamPlayback

src/stream.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class SteamAudioStream : public AudioStream {
2929

3030
Ref<AudioStreamPlayback> _instantiate_playback() const override;
3131
void set_stream(Ref<AudioStream> p_stream);
32+
Ref<AudioStream> get_stream();
3233

3334
SteamAudioPlayer *parent;
3435
};

0 commit comments

Comments
 (0)