Skip to content

Commit e4c9950

Browse files
committed
Merge pull request #103742 from RoyBerardo/random-pitch-semitones
Change the random pitch on the audio stream randomizer to be in semitones, not a frequency multiplier.
2 parents fd89a17 + 2ac01c1 commit e4c9950

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

doc/classes/AudioStreamRandomizer.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@
6969
Controls how this AudioStreamRandomizer picks which AudioStream to play next.
7070
</member>
7171
<member name="random_pitch" type="float" setter="set_random_pitch" getter="get_random_pitch" default="1.0">
72-
The intensity of random pitch variation. A value of 1 means no variation.
72+
The largest possible frequency multiplier of the random pitch variation. A value of [code]1.0[/code] means no variation.
73+
[b]Note:[/b] Setting this property also sets [member random_pitch_semitones].
74+
</member>
75+
<member name="random_pitch_semitones" type="float" setter="set_random_pitch_semitones" getter="get_random_pitch_semitones" default="0.0">
76+
The largest possible distance, in semitones, of the random pitch variation. A value of [code]0.0[/code] means no variation.
77+
[b]Note:[/b] Setting this property also sets [member random_pitch].
7378
</member>
7479
<member name="random_volume_offset_db" type="float" setter="set_random_volume_offset_db" getter="get_random_volume_offset_db" default="0.0">
7580
The intensity of random volume variation. A value of 0 means no variation.

servers/audio/audio_stream.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,14 @@ float AudioStreamRandomizer::get_random_pitch() const {
568568
return random_pitch_scale;
569569
}
570570

571+
void AudioStreamRandomizer::set_random_pitch_semitones(float p_semitones) {
572+
random_pitch_scale = powf(2, p_semitones * 0.08333333f);
573+
}
574+
575+
float AudioStreamRandomizer::get_random_pitch_semitones() const {
576+
return 12.0f * log2f(MAX(1.0f, random_pitch_scale));
577+
}
578+
571579
void AudioStreamRandomizer::set_random_volume_offset_db(float p_volume_offset_db) {
572580
if (p_volume_offset_db < 0) {
573581
p_volume_offset_db = 0;
@@ -752,14 +760,18 @@ void AudioStreamRandomizer::_bind_methods() {
752760
ClassDB::bind_method(D_METHOD("set_random_pitch", "scale"), &AudioStreamRandomizer::set_random_pitch);
753761
ClassDB::bind_method(D_METHOD("get_random_pitch"), &AudioStreamRandomizer::get_random_pitch);
754762

763+
ClassDB::bind_method(D_METHOD("set_random_pitch_semitones", "semitones"), &AudioStreamRandomizer::set_random_pitch_semitones);
764+
ClassDB::bind_method(D_METHOD("get_random_pitch_semitones"), &AudioStreamRandomizer::get_random_pitch_semitones);
765+
755766
ClassDB::bind_method(D_METHOD("set_random_volume_offset_db", "db_offset"), &AudioStreamRandomizer::set_random_volume_offset_db);
756767
ClassDB::bind_method(D_METHOD("get_random_volume_offset_db"), &AudioStreamRandomizer::get_random_volume_offset_db);
757768

758769
ClassDB::bind_method(D_METHOD("set_playback_mode", "mode"), &AudioStreamRandomizer::set_playback_mode);
759770
ClassDB::bind_method(D_METHOD("get_playback_mode"), &AudioStreamRandomizer::get_playback_mode);
760771

761772
ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_mode", PROPERTY_HINT_ENUM, "Random (Avoid Repeats),Random,Sequential"), "set_playback_mode", "get_playback_mode");
762-
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_pitch", PROPERTY_HINT_RANGE, "1,16,0.01"), "set_random_pitch", "get_random_pitch");
773+
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_pitch", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_random_pitch", "get_random_pitch");
774+
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_pitch_semitones", PROPERTY_HINT_RANGE, "0,24,0.001,or_greater,suffix:Semitones", PROPERTY_USAGE_EDITOR), "set_random_pitch_semitones", "get_random_pitch_semitones");
763775
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_volume_offset_db", PROPERTY_HINT_RANGE, "0,40,0.01,suffix:dB"), "set_random_volume_offset_db", "get_random_volume_offset_db");
764776
ADD_ARRAY("streams", "stream_");
765777
ADD_PROPERTY(PropertyInfo(Variant::INT, "streams_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_streams_count", "get_streams_count");

servers/audio/audio_stream.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,9 @@ class AudioStreamRandomizer : public AudioStream {
325325
void set_streams_count(int p_count);
326326
int get_streams_count() const;
327327

328+
void set_random_pitch_semitones(float p_pitch_semitones);
329+
float get_random_pitch_semitones() const;
330+
328331
void set_random_pitch(float p_pitch_scale);
329332
float get_random_pitch() const;
330333

0 commit comments

Comments
 (0)