|
@@ -249,6 +249,10 @@ void AudioStreamPlaybackSample::mix(AudioFrame *p_buffer, float p_rate_scale, in
|
|
|
|
|
|
int32_t todo = p_frames;
|
|
|
|
|
|
+ if (base->loop_mode == AudioStreamSample::LOOP_BACKWARD) {
|
|
|
+ sign = -1;
|
|
|
+ }
|
|
|
+
|
|
|
float base_rate = AudioServer::get_singleton()->get_mix_rate();
|
|
|
float srate = base->mix_rate;
|
|
|
srate *= p_rate_scale;
|
|
@@ -621,7 +625,7 @@ void AudioStreamSample::_bind_methods() {
|
|
|
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_data", "get_data");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "format", PROPERTY_HINT_ENUM, "8-Bit,16-Bit,IMA-ADPCM"), "set_format", "get_format");
|
|
|
- ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_mode", PROPERTY_HINT_ENUM, "Disabled,Forward,Ping-Pong"), "set_loop_mode", "get_loop_mode");
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_mode", PROPERTY_HINT_ENUM, "Disabled,Forward,Ping-Pong,Backward"), "set_loop_mode", "get_loop_mode");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_begin"), "set_loop_begin", "get_loop_begin");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_end"), "set_loop_end", "get_loop_end");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_rate"), "set_mix_rate", "get_mix_rate");
|
|
@@ -634,6 +638,7 @@ void AudioStreamSample::_bind_methods() {
|
|
|
BIND_ENUM_CONSTANT(LOOP_DISABLED);
|
|
|
BIND_ENUM_CONSTANT(LOOP_FORWARD);
|
|
|
BIND_ENUM_CONSTANT(LOOP_PING_PONG);
|
|
|
+ BIND_ENUM_CONSTANT(LOOP_BACKWARD);
|
|
|
}
|
|
|
|
|
|
AudioStreamSample::AudioStreamSample() {
|