summaryrefslogtreecommitdiffstats
path: root/servers/audio/audio_stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'servers/audio/audio_stream.h')
-rw-r--r--servers/audio/audio_stream.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h
index aa1ad4cc3a..0ca4777d5c 100644
--- a/servers/audio/audio_stream.h
+++ b/servers/audio/audio_stream.h
@@ -43,6 +43,39 @@
class AudioStream;
+class AudioSamplePlayback : public RefCounted {
+ GDCLASS(AudioSamplePlayback, RefCounted);
+
+public:
+ Ref<AudioStream> stream;
+
+ float offset = 0.0f;
+ Vector<AudioFrame> volume_vector;
+ StringName bus;
+};
+
+class AudioSample : public RefCounted {
+ GDCLASS(AudioSample, RefCounted)
+
+public:
+ enum LoopMode {
+ LOOP_DISABLED,
+ LOOP_FORWARD,
+ LOOP_PINGPONG,
+ LOOP_BACKWARD,
+ };
+
+ Ref<AudioStream> stream;
+ Vector<AudioFrame> data;
+ int num_channels = 1;
+ int sample_rate = 44100;
+ LoopMode loop_mode = LOOP_DISABLED;
+ int loop_begin = 0;
+ int loop_end = 0;
+};
+
+///////////
+
class AudioStreamPlayback : public RefCounted {
GDCLASS(AudioStreamPlayback, RefCounted);
@@ -75,6 +108,14 @@ public:
virtual Variant get_parameter(const StringName &p_name) const;
virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames);
+
+ virtual void set_is_sample(bool p_is_sample) {}
+ virtual bool get_is_sample() const { return false; }
+ virtual Ref<AudioSamplePlayback> get_sample_playback() const;
+ virtual void set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) {}
+
+ AudioStreamPlayback();
+ ~AudioStreamPlayback();
};
class AudioStreamPlaybackResampled : public AudioStreamPlayback {
@@ -161,6 +202,11 @@ public:
};
virtual void get_parameter_list(List<Parameter> *r_parameters);
+
+ virtual bool can_be_sampled() const { return false; }
+ virtual Ref<AudioSample> generate_sample() const;
+
+ virtual bool is_meta_stream() const { return false; }
};
// Microphone
@@ -292,6 +338,8 @@ public:
virtual double get_length() const override; //if supported, otherwise return 0
virtual bool is_monophonic() const override;
+ virtual bool is_meta_stream() const override { return true; }
+
AudioStreamRandomizer();
};