diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2024-06-19 07:59:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 07:59:07 +0200 |
commit | 19bf77f66635c53cc28d54784a9a2333f4a8d289 (patch) | |
tree | 3ef5548ade13b647bc32dd02d4506d5cf66aaebe /scene/audio/audio_stream_player.cpp | |
parent | 2b11d0ca966e93c621dccc57951ccbe2a0133251 (diff) | |
parent | 52fa4f05f3945fdf511c249adede9b6d07c51beb (diff) | |
download | redot-engine-19bf77f66635c53cc28d54784a9a2333f4a8d289.tar.gz |
Merge pull request #91382 from adamscott/sample-player
Add sample playback support
Diffstat (limited to 'scene/audio/audio_stream_player.cpp')
-rw-r--r-- | scene/audio/audio_stream_player.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/scene/audio/audio_stream_player.cpp b/scene/audio/audio_stream_player.cpp index 0c2bd64e84..e90c1aa245 100644 --- a/scene/audio/audio_stream_player.cpp +++ b/scene/audio/audio_stream_player.cpp @@ -95,6 +95,16 @@ void AudioStreamPlayer::play(float p_from_pos) { } AudioServer::get_singleton()->start_playback_stream(stream_playback, internal->bus, _get_volume_vector(), p_from_pos, internal->pitch_scale); internal->ensure_playback_limit(); + + // Sample handling. + if (stream_playback->get_is_sample() && stream_playback->get_sample_playback().is_valid()) { + Ref<AudioSamplePlayback> sample_playback = stream_playback->get_sample_playback(); + sample_playback->offset = p_from_pos; + sample_playback->volume_vector = _get_volume_vector(); + sample_playback->bus = get_bus(); + + AudioServer::get_singleton()->start_sample_playback(sample_playback); + } } void AudioStreamPlayer::seek(float p_seconds) { @@ -205,6 +215,14 @@ Ref<AudioStreamPlayback> AudioStreamPlayer::get_stream_playback() { return internal->get_stream_playback(); } +AudioServer::PlaybackType AudioStreamPlayer::get_playback_type() const { + return internal->get_playback_type(); +} + +void AudioStreamPlayer::set_playback_type(AudioServer::PlaybackType p_playback_type) { + internal->set_playback_type(p_playback_type); +} + void AudioStreamPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer::set_stream); ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer::get_stream); @@ -243,6 +261,9 @@ void AudioStreamPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("has_stream_playback"), &AudioStreamPlayer::has_stream_playback); ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer::get_stream_playback); + ClassDB::bind_method(D_METHOD("set_playback_type", "playback_type"), &AudioStreamPlayer::set_playback_type); + ClassDB::bind_method(D_METHOD("get_playback_type"), &AudioStreamPlayer::get_playback_type); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_db", PROPERTY_HINT_RANGE, "-80,24,suffix:dB"), "set_volume_db", "get_volume_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pitch_scale", PROPERTY_HINT_RANGE, "0.01,4,0.01,or_greater"), "set_pitch_scale", "get_pitch_scale"); @@ -252,6 +273,7 @@ void AudioStreamPlayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_target", PROPERTY_HINT_ENUM, "Stereo,Surround,Center"), "set_mix_target", "get_mix_target"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_type", PROPERTY_HINT_ENUM, "Default,Stream,Sample"), "set_playback_type", "get_playback_type"); ADD_SIGNAL(MethodInfo("finished")); |