Delay possible for each track
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Martyn 2020-09-26 14:59:15 +02:00
parent c1b696d8cc
commit bdb53d763a
6 changed files with 168 additions and 53 deletions

View File

@ -0,0 +1,55 @@
extends Control
signal delay_changed(slider,value)
var count = 0
var sliders = []
var values = []
var deets = []
func set_count(value):
for slice in $VBoxContainer.get_children():
slice.remove_and_skip()
sliders = []
deets = []
for i in range(0,value):
if len(values) < value+1:
values.append(Globals.audio_delay_seconds * 1000)
var slice = HBoxContainer.new()
var label = Label.new()
label.text = String(i+1)
label.hint_tooltip = "Vocal delay track "+String(i+1)
label.mouse_filter = Control.MOUSE_FILTER_STOP
slice.add_child(label)
var slider = HSlider.new()
slider.hint_tooltip = "Vocal delay track "+String(i+1)
slider.size_flags_horizontal = SIZE_EXPAND_FILL
print("Set track "+String(i)+" to "+String(values[i]))
slider.value = values[i]
slider.max_value = 1000
slider.connect("value_changed",self,"on_value_changed")
slice.add_child(slider)
sliders.append(slider)
var deet = Label.new()
deet.text = String(values[i]/1000) + "s"
deet.rect_min_size = Vector2(50,0)
deet.hint_tooltip = "Vocal delay track "+String(i+1)
deet.mouse_filter = Control.MOUSE_FILTER_STOP
deets.append(deet)
slice.add_child(deet)
$VBoxContainer.add_child(slice)
func on_value_changed(value):
for i in range(0,len(sliders)):
if values[i] != sliders[i].value:
values[i] = sliders[i].value
deets[i].text = String(values[i]/1000) + "s"
emit_signal("delay_changed",i,sliders[i].value)
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass

View File

@ -0,0 +1,18 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://Components/MultiDelaySlider.gd" type="Script" id=1]
[node name="Control" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="VBoxContainer" type="VBoxContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
__meta__ = {
"_edit_use_anchors_": false
}

View File

@ -8,6 +8,7 @@ var players = []
var AudioSyncs = [] var AudioSyncs = []
var AudioStreams = [] var AudioStreams = []
var AudioVolumes = [] var AudioVolumes = []
var playing = false
export(VideoStreamWebm) var VideoStream export(VideoStreamWebm) var VideoStream
export(bool) var paused export(bool) var paused
export(int) var VideoDurationSeconds export(int) var VideoDurationSeconds
@ -25,12 +26,14 @@ func _ready():
func play(): func play():
$VideoPlayer.play() $VideoPlayer.play()
playing = true
func stop(): func stop():
$VideoPlayer.stop() $VideoPlayer.stop()
for playerid in range(0,len(players)): for playerid in range(0,len(players)):
print(">>>Stopping player"+String(playerid)) print(">>>Stopping player"+String(playerid))
players[playerid].stop() players[playerid].stop()
playing = false
func set_VideoStream(new_stream): func set_VideoStream(new_stream):
VideoStream = new_stream VideoStream = new_stream
@ -59,6 +62,19 @@ func set_volume_db(value):
func set_audio_volume_db(which, value): func set_audio_volume_db(which, value):
players[which].set_volume_db(value) players[which].set_volume_db(value)
func set_stream_delay(which, value):
if playing:
if !paused:
$VideoPlayer.paused = true
for playerid in range(0,len(players)):
players[playerid].stream_paused = true
players[which].seek($VideoPlayer.stream_position + value)
if !paused:
$VideoPlayer.paused = false
for playerid in range(0,len(players)):
players[playerid].stream_paused = false
AudioSyncs[which] = value
func get_stream_position(): func get_stream_position():
return $VideoPlayer.stream_position return $VideoPlayer.stream_position
@ -74,6 +90,7 @@ func add_audio_stream(stream, delay):
print(">>>added stream, count is now "+String(len(AudioSyncs))+","+String(len(players))+","+String(len(AudioStreams))) print(">>>added stream, count is now "+String(len(AudioSyncs))+","+String(len(players))+","+String(len(AudioStreams)))
func play_combined(): func play_combined():
playing = true
$VideoPlayer.play() $VideoPlayer.play()
for playerid in range(0,len(players)): for playerid in range(0,len(players)):
print(">>>Playing player"+String(playerid)) print(">>>Playing player"+String(playerid))
@ -89,4 +106,8 @@ func _process(delta):
func _on_VideoPlayer_finished(): func _on_VideoPlayer_finished():
playing = false
for playerid in range(0,len(players)):
print(">>>Stopping player"+String(playerid))
players[playerid].stop()
emit_signal("finished") emit_signal("finished")

View File

@ -32,6 +32,7 @@ func set_count(value):
label.text = String(i+1) label.text = String(i+1)
label.hint_tooltip = "Vocal mix "+String(i+1) label.hint_tooltip = "Vocal mix "+String(i+1)
label.mouse_filter = Control.MOUSE_FILTER_STOP label.mouse_filter = Control.MOUSE_FILTER_STOP
label.align = Label.ALIGN_CENTER
slice.add_child(label) slice.add_child(label)
$HBoxContainer.add_child(slice) $HBoxContainer.add_child(slice)
@ -39,7 +40,7 @@ func on_value_changed(value):
for i in range(0,len(sliders)): for i in range(0,len(sliders)):
if values[i] != sliders[i].value: if values[i] != sliders[i].value:
values[i] = sliders[i].value values[i] = sliders[i].value
emit_signal("volume_changed",0,sliders[0].value) emit_signal("volume_changed",i,sliders[i].value)
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta): #func _process(delta):

View File

@ -14,7 +14,8 @@ var playable_recording_data
var playing = false var playing = false
var current_stream_added = false var current_stream_added = false
var recorded_streams = 0 var recorded_streams = 0
var streams_recorded_here = []
var stream_data = []
var position_changing_by_code var position_changing_by_code
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
@ -44,8 +45,8 @@ func _ready():
recorder = AudioServer.get_bus_effect(idx, 0) recorder = AudioServer.get_bus_effect(idx, 0)
spectrum_play = AudioServer.get_bus_effect_instance(0,0) spectrum_play = AudioServer.get_bus_effect_instance(0,0)
spectrum_record = AudioServer.get_bus_effect_instance(1,1) spectrum_record = AudioServer.get_bus_effect_instance(1,1)
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value = Globals.audio_delay_seconds * 1000
position_changing_by_code = false position_changing_by_code = false
$MarginContainer/VBoxContainer/HBoxContainer4/SaveMode.add_item("Save separate streams")
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta): func _process(delta):
@ -61,12 +62,14 @@ func _on_RecButton_pressed():
if recorder.is_recording_active(): if recorder.is_recording_active():
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop()
raw_recording = recorder.get_recording() raw_recording = recorder.get_recording()
stream_data.append(raw_recording)
current_stream_added = false current_stream_added = false
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = false $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = false
recorder.set_recording_active(false) recorder.set_recording_active(false)
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record"
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = "" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = ""
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2.set_count(recorded_streams) $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/MultiVolumeSlider.set_count(recorded_streams)
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/MultiDelaySlider.set_count(recorded_streams)
else: else:
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.play_combined() $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.play_combined()
@ -89,7 +92,7 @@ func _on_PlayButton_pressed():
playing = false playing = false
else: else:
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Stop" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Stop"
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record another layer" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record another layer (part)"
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.disabled = true $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.disabled = true
if !current_stream_added: if !current_stream_added:
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.add_audio_stream(raw_recording,$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value/1000) $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.add_audio_stream(raw_recording,$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value/1000)
@ -128,23 +131,35 @@ func _on_DelaySlider_value_changed(value):
func _on_Quit_pressed(): func _on_Quit_pressed():
get_tree().change_scene("res://main_menu.tscn") get_tree().change_scene("res://main_menu.tscn")
func _on_MultiStreamVideoPlayer_finished(): func _on_MultiStreamVideoPlayer_finished():
if recorder.is_recording_active(): if recorder.is_recording_active():
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop()
raw_recording = recorder.get_recording() raw_recording = recorder.get_recording()
stream_data.append(raw_recording)
current_stream_added = false current_stream_added = false
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = false $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = false
recorder.set_recording_active(false) recorder.set_recording_active(false)
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record another layer (part)" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record"
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = "" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = ""
if playing: if playing:
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop()
$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Play" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Play"
playing = false playing = false
func _on_VBoxContainer2_volume_changed(slider, value): func _on_VBoxContainer2_volume_changed(slider, value):
print("Slider "+String(slider)+" changed to "+String(value)) print("Slider "+String(slider)+" changed to "+String(value))
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_audio_volume_db(slider,linear2db(value/100)) $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_audio_volume_db(slider,linear2db(value/100))
pass # Replace with function body. pass # Replace with function body.
func _on_MultiDelaySlider_delay_changed(slider, value):
$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_stream_delay(slider,value/1000)
Globals.audio_delay_seconds = value/1000
Globals.saveConfig()
pass # Replace with function body.
func _on_SaveButton_pressed():
for streamid in range(0,len(stream_data)):
stream_data[streamid].save_to_wav("user://part"+String(streamid+1)+".wav")
pass # Replace with function body.

View File

@ -1,10 +1,11 @@
[gd_scene load_steps=7 format=2] [gd_scene load_steps=8 format=2]
[ext_resource path="res://Components/MultiStreamPlayer.tscn" type="PackedScene" id=1] [ext_resource path="res://Components/MultiStreamPlayer.tscn" type="PackedScene" id=1]
[ext_resource path="res://main_menu.gd" type="Script" id=2] [ext_resource path="res://main_menu.gd" type="Script" id=2]
[ext_resource path="res://PlayVideoRecordAudio.gd" type="Script" id=3] [ext_resource path="res://PlayVideoRecordAudio.gd" type="Script" id=3]
[ext_resource path="res://UI/src/meter.png" type="Texture" id=4] [ext_resource path="res://UI/src/meter.png" type="Texture" id=4]
[ext_resource path="res://Components/MultiVolumeSlider.tscn" type="PackedScene" id=5] [ext_resource path="res://Components/MultiVolumeSlider.tscn" type="PackedScene" id=5]
[ext_resource path="res://Components/MultiDelaySlider.tscn" type="PackedScene" id=6]
[sub_resource type="AudioStreamMicrophone" id=1] [sub_resource type="AudioStreamMicrophone" id=1]
@ -65,14 +66,14 @@ script = ExtResource( 2 )
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
margin_top = 24.0 margin_top = 24.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 305.0 margin_bottom = 293.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
alignment = 1 alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer"] [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer"]
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 281.0 margin_bottom = 269.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
alignment = 1 alignment = 1
@ -81,52 +82,48 @@ alignment = 1
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 281.0 margin_bottom = 269.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
paused = false
VideoDurationSeconds = 0
stream_position = 0.0
volume_db = 0.0
[node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] [node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
margin_top = 309.0 margin_top = 297.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 590.0 margin_bottom = 566.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
alignment = 1 alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3"] [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3"]
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 281.0 margin_bottom = 269.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
alignment = 1 alignment = 1
[node name="RecordButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="RecordButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 26.0 margin_top = 20.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 46.0 margin_bottom = 40.0
text = "Record" text = "Record"
[node name="PlayButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="PlayButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 50.0 margin_top = 44.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 70.0 margin_bottom = 64.0
disabled = true disabled = true
text = "Play" text = "Play"
[node name="Status" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="Status" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 74.0 margin_top = 68.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 89.0 margin_bottom = 83.0
fit_content_height = true fit_content_height = true
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 93.0 margin_top = 87.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 109.0 margin_bottom = 103.0
[node name="Playbacklabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer"] [node name="Playbacklabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer"]
margin_right = 110.0 margin_right = 110.0
@ -149,9 +146,9 @@ texture_progress = ExtResource( 4 )
nine_patch_stretch = true nine_patch_stretch = true
[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 113.0 margin_top = 107.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 129.0 margin_bottom = 123.0
[node name="Recordlabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer2"] [node name="Recordlabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer2"]
margin_right = 110.0 margin_right = 110.0
@ -171,9 +168,9 @@ texture_progress = ExtResource( 4 )
nine_patch_stretch = true nine_patch_stretch = true
[node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 133.0 margin_top = 127.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 251.0 margin_bottom = 245.0
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3"] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3"]
margin_right = 524.0 margin_right = 524.0
@ -202,26 +199,14 @@ valign = 1
margin_left = 20.0 margin_left = 20.0
margin_right = 520.0 margin_right = 520.0
margin_bottom = 118.0 margin_bottom = 118.0
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer"]
margin_right = 500.0
margin_bottom = 14.0
size_flags_horizontal = 3
text = "Audio Delay : 0s"
__meta__ = {
"_edit_use_anchors_": false
}
[node name="DelaySlider" type="HSlider" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer"]
margin_top = 18.0
margin_right = 500.0
margin_bottom = 34.0
rect_min_size = Vector2( 500, 0 ) rect_min_size = Vector2( 500, 0 )
size_flags_horizontal = 3
max_value = 1000.0
editable = false
[node name="VBoxContainer2" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer" instance=ExtResource( 5 )] [node name="MultiDelaySlider" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer" instance=ExtResource( 6 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 500.0
[node name="MultiVolumeSlider" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer" instance=ExtResource( 5 )]
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 524.0 margin_left = 524.0
@ -229,9 +214,28 @@ margin_right = 524.0
margin_bottom = 118.0 margin_bottom = 118.0
[node name="HBoxContainer4" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] [node name="HBoxContainer4" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"]
margin_top = 255.0 margin_top = 249.0
margin_right = 1013.0 margin_right = 1013.0
margin_bottom = 255.0 margin_bottom = 249.0
[node name="HBoxContainer4" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
margin_top = 570.0
margin_right = 1013.0
margin_bottom = 590.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="SaveMode" type="OptionButton" parent="MarginContainer/VBoxContainer/HBoxContainer4"]
margin_right = 968.0
margin_bottom = 20.0
size_flags_horizontal = 3
[node name="SaveButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer4"]
margin_left = 972.0
margin_right = 1013.0
margin_bottom = 20.0
text = "Save"
[node name="AudioStreamRecorder" type="AudioStreamPlayer" parent="."] [node name="AudioStreamRecorder" type="AudioStreamPlayer" parent="."]
stream = SubResource( 1 ) stream = SubResource( 1 )
@ -244,5 +248,6 @@ bus = "Record"
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton" to="." method="_on_RecButton_pressed"] [connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton" to="." method="_on_RecButton_pressed"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton" to="." method="_on_PlayButton_pressed"] [connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton" to="." method="_on_PlayButton_pressed"]
[connection signal="value_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer3/BackgroundaudioSlider" to="." method="_on_BackgroundaudioSlider_changed"] [connection signal="value_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer3/BackgroundaudioSlider" to="." method="_on_BackgroundaudioSlider_changed"]
[connection signal="value_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider" to="." method="_on_DelaySlider_value_changed"] [connection signal="delay_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/MultiDelaySlider" to="." method="_on_MultiDelaySlider_delay_changed"]
[connection signal="volume_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2" to="." method="_on_VBoxContainer2_volume_changed"] [connection signal="volume_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/MultiVolumeSlider" to="." method="_on_VBoxContainer2_volume_changed"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer4/SaveButton" to="." method="_on_SaveButton_pressed"]