mirror of
https://github.com/godotengine/godot.git
synced 2024-11-24 21:22:48 +00:00
Merge pull request #86539 from stechyo/gdext/expose-audio-playback-methods
Expose some AudioStreamPlayback methods (namely `mix_audio()`).
This commit is contained in:
commit
8c52533aed
@ -79,12 +79,47 @@
|
|||||||
Overridable method. Called whenever the audio stream is mixed if the playback is active and [method AudioServer.set_enable_tagging_used_audio_streams] has been set to [code]true[/code]. Editor plugins may use this method to "tag" the current position along the audio stream and display it in a preview.
|
Overridable method. Called whenever the audio stream is mixed if the playback is active and [method AudioServer.set_enable_tagging_used_audio_streams] has been set to [code]true[/code]. Editor plugins may use this method to "tag" the current position along the audio stream and display it in a preview.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_loop_count" qualifiers="const">
|
||||||
|
<return type="int" />
|
||||||
|
<description>
|
||||||
|
Returns the number of times the stream has looped.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="get_playback_position" qualifiers="const">
|
||||||
|
<return type="float" />
|
||||||
|
<description>
|
||||||
|
Returns the current position in the stream, in seconds.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="get_sample_playback" qualifiers="const" experimental="">
|
<method name="get_sample_playback" qualifiers="const" experimental="">
|
||||||
<return type="AudioSamplePlayback" />
|
<return type="AudioSamplePlayback" />
|
||||||
<description>
|
<description>
|
||||||
Returns the [AudioSamplePlayback] associated with this [AudioStreamPlayback] for playing back the audio sample of this stream.
|
Returns the [AudioSamplePlayback] associated with this [AudioStreamPlayback] for playing back the audio sample of this stream.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="is_playing" qualifiers="const">
|
||||||
|
<return type="bool" />
|
||||||
|
<description>
|
||||||
|
Returns [code]true[/code] if the stream is playing.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="mix_audio">
|
||||||
|
<return type="PackedVector2Array" />
|
||||||
|
<param index="0" name="rate_scale" type="float" />
|
||||||
|
<param index="1" name="frames" type="int" />
|
||||||
|
<description>
|
||||||
|
Mixes up to [param frames] of audio from the stream from the current position, at a rate of [param rate_scale], advancing the stream.
|
||||||
|
Returns a [PackedVector2Array] where each element holds the left and right channel volume levels of each frame.
|
||||||
|
[b]Note:[/b] Can return fewer frames than requested, make sure to use the size of the return value.
|
||||||
|
</description>
|
||||||
|
</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" />
|
||||||
@ -92,5 +127,18 @@
|
|||||||
Associates [AudioSamplePlayback] to this [AudioStreamPlayback] for playing back the audio sample of this stream.
|
Associates [AudioSamplePlayback] to this [AudioStreamPlayback] for playing back the audio sample of this stream.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="start">
|
||||||
|
<return type="void" />
|
||||||
|
<param index="0" name="from_pos" type="float" default="0.0" />
|
||||||
|
<description>
|
||||||
|
Starts the stream from the given [param from_pos], in seconds.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="stop">
|
||||||
|
<return type="void" />
|
||||||
|
<description>
|
||||||
|
Stops the stream.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
</class>
|
</class>
|
||||||
|
@ -76,6 +76,42 @@ int AudioStreamPlayback::mix(AudioFrame *p_buffer, float p_rate_scale, int p_fra
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PackedVector2Array AudioStreamPlayback::_mix_audio_bind(float p_rate_scale, int p_frames) {
|
||||||
|
Vector<AudioFrame> frames = mix_audio(p_rate_scale, p_frames);
|
||||||
|
|
||||||
|
PackedVector2Array res;
|
||||||
|
res.resize(frames.size());
|
||||||
|
|
||||||
|
Vector2 *res_ptrw = res.ptrw();
|
||||||
|
for (int i = 0; i < frames.size(); i++) {
|
||||||
|
res_ptrw[i] = Vector2(frames[i].left, frames[i].right);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
start(p_from_pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioStreamPlayback::stop_playback() {
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
@ -108,6 +144,13 @@ 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_bind);
|
||||||
|
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("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() {}
|
AudioStreamPlayback::AudioStreamPlayback() {}
|
||||||
|
@ -83,6 +83,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)
|
||||||
@ -118,6 +119,11 @@ public:
|
|||||||
|
|
||||||
AudioStreamPlayback();
|
AudioStreamPlayback();
|
||||||
~AudioStreamPlayback();
|
~AudioStreamPlayback();
|
||||||
|
|
||||||
|
Vector<AudioFrame> mix_audio(float p_rate_scale, int p_frames);
|
||||||
|
void start_playback(double p_from_pos = 0.0);
|
||||||
|
void stop_playback();
|
||||||
|
void seek_playback(double p_time);
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioStreamPlaybackResampled : public AudioStreamPlayback {
|
class AudioStreamPlaybackResampled : public AudioStreamPlayback {
|
||||||
|
Loading…
Reference in New Issue
Block a user