summaryrefslogtreecommitdiffstats
path: root/servers/audio
diff options
context:
space:
mode:
Diffstat (limited to 'servers/audio')
-rw-r--r--servers/audio/audio_stream.cpp25
-rw-r--r--servers/audio/audio_stream.h19
2 files changed, 44 insertions, 0 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 65d88a0eba..3e3a7d2381 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -80,6 +80,16 @@ void AudioStreamPlayback::tag_used_streams() {
GDVIRTUAL_CALL(_tag_used_streams);
}
+void AudioStreamPlayback::set_parameter(const StringName &p_name, const Variant &p_value) {
+ GDVIRTUAL_CALL(_set_parameter, p_name, p_value);
+}
+
+Variant AudioStreamPlayback::get_parameter(const StringName &p_name) const {
+ Variant ret;
+ GDVIRTUAL_CALL(_get_parameter, p_name, ret);
+ return ret;
+}
+
void AudioStreamPlayback::_bind_methods() {
GDVIRTUAL_BIND(_start, "from_pos")
GDVIRTUAL_BIND(_stop)
@@ -89,6 +99,8 @@ void AudioStreamPlayback::_bind_methods() {
GDVIRTUAL_BIND(_seek, "position")
GDVIRTUAL_BIND(_mix, "buffer", "rate_scale", "frames");
GDVIRTUAL_BIND(_tag_used_streams);
+ GDVIRTUAL_BIND(_set_parameter, "name", "value");
+ GDVIRTUAL_BIND(_get_parameter, "name");
}
//////////////////////////////
@@ -249,6 +261,16 @@ float AudioStream::get_tagged_frame_offset(int p_index) const {
return tagged_offsets[p_index];
}
+void AudioStream::get_parameter_list(List<Parameter> *r_parameters) {
+ TypedArray<Dictionary> ret;
+ GDVIRTUAL_CALL(_get_parameter_list, ret);
+ for (int i = 0; i < ret.size(); i++) {
+ Dictionary d = ret[i];
+ ERR_CONTINUE(!d.has("default_value"));
+ r_parameters->push_back(Parameter(PropertyInfo::from_dict(d), d["default_value"]));
+ }
+}
+
void AudioStream::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_length"), &AudioStream::get_length);
ClassDB::bind_method(D_METHOD("is_monophonic"), &AudioStream::is_monophonic);
@@ -259,6 +281,9 @@ void AudioStream::_bind_methods() {
GDVIRTUAL_BIND(_is_monophonic);
GDVIRTUAL_BIND(_get_bpm)
GDVIRTUAL_BIND(_get_beat_count)
+ GDVIRTUAL_BIND(_get_parameter_list)
+
+ ADD_SIGNAL(MethodInfo("parameter_list_changed"));
}
////////////////////////////////
diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h
index 015e89fc8e..f8123fbe15 100644
--- a/servers/audio/audio_stream.h
+++ b/servers/audio/audio_stream.h
@@ -38,6 +38,7 @@
#include "core/object/gdvirtual.gen.inc"
#include "core/variant/native_ptr.h"
+#include "core/variant/typed_array.h"
class AudioStream;
@@ -54,6 +55,9 @@ protected:
GDVIRTUAL1(_seek, double)
GDVIRTUAL3R(int, _mix, GDExtensionPtr<AudioFrame>, float, int)
GDVIRTUAL0(_tag_used_streams)
+ GDVIRTUAL2(_set_parameter, const StringName &, const Variant &)
+ GDVIRTUAL1RC(Variant, _get_parameter, const StringName &)
+
public:
virtual void start(double p_from_pos = 0.0);
virtual void stop();
@@ -66,6 +70,9 @@ public:
virtual void tag_used_streams();
+ virtual void set_parameter(const StringName &p_name, const Variant &p_value);
+ virtual Variant get_parameter(const StringName &p_name) const;
+
virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames);
};
@@ -124,6 +131,7 @@ protected:
GDVIRTUAL0RC(bool, _has_loop)
GDVIRTUAL0RC(int, _get_bar_beats)
GDVIRTUAL0RC(int, _get_beat_count)
+ GDVIRTUAL0RC(TypedArray<Dictionary>, _get_parameter_list)
public:
virtual Ref<AudioStreamPlayback> instantiate_playback();
@@ -141,6 +149,17 @@ public:
uint64_t get_tagged_frame() const;
uint32_t get_tagged_frame_count() const;
float get_tagged_frame_offset(int p_index) const;
+
+ struct Parameter {
+ PropertyInfo property;
+ Variant default_value;
+ Parameter(const PropertyInfo &p_info = PropertyInfo(), const Variant &p_default_value = Variant()) {
+ property = p_info;
+ default_value = p_default_value;
+ }
+ };
+
+ virtual void get_parameter_list(List<Parameter> *r_parameters);
};
// Microphone