extends PanelContainer # LOC 20/1-24: 136 @onready var play_button := $HBoxContainer/PlayButton @onready var pause_button := $HBoxContainer/PauseButton @onready var stop_button := $HBoxContainer/StopButton @onready var audio := $AudioStreamPlayer @onready var progress := $HBoxContainer/HSlider @onready var label := $HBoxContainer/Label @onready var path = '/Users/sebastian/ResilioSync/Sorterat_test/Metal Gear Solid 4 - Guns of the Patriots/2-16 Metal Gear Saga.mp3' var songs := [] var is_changing: bool = false var playback_position: float var stream: AudioStream signal fetched func set_songs(new_songs) -> void: songs = new_songs func make_request(address, func_name) -> void: var http_request = HTTPRequest.new() add_child(http_request) http_request.request_completed.connect(func_name) # Perform a GET request. The URL below returns JSON as of writing. var error = http_request.request(address) if error != OK: push_error("An error occurred in the HTTP request.") # Called when the node enters the scene tree for the first time. func _ready() -> void: play_button.pressed.connect(fetch_first_song) pause_button.pressed.connect(pause) stop_button.pressed.connect(stop) progress.drag_started.connect(_on_drag_started) progress.drag_ended.connect(_on_drag_ended) func format_time(time: float) -> String: var mins: String = "%02d" % floor(time / 60) var sec: String = "%02d" % round(fmod(time, 60)) return mins + ":" + sec func format_text(part: float, total: float) -> String: return format_time(part) + " / " + format_time(total) func _process(_delta): if audio.has_stream_playback() && !is_changing && !audio.stream_paused: progress.value = audio.get_playback_position() label.text = format_text(progress.value, stream.get_length()) func fetch_first_song() -> void: var first_song_fetched = func(result, _response_code, _headers, body): if result != HTTPRequest.RESULT_SUCCESS: push_error("Song couldn't be downloaded. Try a different song.") var sound = AudioStreamMP3.new() sound.data = body Settings.make_request2("/music/addQue", func(): fetched.emit(), true) play(sound) Settings.make_request2("/music/rand", first_song_fetched, true) func add_que(_result, response_code, _headers, _body) -> void: print("response_code", response_code) fetched.emit() func play(song) -> void: if audio.stream_paused: audio.stream_paused = false audio.seek(playback_position) print("continue") elif song: print("play given song") audio.stream = song audio.play() stream = audio.stream else: if songs: path = songs[0] print(path) print(FileAccess.file_exists(path)) audio.stream = load_mp3(path) print("play") audio.play() stream = audio.stream progress.max_value = round(stream.get_length()) progress.tick_count = round(stream.get_length() / 60) func pause() -> void: audio.stream_paused = true playback_position = audio.get_playback_position() func stop() -> void: audio.stop() audio.stream_paused = false progress.value = 0 func _on_drag_started() -> void: is_changing = true func _on_drag_ended(_changed) -> void: audio.seek(progress.value) playback_position = progress.value is_changing = false func load_mp3(_path) -> AudioStream: var file = FileAccess.open(_path, FileAccess.READ) var sound = AudioStreamMP3.new() sound.data = file.get_buffer(file.get_length()) return sound