Commit before damnger
This commit is contained in:
parent
fe1eb58626
commit
14f0200b50
101 changed files with 8087 additions and 15 deletions
116
AudioMixerVisualizer/AudioDebugVisualizer.tscn
Normal file
116
AudioMixerVisualizer/AudioDebugVisualizer.tscn
Normal file
|
@ -0,0 +1,116 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://cpp7g0af4m0ed"]
|
||||
|
||||
[ext_resource type="Script" path="res://AudioMixerVisualizer/AudioMixerDebugVisualization.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://AudioMixerVisualizer/AudioMixerMeterDrawer.gd" id="2"]
|
||||
[ext_resource type="Script" path="res://AudioMixerVisualizer/AudioMixerVolumeDrawer.gd" id="3"]
|
||||
[ext_resource type="FontFile" uid="uid://yewopnpud14o" path="res://AudioMixerVisualizer/AudioMixerDebugFont.tres" id="4"]
|
||||
|
||||
[node name="AudioDebugVisualizer" type="CanvasLayer"]
|
||||
process_mode = 3
|
||||
layer = 128
|
||||
|
||||
[node name="Mixer" type="Control" parent="."]
|
||||
custom_minimum_size = Vector2(2.08165e-12, 100)
|
||||
layout_mode = 3
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -500.0
|
||||
offset_top = -140.0
|
||||
offset_right = 500.0
|
||||
offset_bottom = -10.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1")
|
||||
font_fx = ExtResource("4")
|
||||
|
||||
[node name="Container" type="HBoxContainer" parent="Mixer"]
|
||||
layout_mode = 0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="Bus" type="PanelContainer" parent="Mixer/Container"]
|
||||
custom_minimum_size = Vector2(60, 0)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Mixer/Container/Bus"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="label_name" type="Label" parent="Mixer/Container/Bus/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Bus"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
clip_text = true
|
||||
|
||||
[node name="label_peak" type="Label" parent="Mixer/Container/Bus/VBox"]
|
||||
modulate = Color(0.521569, 0.521569, 0.521569, 1)
|
||||
layout_mode = 2
|
||||
text = "-0.1"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="HBox" type="HBoxContainer" parent="Mixer/Container/Bus/VBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="Meter" type="Panel" parent="Mixer/Container/Bus/VBox/HBox"]
|
||||
custom_minimum_size = Vector2(20, 0)
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="HBox" type="HBoxContainer" parent="Mixer/Container/Bus/VBox/HBox/Meter"]
|
||||
clip_contents = true
|
||||
layout_mode = 0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 1.0
|
||||
offset_top = 1.0
|
||||
offset_right = -1.0
|
||||
offset_bottom = -1.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="fill_left" type="ColorRect" parent="Mixer/Container/Bus/VBox/HBox/Meter/HBox"]
|
||||
modulate = Color(0.0784314, 0.737255, 0.309804, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="fill_right" type="ColorRect" parent="Mixer/Container/Bus/VBox/HBox/Meter/HBox"]
|
||||
modulate = Color(0.0784314, 0.737255, 0.309804, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="Volume" type="Panel" parent="Mixer/Container/Bus/VBox/HBox"]
|
||||
custom_minimum_size = Vector2(5, 0)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
script = ExtResource("3")
|
||||
|
||||
[node name="VBox_fx" type="VBoxContainer" parent="Mixer/Container/Bus/VBox/HBox"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[connection signal="mouse_entered" from="Mixer" to="Mixer" method="_on_mouse_entered"]
|
||||
[connection signal="mouse_exited" from="Mixer" to="Mixer" method="_on_mouse_exited"]
|
71
AudioMixerVisualizer/AudioMixerDebugFont.tres
Normal file
71
AudioMixerVisualizer/AudioMixerDebugFont.tres
Normal file
File diff suppressed because one or more lines are too long
162
AudioMixerVisualizer/AudioMixerDebugVisualization.gd
Normal file
162
AudioMixerVisualizer/AudioMixerDebugVisualization.gd
Normal file
|
@ -0,0 +1,162 @@
|
|||
extends Control
|
||||
|
||||
@export var font_fx : FontFile
|
||||
|
||||
class bus:
|
||||
var index
|
||||
var ui : Control
|
||||
var max_peak : float
|
||||
var fx : Array
|
||||
|
||||
var timer
|
||||
|
||||
func _init(bus_index, _ui, _fx):
|
||||
timer = 0
|
||||
max_peak = -200
|
||||
self.index = bus_index
|
||||
self.ui = _ui
|
||||
self.fx = _fx
|
||||
|
||||
func update(delta, peak):
|
||||
if peak > max_peak:
|
||||
max_peak = peak
|
||||
timer = 0
|
||||
|
||||
timer += delta
|
||||
if timer > 3:
|
||||
max_peak = peak
|
||||
|
||||
@onready var container = $Container
|
||||
@onready var bus_template = $Container/Bus
|
||||
var buses : Array
|
||||
|
||||
func _ready():
|
||||
# Add bus panels
|
||||
for i in AudioServer.bus_count:
|
||||
var bus_panel = bus_template.duplicate()
|
||||
container.add_child(bus_panel)
|
||||
var label : Label = bus_panel.get_node("VBox/label_name")
|
||||
label.text = AudioServer.get_bus_name(i)
|
||||
|
||||
# Add effect labels
|
||||
var vbox = bus_panel.get_node("VBox/HBox/VBox_fx")
|
||||
var fx = Array()
|
||||
for n in AudioServer.get_bus_effect_count(i):
|
||||
var effect : AudioEffect = AudioServer.get_bus_effect(i, n)
|
||||
fx.append(effect)
|
||||
|
||||
var fx_label = Label.new()
|
||||
fx_label.text = effect.resource_name
|
||||
fx_label.add_theme_font_override("font", font_fx)
|
||||
vbox.add_child(fx_label)
|
||||
|
||||
vbox.visible = true
|
||||
|
||||
vbox.set_anchors_preset(Control.PRESET_TOP_LEFT)
|
||||
vbox.pivot_offset = Vector2(0, 300)
|
||||
|
||||
var b = bus.new(i, bus_panel, fx)
|
||||
bus_panel.get_node("VBox/HBox/Meter").assign_bus(b)
|
||||
bus_panel.get_node("VBox/HBox/Volume").assign_bus(b)
|
||||
buses.append(b)
|
||||
|
||||
bus_template.queue_free()
|
||||
|
||||
func _process(delta):
|
||||
var mouse_pos = get_viewport().get_mouse_position()
|
||||
if mouse_pos.y > get_viewport_rect().size.y - 150:
|
||||
_hide()
|
||||
else:
|
||||
_show()
|
||||
|
||||
# Update bus panels
|
||||
for b in buses:
|
||||
var peak_l = AudioServer.get_bus_peak_volume_left_db(b.index, 0)
|
||||
var peak_r = AudioServer.get_bus_peak_volume_right_db(b.index, 0)
|
||||
var peak_max = max(peak_l, peak_r)
|
||||
|
||||
b.update(delta, peak_max)
|
||||
|
||||
# Mute/Solo
|
||||
var label_name : Label = b.ui.get_node("VBox/label_name")
|
||||
label_name.modulate = Color.WHITE
|
||||
if AudioServer.is_bus_mute(b.index):
|
||||
label_name.modulate = Color.CRIMSON
|
||||
if AudioServer.is_bus_solo(b.index):
|
||||
label_name.modulate = Color.YELLOW
|
||||
|
||||
# Meter fill
|
||||
var fill : ColorRect = b.ui.get_node("VBox/HBox/Meter/HBox/fill_left")
|
||||
fill.anchor_top = 1.0 - normalize_peak(peak_l)
|
||||
fill = b.ui.get_node("VBox/HBox/Meter/HBox/fill_right")
|
||||
fill.anchor_top = 1.0 - normalize_peak(peak_r)
|
||||
|
||||
# Peak label
|
||||
var label_peak : Label = b.ui.get_node("VBox/label_peak")
|
||||
var peak_text = ""
|
||||
if b.max_peak > -200:
|
||||
peak_text = str(ceil(b.max_peak * 10) / 10.0)
|
||||
if b.max_peak > 0:
|
||||
peak_text = "+" + peak_text
|
||||
label_peak.text = peak_text
|
||||
|
||||
# Peak label color
|
||||
if b.max_peak > 0.0:
|
||||
label_peak.modulate = Color.CRIMSON
|
||||
else:
|
||||
label_peak.modulate = Color(1.0, 1.0, 1.0, 0.5)
|
||||
|
||||
update_fx_labels()
|
||||
|
||||
func update_fx_labels():
|
||||
for b in buses:
|
||||
var fx_vbox = b.ui.get_node("VBox/HBox/VBox_fx")
|
||||
for i in b.fx.size():
|
||||
var label = fx_vbox.get_child(i)
|
||||
if AudioServer.is_bus_effect_enabled(b.index, i):
|
||||
label.modulate = Color.WHITE
|
||||
else:
|
||||
label.modulate = Color.DIM_GRAY
|
||||
|
||||
var fx = b.fx[i]
|
||||
var s = fx.resource_name
|
||||
|
||||
# Name
|
||||
if fx.get_class() == "AudioEffectLowPassFilter":
|
||||
s = "LPF"
|
||||
if fx.get_class() == "AudioEffectBandPassFilter":
|
||||
s = "BPF"
|
||||
if fx.get_class() == "AudioEffectReverb":
|
||||
s = "Verb"
|
||||
if fx.get_class() == "AudioEffectAmplify":
|
||||
s = "Amp"
|
||||
if fx.get_class() == "AudioEffectCompressor":
|
||||
s = "Comp"
|
||||
if fx.get_class() == "AudioEffectLimiter":
|
||||
s = "Lim"
|
||||
if fx.get_class() == "AudioEffectStereoEnhance":
|
||||
s = "StEnh"
|
||||
|
||||
# Settings
|
||||
if "volume_db" in fx:
|
||||
s = s + ", vol " + str(snapped(fx.volume_db, 0.01))
|
||||
if "resonance" in fx:
|
||||
s = s + ", res " + str(snapped(fx.resonance, 0.01))
|
||||
if "cutoff_hz" in fx:
|
||||
s = s + ", hz " + str(snapped(fx.cutoff_hz, 0.01))
|
||||
if "room_size" in fx:
|
||||
s = s + ", size " + str(snapped(fx.room_size, 0.01))
|
||||
if "wet" in fx:
|
||||
s = s + ", wet " + str(snapped(fx.wet, 0.01))
|
||||
label.text = s
|
||||
|
||||
# Takes a peak in db, and spits out a normalized 0 to 1 value
|
||||
func normalize_peak(peak_db):
|
||||
var p = (peak_db + 200) / 200.0
|
||||
return p * p * p * p * p * p
|
||||
|
||||
func _hide():
|
||||
modulate = Color(1.0, 1.0, 1.0, 0.25)
|
||||
|
||||
func _show():
|
||||
modulate = Color(1.0, 1.0, 1.0, 0.8)
|
1
AudioMixerVisualizer/AudioMixerDebugVisualization.gd.uid
Normal file
1
AudioMixerVisualizer/AudioMixerDebugVisualization.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://c4jq6us1dhv8m
|
35
AudioMixerVisualizer/AudioMixerMeterDrawer.gd
Normal file
35
AudioMixerVisualizer/AudioMixerMeterDrawer.gd
Normal file
|
@ -0,0 +1,35 @@
|
|||
extends Control
|
||||
|
||||
var bus
|
||||
|
||||
func assign_bus(_bus):
|
||||
self.bus = _bus
|
||||
|
||||
func _process(_delta):
|
||||
queue_redraw()
|
||||
|
||||
func _draw():
|
||||
if bus == null:
|
||||
return
|
||||
|
||||
var meter_ui = bus.ui.get_node("VBox/HBox/Meter/HBox")
|
||||
var pos = meter_ui.global_position - global_position
|
||||
var _size = meter_ui.size
|
||||
|
||||
# Draw db-markings
|
||||
var db_mark_color = Color(1.0, 1.0, 1.0, 0.03)
|
||||
for i in 12:
|
||||
draw_db_mark(pos, _size, i * -6, db_mark_color)
|
||||
|
||||
# Draw max-peak line
|
||||
draw_db_mark(pos, _size, bus.max_peak, Color(0.1, 0.8, 0.1, normalize_peak(bus.max_peak)))
|
||||
|
||||
func draw_db_mark(pos, _size, db, color):
|
||||
var db_norm = 1 - normalize_peak(db)
|
||||
var y_offset = Vector2(0, db_norm * _size.y)
|
||||
draw_line(pos + y_offset, pos + y_offset + Vector2(_size.x, 0), color)
|
||||
|
||||
# Takes a peak in db, and spits out a normalized 0 to 1 value
|
||||
func normalize_peak(peak_db):
|
||||
var p = (peak_db + 200) / 200.0
|
||||
return p * p * p * p * p * p
|
1
AudioMixerVisualizer/AudioMixerMeterDrawer.gd.uid
Normal file
1
AudioMixerVisualizer/AudioMixerMeterDrawer.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://bj5emg1onynp8
|
27
AudioMixerVisualizer/AudioMixerVolumeDrawer.gd
Normal file
27
AudioMixerVisualizer/AudioMixerVolumeDrawer.gd
Normal file
|
@ -0,0 +1,27 @@
|
|||
extends Control
|
||||
|
||||
var bus
|
||||
|
||||
func assign_bus(_bus):
|
||||
self.bus = _bus
|
||||
|
||||
func process(_delta):
|
||||
queue_redraw()
|
||||
|
||||
func _draw():
|
||||
if bus == null:
|
||||
return
|
||||
|
||||
var pos = Vector2(-1, 0)
|
||||
var _size = Vector2(size.x + 2, size.y)
|
||||
draw_volume_mark(pos, _size, AudioServer.get_bus_volume_db(bus.index), Color(1.0, 1.0, 1.0, 0.5))
|
||||
|
||||
func draw_volume_mark(pos, _size, db, color):
|
||||
var db_norm = 1 - normalize_peak(db)
|
||||
var y_offset = Vector2(0, db_norm * (_size.y - 10) + 10)
|
||||
draw_line(pos + y_offset, pos + y_offset + Vector2(_size.x, 0), color, 2.0)
|
||||
|
||||
# Takes a peak in db, and spits out a normalized 0 to 1 value
|
||||
func normalize_peak(peak_db):
|
||||
var p = (peak_db + 200) / 200.0
|
||||
return p * p * p * p * p * p
|
1
AudioMixerVisualizer/AudioMixerVolumeDrawer.gd.uid
Normal file
1
AudioMixerVisualizer/AudioMixerVolumeDrawer.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://dfguk2y5kq1w3
|
BIN
AudioMixerVisualizer/BarlowCondensed-Regular.ttf
Normal file
BIN
AudioMixerVisualizer/BarlowCondensed-Regular.ttf
Normal file
Binary file not shown.
35
AudioMixerVisualizer/BarlowCondensed-Regular.ttf.import
Normal file
35
AudioMixerVisualizer/BarlowCondensed-Regular.ttf.import
Normal file
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://djsydx7kqwa0k"
|
||||
path="res://.godot/imported/BarlowCondensed-Regular.ttf-973b5bd97605c53120c8d42add219b73.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://AudioMixerVisualizer/BarlowCondensed-Regular.ttf"
|
||||
dest_files=["res://.godot/imported/BarlowCondensed-Regular.ttf-973b5bd97605c53120c8d42add219b73.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
hinting=1
|
||||
subpixel_positioning=1
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
Loading…
Add table
Add a link
Reference in a new issue