Require AudioStream::mix to return the number of frames successfully mixed
This commit is contained in:
@ -51,7 +51,7 @@ protected:
|
||||
GDVIRTUAL0RC(int, _get_loop_count)
|
||||
GDVIRTUAL0RC(float, _get_playback_position)
|
||||
GDVIRTUAL1(_seek, float)
|
||||
GDVIRTUAL3(_mix, GDNativePtr<AudioFrame>, float, int)
|
||||
GDVIRTUAL3R(int, _mix, GDNativePtr<AudioFrame>, float, int)
|
||||
public:
|
||||
virtual void start(float p_from_pos = 0.0);
|
||||
virtual void stop();
|
||||
@ -62,7 +62,7 @@ public:
|
||||
virtual float get_playback_position() const;
|
||||
virtual void seek(float p_time);
|
||||
|
||||
virtual void mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames);
|
||||
virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames);
|
||||
};
|
||||
|
||||
class AudioStreamPlaybackResampled : public AudioStreamPlayback {
|
||||
@ -77,15 +77,17 @@ class AudioStreamPlaybackResampled : public AudioStreamPlayback {
|
||||
};
|
||||
|
||||
AudioFrame internal_buffer[INTERNAL_BUFFER_LEN + CUBIC_INTERP_HISTORY];
|
||||
unsigned int internal_buffer_end = -1;
|
||||
uint64_t mix_offset;
|
||||
|
||||
protected:
|
||||
void _begin_resample();
|
||||
virtual void _mix_internal(AudioFrame *p_buffer, int p_frames) = 0;
|
||||
// Returns the number of frames that were mixed.
|
||||
virtual int _mix_internal(AudioFrame *p_buffer, int p_frames) = 0;
|
||||
virtual float get_stream_sampling_rate() = 0;
|
||||
|
||||
public:
|
||||
virtual void mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override;
|
||||
virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override;
|
||||
|
||||
AudioStreamPlaybackResampled() { mix_offset = 0; }
|
||||
};
|
||||
@ -140,11 +142,11 @@ class AudioStreamPlaybackMicrophone : public AudioStreamPlaybackResampled {
|
||||
Ref<AudioStreamMicrophone> microphone;
|
||||
|
||||
protected:
|
||||
virtual void _mix_internal(AudioFrame *p_buffer, int p_frames) override;
|
||||
virtual int _mix_internal(AudioFrame *p_buffer, int p_frames) override;
|
||||
virtual float get_stream_sampling_rate() override;
|
||||
|
||||
public:
|
||||
virtual void mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override;
|
||||
virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override;
|
||||
|
||||
virtual void start(float p_from_pos = 0.0) override;
|
||||
virtual void stop() override;
|
||||
@ -208,7 +210,7 @@ public:
|
||||
virtual float get_playback_position() const override;
|
||||
virtual void seek(float p_time) override;
|
||||
|
||||
virtual void mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override;
|
||||
virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override;
|
||||
|
||||
~AudioStreamPlaybackRandomPitch();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user