diff --git a/effects/internal/audionoiseeffect.cpp b/effects/internal/audionoiseeffect.cpp
index d43fd5545..26671f253 100644
--- a/effects/internal/audionoiseeffect.cpp
+++ b/effects/internal/audionoiseeffect.cpp
@@ -1,64 +1,60 @@
-/***
-
- Olive - Non-Linear Video Editor
- Copyright (C) 2019 Olive Team
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-***/
-
-#include "audionoiseeffect.h"
-
-#include
-#include
-
-AudioNoiseEffect::AudioNoiseEffect(Clip* c, const EffectMeta *em) : Effect(c, em) {
- amount_val = add_row(tr("Amount"))->add_field(EFFECT_FIELD_DOUBLE, "amount");
- amount_val->set_double_minimum_value(0);
- amount_val->set_double_maximum_value(100);
- amount_val->set_double_default_value(20);
-
- mix_val = add_row(tr("Mix"))->add_field(EFFECT_FIELD_BOOL, "mix");
- mix_val->set_bool_value(true);
-
- srand(QDateTime::currentMSecsSinceEpoch());
-}
-
-void AudioNoiseEffect::process_audio(double timecode_start, double timecode_end, quint8 *samples, int nb_bytes, int) {
- double interval = (timecode_end - timecode_start)/nb_bytes;
- for (int i=0;iget_double_value(timecode, true)*0.01 );
- left_noise_sample *= vol;
- right_noise_sample *= vol;
-
- // mix with source audio
- if (mix_val->get_bool_value(timecode, true)) {
- qint16 left_sample = (qint16) (((samples[i+1] & 0xFF) << 8) | (samples[i] & 0xFF));
- qint16 right_sample = (qint16) (((samples[i+3] & 0xFF) << 8) | (samples[i+2] & 0xFF));
- left_noise_sample = mix_audio_sample(left_noise_sample, left_sample);
- right_noise_sample = mix_audio_sample(right_noise_sample, right_sample);
- }
-
- samples[i+3] = (quint8) (right_noise_sample >> 8);
- samples[i+2] = (quint8) right_noise_sample;
- samples[i+1] = (quint8) (left_noise_sample >> 8);
- samples[i] = (quint8) left_noise_sample;
- }
-}
+/*
+ * Olive. Olive is a free non-linear video editor for Windows, macOS, and Linux.
+ * Copyright (C) 2018 {{ organization }}
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ *along with this program. If not, see .
+ */
+#include "audionoiseeffect.h"
+
+#include
+#include
+
+AudioNoiseEffect::AudioNoiseEffect(Clip* c, const EffectMeta *em) : Effect(c, em) {
+ amount_val = add_row(tr("Amount"))->add_field(EFFECT_FIELD_DOUBLE, "amount");
+ amount_val->set_double_minimum_value(0);
+ amount_val->set_double_maximum_value(100);
+ amount_val->set_double_default_value(20);
+
+ mix_val = add_row(tr("Mix"))->add_field(EFFECT_FIELD_BOOL, "mix");
+ mix_val->set_bool_value(true);
+
+}
+
+void AudioNoiseEffect::process_audio(double timecode_start, double timecode_end, quint8 *samples, int nb_bytes, int) {
+ double interval = (timecode_end - timecode_start)/nb_bytes;
+ for (int i=0;irandomNumber();
+ qint16 right_noise_sample = this->randomNumber();
+
+ // set noise volume
+ double vol = log_volume( amount_val->get_double_value(timecode, true)*0.01 );
+ left_noise_sample *= vol;
+ right_noise_sample *= vol;
+
+ // mix with source audio
+ if (mix_val->get_bool_value(timecode, true)) {
+ qint16 left_sample = static_cast (((samples[i+1] & 0xFF) << 8) | (samples[i] & 0xFF));
+ qint16 right_sample = static_cast (((samples[i+3] & 0xFF) << 8) | (samples[i+2] & 0xFF));
+ left_noise_sample = mix_audio_sample(left_noise_sample, left_sample);
+ right_noise_sample = mix_audio_sample(right_noise_sample, right_sample);
+ }
+
+ samples[i+3] = static_cast (right_noise_sample >> 8);
+ samples[i+2] = static_cast (right_noise_sample);
+ samples[i+1] = static_cast (left_noise_sample >> 8);
+ samples[i] = static_cast (left_noise_sample);
+ }
+}
diff --git a/effects/internal/shakeeffect.cpp b/effects/internal/shakeeffect.cpp
index 89bb39ecb..a8d5f53f7 100644
--- a/effects/internal/shakeeffect.cpp
+++ b/effects/internal/shakeeffect.cpp
@@ -34,63 +34,62 @@
#include "debug.h"
ShakeEffect::ShakeEffect(Clip* c, const EffectMeta *em) : Effect(c, em) {
- enable_coords = true;
+ enable_coords = true;
EffectRow* intensity_row = add_row(tr("Intensity"));
- intensity_val = intensity_row->add_field(EFFECT_FIELD_DOUBLE, "intensity");
- intensity_val->set_double_minimum_value(0);
+ intensity_val = intensity_row->add_field(EFFECT_FIELD_DOUBLE, "intensity");
+ intensity_val->set_double_minimum_value(0);
EffectRow* rotation_row = add_row(tr("Rotation"));
- rotation_val = rotation_row->add_field(EFFECT_FIELD_DOUBLE, "rotation");
- rotation_val->set_double_minimum_value(0);
+ rotation_val = rotation_row->add_field(EFFECT_FIELD_DOUBLE, "rotation");
+ rotation_val->set_double_minimum_value(0);
EffectRow* frequency_row = add_row(tr("Frequency"));
- frequency_val = frequency_row->add_field(EFFECT_FIELD_DOUBLE, "frequency");
- frequency_val->set_double_minimum_value(0);
+ frequency_val = frequency_row->add_field(EFFECT_FIELD_DOUBLE, "frequency");
+ frequency_val->set_double_minimum_value(0);
- // set defaults
- intensity_val->set_double_default_value(25);
- rotation_val->set_double_default_value(10);
- frequency_val->set_double_default_value(5);
+ // set defaults
+ intensity_val->set_double_default_value(25);
+ rotation_val->set_double_default_value(10);
+ frequency_val->set_double_default_value(5);
- srand(QDateTime::currentMSecsSinceEpoch());
-
- for (int i=0;i::max();
+ for (int i=0;i(this->randomNumber()) / limit;
+ }
}
void ShakeEffect::process_coords(double timecode, GLTextureCoords& coords, int) {
- int lim = RANDOM_VAL_SIZE/6;
+ int lim = RANDOM_VAL_SIZE/6;
- double multiplier = intensity_val->get_double_value(timecode)/lim;
- double rotmult = rotation_val->get_double_value(timecode)/lim/10;
- double x = timecode * frequency_val->get_double_value(timecode);
+ double multiplier = intensity_val->get_double_value(timecode)/lim;
+ double rotmult = rotation_val->get_double_value(timecode)/lim/10;
+ double x = timecode * frequency_val->get_double_value(timecode);
- double xoff = 0;
- double yoff = 0;
- double rotoff = 0;
+ double xoff = 0;
+ double yoff = 0;
+ double rotoff = 0;
- for (int i=0;i
#include
#include
+#include
#include "ui/collapsiblewidget.h"
#include "ui/checkboxex.h"
@@ -227,6 +228,15 @@ public:
void gizmo_world_to_screen();
bool are_gizmos_enabled();
+ template
+ T randomNumber()
+ {
+ static std::random_device device;
+ static std::mt19937 generator(device());
+ static std::uniform_int_distribution<> distribution(std::numeric_limits::min(), std::numeric_limits::max());
+ return distribution(generator);
+ }
+
static EffectPtr Create(Clip *c, const EffectMeta *em);
static const EffectMeta* GetInternalMeta(int internal_id, int type);
public slots: