summaryrefslogtreecommitdiffstats
path: root/editor/editor_audio_buses.h
diff options
context:
space:
mode:
authorEoin O'Neill <eoinoneill1991@gmail.com>2019-02-10 21:50:55 -0800
committerEoin O'Neill <eoinoneill1991@gmail.com>2019-04-06 19:36:24 -0700
commitb526060d74a602139494047298658ded797e4ce8 (patch)
tree5425ec912b86e95e72d457652c5761d50a369ee0 /editor/editor_audio_buses.h
parent146be33cdecb1190a4b13cee2463a676fe7fd42d (diff)
downloadredot-engine-b526060d74a602139494047298658ded797e4ce8.tar.gz
New Nonlinear Audio Bus Mixer
This patch changes the audio mixer faders to use a non-linear algorithm for volume control. The intention is to make Godot's audio faders be more like those found in professional audio equipment and programs. It is an exponential equation which intends to counter-act the logarithmic nature of human hearing. The effect of this is a more usable audio mixer with more emphasis on the values that make the most difference to the mix. It also changes the audio level notch widget to be less static and thus supports changing the scaling factor of the audio faders.
Diffstat (limited to 'editor/editor_audio_buses.h')
-rw-r--r--editor/editor_audio_buses.h57
1 files changed, 55 insertions, 2 deletions
diff --git a/editor/editor_audio_buses.h b/editor/editor_audio_buses.h
index 37ff9b28dc..50f2101fd8 100644
--- a/editor/editor_audio_buses.h
+++ b/editor/editor_audio_buses.h
@@ -35,6 +35,7 @@
#include "editor_plugin.h"
#include "scene/gui/box_container.h"
#include "scene/gui/button.h"
+#include "scene/gui/control.h"
#include "scene/gui/line_edit.h"
#include "scene/gui/menu_button.h"
#include "scene/gui/option_button.h"
@@ -71,13 +72,17 @@ class EditorAudioBus : public PanelContainer {
TextureProgress *vu_r;
} channel[CHANNELS_MAX];
- TextureRect *scale;
+ class EditorAudioMeterNotches *scale;
OptionButton *send;
PopupMenu *effect_options;
PopupMenu *bus_popup;
PopupMenu *delete_effect_popup;
+ Panel *audio_value_preview_box;
+ Label *audio_value_preview_label;
+ Timer *preview_timer;
+
Button *solo;
Button *mute;
Button *bypass;
@@ -93,7 +98,11 @@ class EditorAudioBus : public PanelContainer {
void _name_changed(const String &p_new_name);
void _name_focus_exit() { _name_changed(track_name->get_text()); }
- void _volume_db_changed(float p_db);
+ void _volume_changed(float p_normalized);
+ float _normalized_volume_to_scaled_db(float normalized);
+ float _scaled_db_to_normalized_volume(float db);
+ void _show_value(float slider_value);
+ void _hide_value_preview();
void _solo_toggled();
void _mute_toggled();
void _bypass_toggled();
@@ -200,6 +209,50 @@ public:
EditorAudioBuses();
};
+class EditorAudioMeterNotches : public Control {
+ GDCLASS(EditorAudioMeterNotches, Control);
+
+private:
+ struct AudioNotch {
+ float relative_position;
+ float db_value;
+ bool render_db_value;
+
+ _FORCE_INLINE_ AudioNotch(float r_pos, float db_v, bool rndr_val) {
+ relative_position = r_pos;
+ db_value = db_v;
+ render_db_value = rndr_val;
+ }
+
+ _FORCE_INLINE_ AudioNotch(const AudioNotch &n) {
+ relative_position = n.relative_position;
+ db_value = n.db_value;
+ render_db_value = n.render_db_value;
+ }
+
+ _FORCE_INLINE_ AudioNotch() {}
+ };
+
+ List<AudioNotch> notches;
+
+public:
+ float line_length;
+ float label_space;
+ float btm_padding;
+ float top_padding;
+ Color notch_color;
+
+ void add_notch(float normalized_offset, float db_value, bool render_value = false);
+
+private:
+ static void _bind_methods();
+ void _notification(int p_what);
+ void _draw_audio_notches();
+
+public:
+ EditorAudioMeterNotches();
+};
+
class AudioBusesEditorPlugin : public EditorPlugin {
GDCLASS(AudioBusesEditorPlugin, EditorPlugin);