Added icons, a lot of refactoring and optimising
This commit is contained in:
170
MusicPlayer.gd
Normal file
170
MusicPlayer.gd
Normal file
@@ -0,0 +1,170 @@
|
||||
class_name MusicPlayer
|
||||
extends PanelContainer
|
||||
|
||||
# LOC 20/1-24: 136
|
||||
# LOC 12/6-24: 170
|
||||
|
||||
@onready
|
||||
var play_button: TextureButton = $MusicPlayerContainer/PlayTextureButton
|
||||
|
||||
@onready
|
||||
var restart_button: TextureButton = $MusicPlayerContainer/RestartTextureButton
|
||||
|
||||
@onready
|
||||
var audio_player: AudioStreamPlayer = $AudioStreamPlayer
|
||||
|
||||
@onready
|
||||
var progress_slider: HSlider = $MusicPlayerContainer/MusicPlayerSlider
|
||||
|
||||
@onready
|
||||
var music_time_label: Label = $MusicPlayerContainer/MusicTimeLabel
|
||||
|
||||
@onready
|
||||
var path: String = '/Users/sebastian/ResilioSync/Sorterat_test/Metal Gear Solid 4 - Guns of the Patriots/2-16 Metal Gear Saga.mp3'
|
||||
|
||||
var play_icon: Texture = preload("res://icons/play_icon.svg")
|
||||
var pause_icon: Texture = preload("res://icons/pause_icon.svg")
|
||||
|
||||
var songs: Array = []
|
||||
|
||||
var is_changing: bool = false
|
||||
var playback_position: float
|
||||
var stream: AudioStream
|
||||
|
||||
signal fetched
|
||||
signal winner(player_name: String)
|
||||
signal add_to_queue
|
||||
signal show_answer
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
play_button.pressed.connect(play_or_pause)
|
||||
restart_button.pressed.connect(restart)
|
||||
progress_slider.drag_started.connect(_on_drag_started)
|
||||
progress_slider.drag_ended.connect(_on_drag_ended)
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if audio_player.has_stream_playback() && !is_changing && !audio_player.stream_paused:
|
||||
progress_slider.value = audio_player.get_playback_position()
|
||||
if stream != null:
|
||||
music_time_label.text = format_text(progress_slider.value, stream.get_length())
|
||||
else:
|
||||
music_time_label.text = format_text(progress_slider.value, 0.0)
|
||||
|
||||
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 play_or_pause() -> void:
|
||||
if audio_player.stream_paused:
|
||||
play_button.texture_normal = pause_icon
|
||||
audio_player.stream_paused = false
|
||||
audio_player.seek(playback_position)
|
||||
print("continue")
|
||||
progress_slider.max_value = round(stream.get_length())
|
||||
progress_slider.tick_count = round(stream.get_length() / 60)
|
||||
else:
|
||||
audio_player.stream_paused = true
|
||||
playback_position = audio_player.get_playback_position()
|
||||
play_button.texture_normal = play_icon
|
||||
|
||||
func restart() -> void:
|
||||
audio_player.stop()
|
||||
audio_player.stream_paused = false
|
||||
progress_slider.value = 0
|
||||
playback_position = audio_player.get_playback_position()
|
||||
audio_player.seek(playback_position)
|
||||
play_button.texture_normal = pause_icon
|
||||
audio_player.play()
|
||||
|
||||
func _on_drag_started() -> void:
|
||||
is_changing = true
|
||||
|
||||
func _on_drag_ended(_changed: bool) -> void:
|
||||
audio_player.seek(progress_slider.value)
|
||||
playback_position = progress_slider.value
|
||||
is_changing = false
|
||||
|
||||
func _on_point_triggered(point: String) -> void:
|
||||
if point == "first":
|
||||
var value: int = randi_range(0, 10)
|
||||
if value == 0:
|
||||
play_sound(preload("res://sounds/sound1.mp3"))
|
||||
elif value < 5:
|
||||
play_sound(preload("res://sounds/intro_long.mp3"))
|
||||
else:
|
||||
play_sound(preload("res://sounds/intro_short.mp3"))
|
||||
elif point == "match":
|
||||
play_sound(preload("res://sounds/sound0.mp3"))
|
||||
|
||||
func play_sound(sound_name: AudioStream) -> void:
|
||||
audio_player.stream = sound_name
|
||||
audio_player.play()
|
||||
play_button.texture_normal = pause_icon
|
||||
stream = audio_player.stream
|
||||
progress_slider.max_value = round(stream.get_length())
|
||||
progress_slider.tick_count = round(stream.get_length() / 60)
|
||||
|
||||
func play_song(body: PackedByteArray) -> void:
|
||||
var sound: AudioStream = AudioStreamMP3.new()
|
||||
sound.data = body
|
||||
audio_player.stream = sound
|
||||
audio_player.play()
|
||||
play_button.texture_normal = pause_icon
|
||||
stream = audio_player.stream
|
||||
progress_slider.max_value = round(stream.get_length())
|
||||
progress_slider.tick_count = round(stream.get_length() / 60)
|
||||
|
||||
func song_fetched(body: PackedByteArray) -> void:
|
||||
print("song_fetched")
|
||||
var sound: AudioStream = AudioStreamMP3.new()
|
||||
sound.data = body
|
||||
print("play given song")
|
||||
audio_player.stream = sound
|
||||
audio_player.play()
|
||||
play_button.texture_normal = pause_icon
|
||||
stream = audio_player.stream
|
||||
progress_slider.max_value = round(stream.get_length())
|
||||
progress_slider.tick_count = round(stream.get_length() / 60)
|
||||
add_to_queue.emit()
|
||||
|
||||
if Settings.add_to_stats:
|
||||
Settings.make_request3("/music/played")
|
||||
if !Settings.stop_after_current:
|
||||
audio_player.finished.connect(fetch_next_song)
|
||||
if !Settings.hide_next_track:
|
||||
show_answer.emit()
|
||||
|
||||
func fetch_next_song() -> void:
|
||||
var url: String = ""
|
||||
if Settings.use_low_played_mode:
|
||||
url = "/music/rand/low"
|
||||
else:
|
||||
url = "/music/rand"
|
||||
Settings.make_request2(url, song_fetched, true)
|
||||
|
||||
func get_sound_test_song() -> void:
|
||||
Settings.make_request2("/music/soundTest", play_song, true)
|
||||
|
||||
##### LOCAL
|
||||
var local_path: String = '/Users/sebastian/ResilioSync/Sorterat_test/Metal Gear Solid 4 - Guns of the Patriots/2-16 Metal Gear Saga.mp3'
|
||||
|
||||
func load_mp3(_path: String) -> AudioStream:
|
||||
var file: FileAccess = FileAccess.open(_path, FileAccess.READ)
|
||||
var sound: AudioStream = AudioStreamMP3.new()
|
||||
sound.data = file.get_buffer(file.get_length())
|
||||
return sound
|
||||
|
||||
func play_local_song() -> void:
|
||||
if songs:
|
||||
local_path = songs[0]
|
||||
print(local_path)
|
||||
print(FileAccess.file_exists(local_path))
|
||||
play_sound(load_mp3(local_path))
|
||||
|
||||
func sound_test_local() -> void:
|
||||
play_sound(preload("res://01. Opening.mp3"))
|
||||
Reference in New Issue
Block a user