From 9948a9fc26cdf2ab77f0942e5ad182a1172bdeaa Mon Sep 17 00:00:00 2001 From: Martyn Date: Sat, 26 Sep 2020 00:38:08 +0200 Subject: [PATCH] Settings and Multi-layer Had to implement multi-layer playback for duet playback, so why not implement multi-local-layer recording? --- godot/Components/MultiStreamPlayer.gd | 92 ++++++++++++++++ godot/Components/MultiStreamPlayer.tscn | 57 ++++++++++ godot/Components/MultiVolumeSlider.gd | 46 ++++++++ godot/Components/MultiVolumeSlider.tscn | 19 ++++ godot/PlayVideoRecordAudio.gd | 101 +++++++++++------- godot/PlayVideoRecordAudio.tscn | 136 +++++++++--------------- godot/UI/src/progressinner.png | Bin 0 -> 1466 bytes godot/UI/src/progressinner.png.import | 34 ++++++ godot/UI/src/progressouter.png | Bin 0 -> 2295 bytes godot/UI/src/progressouter.png.import | 34 ++++++ 10 files changed, 395 insertions(+), 124 deletions(-) create mode 100644 godot/Components/MultiStreamPlayer.gd create mode 100644 godot/Components/MultiStreamPlayer.tscn create mode 100644 godot/Components/MultiVolumeSlider.gd create mode 100644 godot/Components/MultiVolumeSlider.tscn create mode 100644 godot/UI/src/progressinner.png create mode 100644 godot/UI/src/progressinner.png.import create mode 100644 godot/UI/src/progressouter.png create mode 100644 godot/UI/src/progressouter.png.import diff --git a/godot/Components/MultiStreamPlayer.gd b/godot/Components/MultiStreamPlayer.gd new file mode 100644 index 0000000..424b359 --- /dev/null +++ b/godot/Components/MultiStreamPlayer.gd @@ -0,0 +1,92 @@ +extends Control + +var players = [] + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +var AudioSyncs = [] +var AudioStreams = [] +var AudioVolumes = [] +export(VideoStreamWebm) var VideoStream +export(bool) var paused +export(int) var VideoDurationSeconds +export(float) var stream_position +export(float) var volume_db +signal finished + +# Called when the node enters the scene tree for the first time. +func _ready(): + $VideoPlayer.stream = VideoStream + $VideoPlayer.paused = paused + $TextureProgress.max_value = VideoDurationSeconds + $VideoPlayer.volume_db = volume_db + print(">>>count is "+String(len(AudioSyncs))+","+String(len(players))+","+String(len(AudioStreams))) + +func play(): + $VideoPlayer.play() + +func stop(): + $VideoPlayer.stop() + for playerid in range(0,len(players)): + print(">>>Stopping player"+String(playerid)) + players[playerid].stop() + +func set_VideoStream(new_stream): + VideoStream = new_stream + if !is_inside_tree(): return + $VideoPlayer.stream = new_stream + print(">>>VideoStream is now "+new_stream.to_string()) + +func set_paused(value): + if !is_inside_tree(): return + $VideoPlayer.paused = value + paused = value + print(">>>Paused is now "+String(value)) + +func set_VideoDurationSeconds(value): + if !is_inside_tree(): return + $TextureProgress.max_value = value + VideoDurationSeconds = value + print(">>>VideoDurationSeconds is now "+String(value)) + +func set_volume_db(value): + if !is_inside_tree(): return + $VideoPlayer.volume_db = value + volume_db = value + print(">>>volume_db is now "+String(value)) + +func set_audio_volume_db(which, value): + players[which].set_volume_db(value) + +func get_stream_position(): + return $VideoPlayer.stream_position + +func add_audio_stream(stream, delay): + var player = AudioStreamPlayer.new() + player.set_stream(stream) + player.volume_db = 1 + player.pitch_scale = 1 + add_child(player) + players.append(player) + AudioSyncs.append(delay) + AudioStreams.append(stream) + print(">>>added stream, count is now "+String(len(AudioSyncs))+","+String(len(players))+","+String(len(AudioStreams))) + +func play_combined(): + $VideoPlayer.play() + for playerid in range(0,len(players)): + print(">>>Playing player"+String(playerid)) + players[playerid].play() + players[playerid].stream_paused = true + players[playerid].seek(AudioSyncs[playerid]) + players[playerid].stream_paused = false + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + $TextureProgress.value = $VideoPlayer.stream_position + + +func _on_VideoPlayer_finished(): + emit_signal("finished") diff --git a/godot/Components/MultiStreamPlayer.tscn b/godot/Components/MultiStreamPlayer.tscn new file mode 100644 index 0000000..9c2aa1a --- /dev/null +++ b/godot/Components/MultiStreamPlayer.tscn @@ -0,0 +1,57 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Components/MultiStreamPlayer.gd" type="Script" id=1] +[ext_resource path="res://UI/src/progressinner.png" type="Texture" id=2] +[ext_resource path="res://UI/src/progressouter.png" type="Texture" id=3] + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VideoPlayer" type="VideoPlayer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 5.0 +margin_top = 5.0 +margin_right = -5.0 +margin_bottom = -5.0 +autoplay = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TextureProgress" type="TextureProgress" parent="."] +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 20.0 +margin_top = -47.0 +margin_right = -27.0 +margin_bottom = -14.0 +max_value = 313.701 +step = 0.1 +texture_progress = ExtResource( 2 ) +nine_patch_stretch = true +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="TextureRect" type="TextureRect" parent="."] +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 15.0 +margin_top = -51.0 +margin_right = -5.0 +margin_bottom = -5.0 +rect_scale = Vector2( 0.5, 0.5 ) +texture = ExtResource( 3 ) +stretch_mode = 1 +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="finished" from="VideoPlayer" to="." method="_on_VideoPlayer_finished"] diff --git a/godot/Components/MultiVolumeSlider.gd b/godot/Components/MultiVolumeSlider.gd new file mode 100644 index 0000000..d99ab8c --- /dev/null +++ b/godot/Components/MultiVolumeSlider.gd @@ -0,0 +1,46 @@ +extends Control + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +signal volume_changed(slider,value) +var count = 0 +var sliders = [] +var values = [] + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +func set_count(value): + for slice in $HBoxContainer.get_children(): + slice.remove_and_skip() + sliders = [] + for i in range(0,value): + if len(values) < value+1: + values.append(50) + var slice = VBoxContainer.new() + var slider = VSlider.new() + slider.hint_tooltip = "Vocal mix "+String(i+1) + slider.size_flags_vertical = SIZE_EXPAND_FILL + slider.value = values[i] + slider.connect("value_changed",self,"on_value_changed") + slice.add_child(slider) + sliders.append(slider) + var label = Label.new() + label.text = String(i+1) + label.hint_tooltip = "Vocal mix "+String(i+1) + label.mouse_filter = Control.MOUSE_FILTER_STOP + slice.add_child(label) + $HBoxContainer.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 + emit_signal("volume_changed",0,sliders[0].value) + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/godot/Components/MultiVolumeSlider.tscn b/godot/Components/MultiVolumeSlider.tscn new file mode 100644 index 0000000..b953c12 --- /dev/null +++ b/godot/Components/MultiVolumeSlider.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Components/MultiVolumeSlider.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="HBoxContainer" type="HBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/godot/PlayVideoRecordAudio.gd b/godot/PlayVideoRecordAudio.gd index 44fada3..213b314 100644 --- a/godot/PlayVideoRecordAudio.gd +++ b/godot/PlayVideoRecordAudio.gd @@ -11,6 +11,9 @@ var recorder var raw_recording var raw_recording_data var playable_recording_data +var playing = false +var current_stream_added = false +var recorded_streams = 0 var position_changing_by_code @@ -32,15 +35,9 @@ func _ready(): #$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPosSlider.max_value = duration ## So we're back to VideoStreamWebM - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.set_stream(load(OS.get_user_data_dir()+"/converted.webm")) - var vp = $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer - print(vp.stream.to_string()) - vp.stream_position = -1 - #var duration = Globals.video_duration + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_VideoStream(load(OS.get_user_data_dir()+"/converted.webm")) var duration = 313.701 - vp.stream_position = 0 - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPosSlider.max_value = duration - print(duration) + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_VideoDurationSeconds(duration) # And set up the recording bus and meters var idx = AudioServer.get_bus_index("Record") @@ -58,24 +55,25 @@ func _process(delta): magnitude = spectrum_record.get_magnitude_for_frequency_range(0,11050.0).length() energy = clamp((60 + linear2db(magnitude)) / 60, 0, 1) $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer2/RecordMeter.value = energy * 100 - $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2/VideoPos.text = "Video Pos : "+String($MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.stream_position) - $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2/AudioPos.text = "Audio Pos : "+String($AudioStreamPlayer.get_playback_position()) - if !position_changing_by_code: - position_changing_by_code = true - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPosSlider.value = $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.stream_position - position_changing_by_code = false func _on_RecButton_pressed(): if recorder.is_recording_active(): - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.stop() + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() raw_recording = recorder.get_recording() + current_stream_added = false $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = false recorder.set_recording_active(false) $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = "" + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2.set_count(recorded_streams) + else: - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.play() + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.play_combined() + if $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text != "Record": + recorded_streams += 1 + if recorded_streams == 0: + recorded_streams = 1 $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = true recorder.set_recording_active(true) $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Stop" @@ -84,18 +82,33 @@ func _on_RecButton_pressed(): func _on_PlayButton_pressed(): var data = raw_recording.get_data() - $AudioStreamPlayer.stream = raw_recording - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.play() - $AudioStreamPlayer.play() - $AudioStreamPlayer.stream_paused = true - $AudioStreamPlayer.seek($MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value/1000) - $AudioStreamPlayer.stream_paused = false + if playing: + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Play" + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.disabled = false + playing = false + else: + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Stop" + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record another layer" + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.disabled = true + if !current_stream_added: + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.add_audio_stream(raw_recording,$MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value/1000) + current_stream_added = true + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.play_combined() + playing = true + #$AudioStreamPlayer.stream = raw_recording + #$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.play() + #$AudioStreamPlayer.play() + #$AudioStreamPlayer.stream_paused = true + #$AudioStreamPlayer.seek($MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value/1000) + #$AudioStreamPlayer.stream_paused = false + + #$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPosSlider.editable = true $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.editable = true - func _on_BackgroundaudioSlider_changed(value): - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.volume_db = linear2db(value/100) + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_volume_db(linear2db(value/100)) func _on_VocalSlider_value_changed(value): @@ -104,26 +117,34 @@ func _on_VocalSlider_value_changed(value): func _on_DelaySlider_value_changed(value): $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/Label.text = "Audio Delay: "+String(value/1000)+"s" - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.paused = true + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_paused(true) $AudioStreamPlayer.stream_paused = true - $AudioStreamPlayer.seek($MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.stream_position + value/1000) - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.paused = false + $AudioStreamPlayer.seek($MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.get_stream_position() + value/1000) + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_paused(false) $AudioStreamPlayer.stream_paused = false Globals.audio_delay_seconds = value/1000 Globals.saveConfig() - -func _on_VideoPosSlider_value_changed(value): - if !position_changing_by_code: - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.paused = true - $AudioStreamPlayer.stream_paused = true - position_changing_by_code = true - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.streamseek(value) - $AudioStreamPlayer.seek(value + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/DelaySlider.value/1000) - $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.paused = false - position_changing_by_code = false - $AudioStreamPlayer.stream_paused = false - - func _on_Quit_pressed(): get_tree().change_scene("res://main_menu.tscn") + + +func _on_MultiStreamVideoPlayer_finished(): + if recorder.is_recording_active(): + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() + raw_recording = recorder.get_recording() + current_stream_added = false + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.disabled = false + recorder.set_recording_active(false) + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.text = "Record another layer (part)" + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = "" + if playing: + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() + $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/PlayButton.text = "Play" + playing = false + + +func _on_VBoxContainer2_volume_changed(slider, value): + print("Slider "+String(slider)+" changed to "+String(value)) + $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_audio_volume_db(slider,linear2db(value/100)) + pass # Replace with function body. diff --git a/godot/PlayVideoRecordAudio.tscn b/godot/PlayVideoRecordAudio.tscn index 0917f2a..b9faf37 100644 --- a/godot/PlayVideoRecordAudio.tscn +++ b/godot/PlayVideoRecordAudio.tscn @@ -1,8 +1,10 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=7 format=2] +[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://PlayVideoRecordAudio.gd" type="Script" id=3] [ext_resource path="res://UI/src/meter.png" type="Texture" id=4] +[ext_resource path="res://Components/MultiVolumeSlider.tscn" type="PackedScene" id=5] [sub_resource type="AudioStreamMicrophone" id=1] @@ -75,21 +77,17 @@ size_flags_horizontal = 3 size_flags_vertical = 3 alignment = 1 -[node name="VideoPlayer" type="VideoPlayer" parent="MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer"] -margin_right = 1013.0 -margin_bottom = 261.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="VideoPosSlider" type="HSlider" parent="MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer"] -margin_top = 265.0 +[node name="MultiStreamVideoPlayer" parent="MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer" instance=ExtResource( 1 )] +anchor_right = 0.0 +anchor_bottom = 0.0 margin_right = 1013.0 margin_bottom = 281.0 -rect_min_size = Vector2( 500, 0 ) size_flags_horizontal = 3 -max_value = 10.0 -step = 0.01 -editable = false +size_flags_vertical = 3 +paused = false +VideoDurationSeconds = 0 +stream_position = 0.0 +volume_db = 0.0 [node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] margin_top = 309.0 @@ -107,28 +105,28 @@ size_flags_vertical = 3 alignment = 1 [node name="RecordButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 28.0 +margin_top = 26.0 margin_right = 1013.0 -margin_bottom = 48.0 +margin_bottom = 46.0 text = "Record" [node name="PlayButton" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 52.0 +margin_top = 50.0 margin_right = 1013.0 -margin_bottom = 72.0 +margin_bottom = 70.0 disabled = true text = "Play" [node name="Status" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 76.0 +margin_top = 74.0 margin_right = 1013.0 -margin_bottom = 91.0 +margin_bottom = 89.0 fit_content_height = true [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 95.0 +margin_top = 93.0 margin_right = 1013.0 -margin_bottom = 111.0 +margin_bottom = 109.0 [node name="Playbacklabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer"] margin_right = 110.0 @@ -151,9 +149,9 @@ texture_progress = ExtResource( 4 ) nine_patch_stretch = true [node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 115.0 +margin_top = 113.0 margin_right = 1013.0 -margin_bottom = 131.0 +margin_bottom = 129.0 [node name="Recordlabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer2"] margin_right = 110.0 @@ -173,32 +171,37 @@ texture_progress = ExtResource( 4 ) nine_patch_stretch = true [node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 135.0 +margin_top = 133.0 margin_right = 1013.0 -margin_bottom = 235.0 +margin_bottom = 251.0 [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3"] -margin_right = 620.0 -margin_bottom = 100.0 +margin_right = 524.0 +margin_bottom = 118.0 -[node name="BackgroundaudioSlider" type="VSlider" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer"] +[node name="VBoxContainer3" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer"] +margin_right = 16.0 +margin_bottom = 118.0 + +[node name="BackgroundaudioSlider" type="VSlider" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer3"] margin_right = 16.0 margin_bottom = 100.0 rect_min_size = Vector2( 0, 100 ) value = 50.0 -[node name="VocalSlider" type="VSlider" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer"] -margin_left = 20.0 -margin_right = 36.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 0, 100 ) -max_value = 100.0 -value = 50.0 +[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer3"] +margin_top = 104.0 +margin_right = 16.0 +margin_bottom = 118.0 +rect_min_size = Vector2( 16, 0 ) +text = "B" +align = 1 +valign = 1 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer"] -margin_left = 40.0 -margin_right = 540.0 -margin_bottom = 100.0 +margin_left = 20.0 +margin_right = 520.0 +margin_bottom = 118.0 [node name="Label" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer"] margin_right = 500.0 @@ -218,52 +221,17 @@ size_flags_horizontal = 3 max_value = 1000.0 editable = false -[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer"] -margin_left = 544.0 -margin_right = 620.0 -margin_bottom = 100.0 - -[node name="AudioPos" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2"] -margin_right = 76.0 -margin_bottom = 14.0 -size_flags_horizontal = 3 -text = "Audio Pos : " -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="VideoPos" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2"] -margin_top = 18.0 -margin_right = 76.0 -margin_bottom = 49.0 -size_flags_horizontal = 3 -text = "Video Pos : -" -__meta__ = { -"_edit_use_anchors_": false -} +[node name="VBoxContainer2" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer" instance=ExtResource( 5 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 524.0 +margin_right = 524.0 +margin_bottom = 118.0 [node name="HBoxContainer4" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer"] -margin_top = 239.0 +margin_top = 255.0 margin_right = 1013.0 -margin_bottom = 253.0 - -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer4"] -margin_right = 16.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 16, 0 ) -text = "B" -align = 1 -valign = 1 - -[node name="Label2" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer4"] -margin_left = 20.0 -margin_right = 36.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 16, 0 ) -text = "V" -align = 1 -valign = 1 +margin_bottom = 255.0 [node name="AudioStreamRecorder" type="AudioStreamPlayer" parent="."] stream = SubResource( 1 ) @@ -272,9 +240,9 @@ bus = "Record" [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] [connection signal="pressed" from="MarginContainer/VBoxContainer/HBoxContainer2/Quit" to="." method="_on_Quit_pressed"] -[connection signal="value_changed" from="MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPosSlider" to="." method="_on_VideoPosSlider_value_changed"] +[connection signal="finished" from="MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer" to="." method="_on_MultiStreamVideoPlayer_finished"] [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="value_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/BackgroundaudioSlider" to="." method="_on_BackgroundaudioSlider_changed"] -[connection signal="value_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VocalSlider" to="." method="_on_VocalSlider_value_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="volume_changed" from="MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer2" to="." method="_on_VBoxContainer2_volume_changed"] diff --git a/godot/UI/src/progressinner.png b/godot/UI/src/progressinner.png new file mode 100644 index 0000000000000000000000000000000000000000..7d76b8fbfef2f336941bf36b39fa146091ae4bd6 GIT binary patch literal 1466 zcmeAS@N?(olHy`uVBq!ia0y~yU|$GiJ9DrB$-B=A_5dlCVkgfK4j`!ENa+CbISV`@ ziy0XB6G519h5hnOprB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=FL1 zo-U3d6?5L+-Iy;|&UpOc`D(RkN+C;kyghVbRf*#k*+UG%SysxIj5cieXkOx}ywfV@ zWTCi(K=RB80q^+ zeX!o;#oBHAw%z~tH0!a;GDe7s4L$3^_4|7F+f;qNuk@wtw*R@=`(tgZCY^@b5#eRN zYCTZievhHdzlyEl^0UnAjTwOf3jz)7n*;amy!~$GVd?)}7v#TQ{Jwg*_(rG)8kT-N zI{WS&+dVTvbGMe3?f)BJdd7Sa)Y=Dj-&Su`|7VGbC@fSe7hF?|Idc&_qaJPK-4nS7`?83TU)#0oNg5-R7m^b&xKWG7qy|> z2+s3-S08uBK@BkDu&-Im5@T1?u_)BPA24p2>m>p_b0*;oyY`9!MEAQq4GIySObABtROb7F4hJ zw+$%*_VZk=MvkuX6?L1Dq*otab2A!Aeut4v$%m@a?2F#eV2{YEe!cd8jf8Z5$aL|& z&}eB``fYM|>>j&2J8!K0CcYCcTDrPwY1RrU>H90=qMs;1O_+9#|M;=;*M2SQtnR*? zzG`)M6bm%=f_~+Gy?eO(=0)|}x%QU%|H{6;@LUh|Ny5uJ5!r9GXXpNV_~BT=mzQa? z>(}gyyle3?6>6-`)Ys03e=cU+^{z_z*9BlMJ3D)SoNcYrWthX&u3w9)PTYJpyWBp) z`rVhQ>uL(t72B_~i=Mmpx+PSRU1(mYy~W*^`SEWa{XQ;h@y++e;$z43L!z&4U-dQf zJ1ncP09D0iznyA5zjEL5n>ThCn%(;@eIfbru{Af%`K&7TRV}MpRJG&R8I{RU9Y5+n se1CQL)!tWGU%OwW^Iw`;eyj3{{MF@)9Tzikse>%{boFyt=akR{06CxSrT_o{ literal 0 HcmV?d00001 diff --git a/godot/UI/src/progressinner.png.import b/godot/UI/src/progressinner.png.import new file mode 100644 index 0000000..6ba252b --- /dev/null +++ b/godot/UI/src/progressinner.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/progressinner.png-72812c01d686d034e73942a10c351d3e.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://UI/src/progressinner.png" +dest_files=[ "res://.import/progressinner.png-72812c01d686d034e73942a10c351d3e.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/godot/UI/src/progressouter.png b/godot/UI/src/progressouter.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8b14e47fbd8715433e95371abf38d18a67051c GIT binary patch literal 2295 zcmeHIdr(?u7AI|HlbEQ}W=B_zvAdnwu9Fo~!)nB5t*J?D(E38u1g#|az(+(7K`@)0 z#&lJj-881wh%rWu5sI`fqij_+NSDdhdkC=D`L1eLBcKUz+-81vu`5wRX zxaaqM=X@E5j&^qPbb`TP&gafX#lv6+1onBt!Qa@wugD3zi~Xd?bBPD-QhpGB)4o1b zbQVj3!CW(U$G(T*?K$>MkCHPfB?*OBN=h?}FT+YpOW`>Md8Dk&qRa5YVnV}eh$jqo zu;g6SM~T$CE2;~R+6WiN*Vo>ZoNsGfy7?sP=!to+!@=)y;Yc(JY>kV`x;cBhdFej< zrYwSpB3~_jcF6Zk%AamHe-r0?;=}uYjQIV2r`a}dx}6Rw(r5OB-8cQ&Fn#uISveVCmn|X@Qfs@ ze3fE*((DpSm;O!X*AcBHaE5ryjgWD45{}2_u{&58jp#u?q%ipIa$4`)<6IEPtsut; z3?aH9A#qEY$F)vRdQ%ngmZD0HFc)0UopMuh^#9g3>l0e8Zh!v6+k5(5r0OyCnW{d1 zs_LSol^d)-Dle=Vdzu!SH5pGwu0Gt6(&TPRSB$Y{EF5=<2sx#EBcqbQarsIbu|jOF z;r@N)&Q|~-ENJH}g7L8>1?0(0bES9P_R!b7bC7B*qaO%Xpt^}=MP}dEr1L9AP`Xwj z)eWUfn8jNLxp&L@?Gtz19U508U_$^v?H66`0R?)(C)x&tOI<^0)7qA+fZWW8Xm;L1 z4&UyY1*XLS`JTCUVzxG^LR40?d0|D?&o!6pq!Pv>bI=z7P|z44dzmkt8)*6iu5s(g zRu*}+0dU>;K{Lm^6X^vx=42w-sl6u21hrc>_BO$t;G#~pY8U725wJL3??9-=0%RD* z`Wjzegk%kx+BVnF0hq};BhH!)xq9J~%$ZnbcaCN+b9XqRg6Wq}Th@j7P6zhRhg||a zn>y4zIVGRR(wRkA6)^AxMIPPf=K<-@;Lx*lH0AYh59+jn+H9WL#J>gk22`uD$u@DB zFqf?C0m6eUBiY9^LOi6nOszz15Wx}rUA(HmW|Tvb6cUQHE%wl!;Z0z^6GT6( zA@mg1HrxXQdmLA`orJ7(DSG+pzDK;qBeD4jzk@dChyVsB-sX)!>uXi_W_D|WT{47U z0edsp_jU1(Tq@#oAulJ>&gVntS7JIG)De9J(6jm4uhl`)?I;Y&r;J@%f zgZQ2Od#S(XT?k-?x*oA&Zv+y5!Kwz&AY!dXyy<=AZy`Qm0rVBTwdOJ?pLo?S^gRM` zN2E;St%yl|$Hc3bMkBN7J?J`TD67XfoF;a4Q#w2~1m&?xhGK}_h$^>2KCiyo z2g^$hO>X=tscRb%ujg~x+T{diS|;!!PQsW zC`dG%Q|A}nGb%a2r};xcQ3h)Q!czPKrt17`3mckTt{|E-{(-T;r>3+ZCei_V@YGu> zHn&cgzD>=mmDk5xsx2J(;(TRvmM!V~|Gi3q+U$kl?hySi`K9g1s;VB_3-qy$uz;Y! zKJx~hzGmQE`qW|3UIDG2cs21hKNTKN&09H)fY;r6rs3}}{Ke~u?JQm&b2{nULwo39 zms6gFovh^W5QVuc9`ytBaZxJ({3vNmckI6uW1*_(I zW_XWBH#H^ZQbBvNoWQB%8AP$_9~t9tgyX&O6I;6ZW`Ulk-xRJsti=osBsHrh(@*Ew zvmOYTsGwFCMCqj6r*+cWP{|C#^(81mYO4aHij(jFoMb@sGDK$+h~AXroWct`E`k}Z zObsd2_(5aAa|HDlosH2;GiKj4wk}n{?QJar%m5E-u#QM5UGK}SE$gPyW75SyezbO0 zzuR2dF%nlOi7e8fISTxT>@>~S9bq9Yv|MG7@1as8-R3X#m7Nl~;Ep97Vn<4lyjXh6 u5*}=&D`M?;viRe`V~p6ft)|JcdE36o_K!yVW3mXl;B#ltQM|~E>;DCCovr}@ literal 0 HcmV?d00001 diff --git a/godot/UI/src/progressouter.png.import b/godot/UI/src/progressouter.png.import new file mode 100644 index 0000000..80ea82d --- /dev/null +++ b/godot/UI/src/progressouter.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/progressouter.png-d3de60f4aacc5453ec3d3cad80c52ba7.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://UI/src/progressouter.png" +dest_files=[ "res://.import/progressouter.png-d3de60f4aacc5453ec3d3cad80c52ba7.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0