summaryrefslogtreecommitdiffstats
path: root/servers
diff options
context:
space:
mode:
authorstechyo <stechyo@mailbox.org>2023-12-23 17:12:29 +0000
committerstechyo <stechyo@mailbox.org>2024-08-15 14:10:18 +0100
commite479c238a227520fb82eb001b5b26b4f8c2675dd (patch)
tree81befb1b587e686b6a1e9af9ceb3cc7ac0622741 /servers
parent77dcf97d82cbfe4e4615475fa52ca03da645dbd8 (diff)
downloadredot-engine-e479c238a227520fb82eb001b5b26b4f8c2675dd.tar.gz
Expose some AudioStreamPlayback methods.
Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
Diffstat (limited to 'servers')
-rw-r--r--servers/audio/audio_stream.cpp31
-rw-r--r--servers/audio/audio_stream.h4
2 files changed, 35 insertions, 0 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 7ab150c141..4921299ef1 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -76,6 +76,31 @@ int AudioStreamPlayback::mix(AudioFrame *p_buffer, float p_rate_scale, int p_fra
return ret;
}
+PackedVector2Array AudioStreamPlayback::mix_audio(float p_rate_scale, int p_frames) {
+ Vector<AudioFrame> frames_in;
+ frames_in.resize(p_frames);
+
+ int frames = mix(frames_in.ptrw(), p_rate_scale, p_frames);
+
+ PackedVector2Array res;
+ res.resize(frames);
+
+ Vector2 *res_ptrw = res.ptrw();
+ for (int i = 0; i < frames; i++) {
+ res_ptrw[i] = Vector2(frames_in[i].left, frames_in[i].right);
+ }
+
+ return res;
+}
+
+void AudioStreamPlayback::start_playback(double p_from_pos) {
+ start();
+}
+
+void AudioStreamPlayback::stop_playback() {
+ stop();
+}
+
void AudioStreamPlayback::tag_used_streams() {
GDVIRTUAL_CALL(_tag_used_streams);
}
@@ -108,6 +133,12 @@ void AudioStreamPlayback::_bind_methods() {
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);
+ ClassDB::bind_method(D_METHOD("mix_audio", "rate_scale", "frames"), &AudioStreamPlayback::mix_audio);
+ ClassDB::bind_method(D_METHOD("start", "from_pos"), &AudioStreamPlayback::start_playback, DEFVAL(0.0));
+ ClassDB::bind_method(D_METHOD("stop"), &AudioStreamPlayback::stop_playback);
+ ClassDB::bind_method(D_METHOD("get_loop_count"), &AudioStreamPlayback::get_loop_count);
+ ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayback::get_playback_position);
+ ClassDB::bind_method(D_METHOD("is_playing"), &AudioStreamPlayback::is_playing);
}
AudioStreamPlayback::AudioStreamPlayback() {}
diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h
index 0ca4777d5c..31fd94038e 100644
--- a/servers/audio/audio_stream.h
+++ b/servers/audio/audio_stream.h
@@ -116,6 +116,10 @@ public:
AudioStreamPlayback();
~AudioStreamPlayback();
+
+ PackedVector2Array mix_audio(float p_rate_scale, int p_frames);
+ void start_playback(double p_from_pos = 0.0);
+ void stop_playback();
};
class AudioStreamPlaybackResampled : public AudioStreamPlayback {