Post-code review changes.

This commit is contained in:
stechyo 2024-08-26 19:42:42 +01:00
parent e479c238a2
commit c32f72f7fa
3 changed files with 32 additions and 11 deletions

View File

@ -113,6 +113,13 @@
[b]Note:[/b] Can return fewer frames than requested, make sure to use the size of the return value. [b]Note:[/b] Can return fewer frames than requested, make sure to use the size of the return value.
</description> </description>
</method> </method>
<method name="seek">
<return type="void" />
<param index="0" name="time" type="float" default="0.0" />
<description>
Seeks the stream at the given [param time], in seconds.
</description>
</method>
<method name="set_sample_playback" experimental=""> <method name="set_sample_playback" experimental="">
<return type="void" /> <return type="void" />
<param index="0" name="playback_sample" type="AudioSamplePlayback" /> <param index="0" name="playback_sample" type="AudioSamplePlayback" />

View File

@ -76,31 +76,42 @@ int AudioStreamPlayback::mix(AudioFrame *p_buffer, float p_rate_scale, int p_fra
return ret; return ret;
} }
PackedVector2Array AudioStreamPlayback::mix_audio(float p_rate_scale, int p_frames) { PackedVector2Array AudioStreamPlayback::_mix_audio_bind(float p_rate_scale, int p_frames) {
Vector<AudioFrame> frames_in; Vector<AudioFrame> frames = mix_audio(p_rate_scale, p_frames);
frames_in.resize(p_frames);
int frames = mix(frames_in.ptrw(), p_rate_scale, p_frames);
PackedVector2Array res; PackedVector2Array res;
res.resize(frames); res.resize(frames.size());
Vector2 *res_ptrw = res.ptrw(); Vector2 *res_ptrw = res.ptrw();
for (int i = 0; i < frames; i++) { for (int i = 0; i < frames.size(); i++) {
res_ptrw[i] = Vector2(frames_in[i].left, frames_in[i].right); res_ptrw[i] = Vector2(frames[i].left, frames[i].right);
} }
return res; return res;
} }
Vector<AudioFrame> AudioStreamPlayback::mix_audio(float p_rate_scale, int p_frames) {
Vector<AudioFrame> res;
res.resize(p_frames);
int frames = mix(res.ptrw(), p_rate_scale, p_frames);
res.resize(frames);
return res;
}
void AudioStreamPlayback::start_playback(double p_from_pos) { void AudioStreamPlayback::start_playback(double p_from_pos) {
start(); start(p_from_pos);
} }
void AudioStreamPlayback::stop_playback() { void AudioStreamPlayback::stop_playback() {
stop(); stop();
} }
void AudioStreamPlayback::seek_playback(double p_time) {
seek(p_time);
}
void AudioStreamPlayback::tag_used_streams() { void AudioStreamPlayback::tag_used_streams() {
GDVIRTUAL_CALL(_tag_used_streams); GDVIRTUAL_CALL(_tag_used_streams);
} }
@ -133,8 +144,9 @@ void AudioStreamPlayback::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_sample_playback", "playback_sample"), &AudioStreamPlayback::set_sample_playback); 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("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("mix_audio", "rate_scale", "frames"), &AudioStreamPlayback::_mix_audio_bind);
ClassDB::bind_method(D_METHOD("start", "from_pos"), &AudioStreamPlayback::start_playback, DEFVAL(0.0)); ClassDB::bind_method(D_METHOD("start", "from_pos"), &AudioStreamPlayback::start_playback, DEFVAL(0.0));
ClassDB::bind_method(D_METHOD("seek", "time"), &AudioStreamPlayback::seek_playback, DEFVAL(0.0));
ClassDB::bind_method(D_METHOD("stop"), &AudioStreamPlayback::stop_playback); 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_loop_count"), &AudioStreamPlayback::get_loop_count);
ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayback::get_playback_position); ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayback::get_playback_position);

View File

@ -81,6 +81,7 @@ class AudioStreamPlayback : public RefCounted {
protected: protected:
static void _bind_methods(); static void _bind_methods();
PackedVector2Array _mix_audio_bind(float p_rate_scale, int p_frames);
GDVIRTUAL1(_start, double) GDVIRTUAL1(_start, double)
GDVIRTUAL0(_stop) GDVIRTUAL0(_stop)
GDVIRTUAL0RC(bool, _is_playing) GDVIRTUAL0RC(bool, _is_playing)
@ -117,9 +118,10 @@ public:
AudioStreamPlayback(); AudioStreamPlayback();
~AudioStreamPlayback(); ~AudioStreamPlayback();
PackedVector2Array mix_audio(float p_rate_scale, int p_frames); Vector<AudioFrame> mix_audio(float p_rate_scale, int p_frames);
void start_playback(double p_from_pos = 0.0); void start_playback(double p_from_pos = 0.0);
void stop_playback(); void stop_playback();
void seek_playback(double p_time);
}; };
class AudioStreamPlaybackResampled : public AudioStreamPlayback { class AudioStreamPlaybackResampled : public AudioStreamPlayback {