summaryrefslogtreecommitdiffstats
path: root/servers/audio/audio_stream.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2024-06-19 07:59:07 +0200
committerGitHub <noreply@github.com>2024-06-19 07:59:07 +0200
commit19bf77f66635c53cc28d54784a9a2333f4a8d289 (patch)
tree3ef5548ade13b647bc32dd02d4506d5cf66aaebe /servers/audio/audio_stream.cpp
parent2b11d0ca966e93c621dccc57951ccbe2a0133251 (diff)
parent52fa4f05f3945fdf511c249adede9b6d07c51beb (diff)
downloadredot-engine-19bf77f66635c53cc28d54784a9a2333f4a8d289.tar.gz
Merge pull request #91382 from adamscott/sample-player
Add sample playback support
Diffstat (limited to 'servers/audio/audio_stream.cpp')
-rw-r--r--servers/audio/audio_stream.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index dc54e01ec8..0dc6d16050 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -90,6 +90,10 @@ Variant AudioStreamPlayback::get_parameter(const StringName &p_name) const {
return ret;
}
+Ref<AudioSamplePlayback> AudioStreamPlayback::get_sample_playback() const {
+ return nullptr;
+}
+
void AudioStreamPlayback::_bind_methods() {
GDVIRTUAL_BIND(_start, "from_pos")
GDVIRTUAL_BIND(_stop)
@@ -101,6 +105,17 @@ void AudioStreamPlayback::_bind_methods() {
GDVIRTUAL_BIND(_tag_used_streams);
GDVIRTUAL_BIND(_set_parameter, "name", "value");
GDVIRTUAL_BIND(_get_parameter, "name");
+
+ ClassDB::bind_method(D_METHOD("set_sample_playback", "playback_sample"), &AudioStreamPlayback::set_sample_playback);
+ ClassDB::bind_method(D_METHOD("get_sample_playback"), &AudioStreamPlayback::get_sample_playback);
+}
+
+AudioStreamPlayback::AudioStreamPlayback() {}
+
+AudioStreamPlayback::~AudioStreamPlayback() {
+ if (get_sample_playback().is_valid() && likely(AudioServer::get_singleton() != nullptr)) {
+ AudioServer::get_singleton()->stop_sample_playback(get_sample_playback());
+ }
}
//////////////////////////////
@@ -271,10 +286,22 @@ void AudioStream::get_parameter_list(List<Parameter> *r_parameters) {
}
}
+Ref<AudioSample> AudioStream::generate_sample() const {
+ ERR_FAIL_COND_V_MSG(!can_be_sampled(), nullptr, "Cannot generate a sample for a stream that cannot be sampled.");
+ Ref<AudioSample> sample;
+ sample.instantiate();
+ sample->stream = this;
+ return sample;
+}
+
void AudioStream::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_length"), &AudioStream::get_length);
ClassDB::bind_method(D_METHOD("is_monophonic"), &AudioStream::is_monophonic);
ClassDB::bind_method(D_METHOD("instantiate_playback"), &AudioStream::instantiate_playback);
+ ClassDB::bind_method(D_METHOD("can_be_sampled"), &AudioStream::can_be_sampled);
+ ClassDB::bind_method(D_METHOD("generate_sample"), &AudioStream::generate_sample);
+ ClassDB::bind_method(D_METHOD("is_meta_stream"), &AudioStream::is_meta_stream);
+
GDVIRTUAL_BIND(_instantiate_playback);
GDVIRTUAL_BIND(_get_stream_name);
GDVIRTUAL_BIND(_get_length);