extends Control # Declare member variables here. Examples: # var a = 2 # var b = "text" var spectrum_play var spectrum_record 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 streams_recorded_here = [] var stream_data = [] var position_changing_by_code var delays = [] var volumes = [] var backvolume = 1.0 # Called when the node enters the scene tree for the first time. func _ready(): Globals.loadConfig() # noop if startup has done it. ## This SHOULD be how the native support works : #var stream = VideoStreamGDNative.new() #$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.set_stream(load(OS.get_user_data_dir()+"/converted.webm")) #var file = $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer.stream.get_file() #print(file) #stream.set_file(file) #var vp = $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPlayer #vp.stream = stream #print(vp.stream.to_string()) #vp.stream_position = -1 #var duration = vp.stream_position #vp.stream_position = 0 #$MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/VideoPosSlider.max_value = duration ## So we're back to VideoStreamWebM $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_VideoStream(load(OS.get_user_data_dir()+"/converted.webm")) var duration = 313.701 $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_VideoDurationSeconds(duration) # And set up the recording bus and meters var idx = AudioServer.get_bus_index("Record") recorder = AudioServer.get_bus_effect(idx, 0) spectrum_play = AudioServer.get_bus_effect_instance(0,0) spectrum_record = AudioServer.get_bus_effect_instance(1,1) position_changing_by_code = false #$MarginContainer/VBoxContainer/HBoxContainer4/SaveButton.get_popup().add_item("Save separate streams") #$MarginContainer/VBoxContainer/HBoxContainer4/SaveButton.get_popup().add_item("Save mixed down") #$MarginContainer/VBoxContainer/HBoxContainer4/SaveButton.get_popup().add_item("Publish") # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): var magnitude: float = spectrum_play.get_magnitude_for_frequency_range(0,11050.0).length() var energy = clamp((60 + linear2db(magnitude)) / 60, 0, 1) $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer/PlaybackMeter.value = energy * 100 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 func _on_RecButton_pressed(): if recorder.is_recording_active(): $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.stop() raw_recording = recorder.get_recording() stream_data.append(raw_recording) delays.append(Globals.audio_delay_seconds) volumes.append(linear2db(1)) 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/MultiVolumeSlider.set_count(recorded_streams) $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer3/HBoxContainer/VBoxContainer/MultiDelaySlider.set_count(recorded_streams) else: $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" $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/Status.text = "Recording..." func _on_PlayButton_pressed(): var data = raw_recording.get_data() 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 (part)" $MarginContainer/VBoxContainer/HBoxContainer4/PublishButton.disabled = false $MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/RecordButton.disabled = true if !current_stream_added: $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.add_audio_stream(raw_recording,Globals.audio_delay_seconds) 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/MultiStreamVideoPlayer.set_volume_db(linear2db(value/100)) backvolume = linear2db(value/100) func _on_VocalSlider_value_changed(value): $AudioStreamPlayer.volume_db = linear2db(value/100) 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() stream_data.append(raw_recording) delays.append(Globals.audio_delay_seconds) volumes.append(linear2db(1)) 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 = "" 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)) if len(volumes) <= slider: volumes.append(value) else: volumes[slider] = value $MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/MultiStreamVideoPlayer.set_audio_volume_db(slider,linear2db(value/100)) pass # Replace with function body. func _on_MultiDelaySlider_delay_changed(slider, value): if len(delays) <= slider: delays.append(value) else: delays[slider] = value/1000 $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") func _on_PublishButton_pressed(): $MarginContainer/VBoxContainer.visible = false $MarginContainer/PublishPanel.visible = true $MarginContainer/PublishPanel.setBackVolume(backvolume) $MarginContainer/PublishPanel.setPartsVolumes(volumes) $MarginContainer/PublishPanel.setPartsDelays(delays) pass # Replace with function body.