Compare commits

...

7 Commits

Author SHA1 Message Date
bucket 745b7c43c4 Translations and fixed streamer window 2026-02-26 21:40:22 +01:00
bucket 2be692e55c QOL changes
added opening the source url, and opening playlist folders, fixed ugly icons
2026-02-26 21:20:48 +01:00
Bucket Of Chicken 38655756e3 first steps for opening the source url on songs 2025-08-25 04:35:16 +02:00
Bucket Of Chicken f5a8e811ff fixed up and down keys not working 2025-08-25 02:39:35 +02:00
Bucket Of Chicken 8a6c01dce9 fixed streamer window wrongfully appearing 2025-08-25 02:36:56 +02:00
Bucket Of Chicken 65bcb540be Merge branch 'main' of https://github.com/realbucketofchicken/Simplaudio 2025-08-10 07:42:58 +02:00
Bucket Of Chicken 1af6294a3f Update readme.md 2025-08-10 07:40:02 +02:00
35 changed files with 158 additions and 73 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=1.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+1 -1
View File
@@ -21,7 +21,7 @@ compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@@ -38,7 +38,7 @@ func get_mp3_metadata(stream: AudioStreamMP3) -> MusicMetadata:
return meta
var v = "ID3v2.%d.%d" % [header[3], header[4]]
if v == "ID3v2.4.0" or v == "ID3v2.3.0":
if v == "ID3v2.4.0" or v == "ID3v2.3.0" or v == "ID3v2.2.0":
var flags = header[5]
var _unsync = flags & 0x80 > 0
var extended = flags & 0x40 > 0
@@ -66,15 +66,18 @@ func get_mp3_metadata(stream: AudioStreamMP3) -> MusicMetadata:
match frame_id:
"TBPM", 'TBP':
meta.bpm = int(get_string_from_data(data, idx, size))
"TIT2":
"TIT2","TT2":
print("a " + str(Array(data.slice(idx, idx + 3)).hash()))
print([1, 0xff, 0xfe].hash())
meta.title = get_string_from_data(data, idx, size)
"TALB", 'TAL':
meta.album = get_string_from_data(data, idx, size)
"COMM":
meta.comments = get_string_from_data(data, idx, size)
"TYER":
"COMM","COM":
var string:String = get_string_from_data(data, idx, size)
print("got comment " + string)
if string:
meta.comments = string
"TYER","TYE":
meta.year = int(get_string_from_data(data, idx, size))
"TPE1", 'TP1':
meta.artist = get_string_from_data(data, idx, size)
+1 -6
View File
@@ -232,11 +232,6 @@ script = ExtResource("1_ubs1p")
LoopPressed = ExtResource("2_iolk5")
LoopNotPressed = ExtResource("5_c2g63")
[node name="OSMediaIntigration" type="Control" parent="."]
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="WallpaperManager" type="Node2D" parent="." node_paths=PackedStringArray("Daytime", "Evening", "Nighttime")]
script = ExtResource("4_y372l")
Daytime = NodePath("../Daytime")
@@ -921,7 +916,7 @@ offset_left = -64.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "v1.6.2"
text = "v1.6.3"
horizontal_alignment = 2
[node name="SettingsButton" type="Button" parent="."]
+8 -5
View File
@@ -64,7 +64,7 @@ layout_mode = 2
custom_minimum_size = Vector2(70, 0)
layout_mode = 2
focus_mode = 0
text = "Play"
text = "PLAY"
[node name="OptionsDropdown" type="MenuButton" parent="HSplitContainer/HBoxContainer"]
modulate = Color(0.724643, 0.724643, 0.724643, 1)
@@ -72,10 +72,13 @@ custom_minimum_size = Vector2(20.505, 0)
layout_mode = 2
icon = ExtResource("2_im6ur")
expand_icon = true
item_count = 2
popup/item_0/text = "Change Directory"
popup/item_1/text = "Delete"
popup/item_1/id = 1
item_count = 3
popup/item_0/text = "Open Directory"
popup/item_0/id = 2
popup/item_1/text = "Change Directory"
popup/item_1/id = 0
popup/item_2/text = "DELETE"
popup/item_2/id = 1
[node name="FileDialog" type="FileDialog" parent="."]
title = "Open a Directory"
+12
View File
@@ -66,6 +66,18 @@ texture = ExtResource("2_haeb5")
expand_mode = 3
stretch_mode = 5
[node name="TextureRect2" type="TextureRect" parent="ColorRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
texture = ExtResource("3_j8vo6")
expand_mode = 3
stretch_mode = 6
[node name="TextureRect" type="TextureRect" parent="ColorRect"]
layout_mode = 1
anchors_preset = 15
+27 -22
View File
@@ -1,33 +1,39 @@
[gd_scene load_steps=3 format=3 uid="uid://ctqcbjrmxaqsk"]
[gd_scene load_steps=4 format=3 uid="uid://ctqcbjrmxaqsk"]
[ext_resource type="Script" uid="uid://c3aaxhp0oim08" path="res://Scripts/search_item.gd" id="1_j4126"]
[ext_resource type="Texture2D" uid="uid://dwvy6crqhardn" path="res://Icons/Dropdown.png" id="2_hicj1"]
[ext_resource type="Script" uid="uid://dd38vqi4220tx" path="res://Scripts/SongSource.cs" id="3_ftuau"]
[node name="SearchItem" type="Control"]
[node name="SearchItem" type="Control" node_paths=PackedStringArray("soung_source")]
custom_minimum_size = Vector2(0, 30)
layout_mode = 3
anchors_preset = 14
anchor_top = 0.5
anchors_preset = 10
anchor_right = 1.0
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 4
script = ExtResource("1_j4126")
soung_source = NodePath("Node")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
custom_minimum_size = Vector2(700, 32)
custom_minimum_size = Vector2(200, 32)
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -16.0
offset_right = 700.0
offset_bottom = 16.0
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="Songname" type="Button" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
focus_mode = 0
flat = true
alignment = 0
text_overrun_behavior = 1
clip_text = true
[node name="Dropdown" type="Button" parent="HBoxContainer"]
custom_minimum_size = Vector2(20, 0)
layout_mode = 2
@@ -38,17 +44,16 @@ flat = true
icon_alignment = 1
expand_icon = true
[node name="Songname" type="Button" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
focus_mode = 0
flat = true
alignment = 0
[node name="PopupMenu" type="PopupMenu" parent="."]
item_count = 1
size = Vector2i(116, 100)
item_count = 2
item_0/text = "DELETE"
item_0/id = 0
item_1/text = "OPEN SOURCE"
item_1/id = 1
[node name="Node" type="Node" parent="."]
script = ExtResource("3_ftuau")
[connection signal="pressed" from="HBoxContainer/Dropdown" to="." method="_on_dropdown_pressed"]
[connection signal="pressed" from="HBoxContainer/Songname" to="." method="_on_songname_pressed"]
[connection signal="pressed" from="HBoxContainer/Dropdown" to="." method="_on_dropdown_pressed"]
+16
View File
@@ -0,0 +1,16 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using ATL;
using Godot;
public partial class SongSource : Node{
public String TryGetSongUrl(String path){
Track theTrack = new(path);
if (theTrack.AdditionalFields.TryGetValue("comment", out string value)){
return value;
}
return "";
}
}
+1
View File
@@ -0,0 +1 @@
uid://dd38vqi4220tx
+7 -3
View File
@@ -1,5 +1,6 @@
class_name MainScene
extends Control
static var instance:MainScene
@onready var file_dialog: FileDialog = $FileDialog
@onready var music_player: AudioStreamPlayer = $MusicPlayer
@onready var randomize_list: Button = $RandomizeList
@@ -83,6 +84,7 @@ var LoadingSaveFailed:bool = true
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
instance = self
playing_now.visible = false
get_tree().root.min_size = Vector2(850,492)
current_progress.drag_ended.connect(SongDragStopped)
@@ -169,7 +171,9 @@ func _ready() -> void:
play_all.button_pressed = true
if data.has("UsingPlayingNow"):
UsingPlayingNow = data["UsingPlayingNow"]
settings_menu_child.now_playing_window_button.button_pressed = true
if UsingPlayingNow:
print("!!! using stereamer window !!!")
settings_menu_child.now_playing_window_button.button_pressed = true
if data.has("OverriddenLocale"):
TranslationServer.set_locale(data["OverriddenLocale"])
overridden_locale = data["OverriddenLocale"]
@@ -539,9 +543,9 @@ func _process(_delta: float) -> void:
#time_listening_song.text = str(music_player.get_playback_position())
if Input.is_key_pressed(KEY_DOWN):
if Input.is_action_pressed("ui_down"):
volume_slider.value -= 1*_delta *50
if Input.is_key_pressed(KEY_UP):
if Input.is_action_pressed("ui_up"):
volume_slider.value += 1*_delta *50
if CurrentLenght == 0:
+6 -4
View File
@@ -18,14 +18,16 @@ func _ready() -> void:
CorrectlyName()
options_dropdown.get_popup().id_pressed.connect(dropdown_pressed)
func dropdown_pressed(Idx:int):
match options_dropdown.get_popup().get_item_text(Idx):
"Change Directory":
func dropdown_pressed(Id:int):
match Id:
0:
_on_select_directory_pressed()
"Delete":
1:
confirmation.show()
"Rename":
pass
2:
OS.shell_open(PlaylistLocation)
Parent.SaveEverything()
func Delete():
+11 -2
View File
@@ -6,6 +6,7 @@ var songidx:int
@onready var songname: Button = $HBoxContainer/Songname
@onready var dropdown: Button = $HBoxContainer/Dropdown
@onready var popup_menu: PopupMenu = $PopupMenu
@export var soung_source: Node
signal PlayPressed
@@ -16,8 +17,16 @@ func _ready() -> void:
popup_menu.index_pressed.connect(popupPressed)
func popupPressed(idx:int):
if idx == 0:
DeletePressed.emit(songidx)
match idx:
0:
DeletePressed.emit(songidx)
1:
var songdir = MainScene.instance.CurrentDir + "/" + MainScene.instance.textSongs[songidx]
var source:String = soung_source.TryGetSongUrl(songdir)
print("Source: "+source)
if source:
OS.shell_open(source)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
+2 -1
View File
@@ -190,6 +190,7 @@ func _on_reset_bg_pressed() -> void:
func _on_now_playing_window_button_toggled(toggled_on: bool) -> void:
print("!!! PLAYING NOW TOGGLED TO ",toggled_on)
Parent.UsingPlayingNow = toggled_on
Parent.SaveEverything()
print("!!! PLAYING NOW IS ",Parent.UsingPlayingNow)
+9
View File
@@ -0,0 +1,9 @@
<Project Sdk="Godot.NET.Sdk/4.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="z440.atl.core" Version="7.3.0" />
</ItemGroup>
</Project>
+19
View File
@@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simplaudio", "Simplaudio.csproj", "{135675D8-011A-46FC-B4A1-B2D21C2CF78E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
ExportDebug|Any CPU = ExportDebug|Any CPU
ExportRelease|Any CPU = ExportRelease|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{135675D8-011A-46FC-B4A1-B2D21C2CF78E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{135675D8-011A-46FC-B4A1-B2D21C2CF78E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{135675D8-011A-46FC-B4A1-B2D21C2CF78E}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
{135675D8-011A-46FC-B4A1-B2D21C2CF78E}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
{135675D8-011A-46FC-B4A1-B2D21C2CF78E}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
{135675D8-011A-46FC-B4A1-B2D21C2CF78E}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
EndGlobalSection
EndGlobal
+6 -6
View File
@@ -1,12 +1,12 @@
# Simplaudio
a simple music player that just works
a simple music player
the v1.x versions are built on a bad codebase, i am working on 2.0 every now and then but it will take a bit for it to be finished
the music player is very functual though
the v1.x versions are built on a bad codebase, i am working on fixing it every now and then
## Translations
I would apprechiate if you could help out with translations,
if you want to help you can find a .csv under the folder called "translation"
create a fork of the repo and modify the translations.csv file with a program like excel or libreoffice calc to include your language
then create a pull request including your translations
if you want to help you can find a .csv under the folder called "translation",
create a fork of the repo and modify the translations.csv file with a program like excel or libreoffice calc to include your language.
After that create a pull request including your translations.
I will then merge the translations(annoy me if i forget)
+1
View File
@@ -0,0 +1 @@
,bucket,cachyos-x8664,26.02.2026 21:32,file:///home/bucket/.var/app/org.libreoffice.LibreOffice/config/libreoffice/4;
+7 -2
View File
@@ -14,7 +14,7 @@ UPDATE,Update,Updaten
SETTINGS,SETTINGS,EINSTELLUNGEN
INTIGRATIONS,INTIGRATIONS,INTIGRATIONEN
DRPC,discord rich presense,Discord aktivitäten
DRPC_NOTE,NOTE: After disableing a restart is needed,Nach deaktivieren neustarten
DRPC_NOTE,NOTE: After disableing simplaudio needs a restart,Nach dem deaktivieren muss Simplaudio neugestartet werden
LOOKS,LOOKS,AUSEHEN
BS_SELECT,Select Background,Hintergrund auswählen
RESET_BG,Reset,Zurücksetzen
@@ -72,7 +72,7 @@ UPD_ERR_CLT,a client error occurred,ein client error ist passiert
UPDT_OUT_END, Is Out!, Ist raus!
IMPORTANT,(Important),(Wichtig)
UPD_UPDATING,Updating…,Updated…
UPD_ERR_CODE,DOWNLOAD FAILED ERROR CODE: ,DOWLOAD FEHLER CODE:
UPD_ERR_CODE,DOWNLOAD FAILED ERROR CODE: ,"DOWLOAD FEHLER, CODE: "
UPD_UNZIP_PANT,unzipping…,entpacken…
SONG_SEARCH,Search…,Suchen…
FOLDER_SELECT,Select Current Folder,Wähle einen ordner aus
@@ -84,3 +84,8 @@ DL_LIST,Download Playlist,Playliste Herunterladen
DL_DIALOG,Do you want to download the song or the Entire playlist?,Willst du die playlist herunterladen?
LANGUAGE,Language:,Sprache:
SELECT,Select ,Auswählen
OPEN SOURCE,open source,Quelle oeffnen
Change Directory,Change Directory,Ordner Aendern
Open Directory,Open Directory,Ordner Oeffnen
PLAY,Play,Abspielen
use Up/Down arrow keys to adjust,use Up/Down arrow keys to adjust,Bentzte die Hoch/Runter pfeiltasten zum aendern
1 key en de
14 DRPC discord rich presense Discord aktivitäten
15 DRPC_NOTE NOTE: After disableing a restart is needed NOTE: After disableing simplaudio needs a restart Nach deaktivieren neustarten Nach dem deaktivieren muss Simplaudio neugestartet werden
16 LOOKS LOOKS AUSEHEN
17 BS_SELECT Select Background Hintergrund auswählen
18 RESET_BG Reset Zurücksetzen
19 SETTINGS_SOUND SOUND SETTINGS AUDIO EINSTELLUNGEN
20 PITCH_SPEED pitch/speed Ton höhe/geschwindigkeit
72 DL_SONG Download Song Nur Lied Herunterladen
73 DL_LIST Download Playlist Playliste Herunterladen
74 DL_DIALOG Do you want to download the song or the Entire playlist? Willst du die playlist herunterladen?
75 LANGUAGE Language: Sprache:
76 SELECT Select Auswählen
77 OPEN SOURCE open source Quelle oeffnen
78 Change Directory Change Directory Ordner Aendern
84
85
86
87
88
89
90
91
Binary file not shown.
Binary file not shown.