Commit before damnger

This commit is contained in:
kevadesu 2025-06-07 19:10:56 +02:00
parent fe1eb58626
commit 14f0200b50
101 changed files with 8087 additions and 15 deletions

View 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"]

File diff suppressed because one or more lines are too long

View 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)

View file

@ -0,0 +1 @@
uid://c4jq6us1dhv8m

View 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

View file

@ -0,0 +1 @@
uid://bj5emg1onynp8

View 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

View file

@ -0,0 +1 @@
uid://dfguk2y5kq1w3

Binary file not shown.

View 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={}