I am leaning Godot, not so much as a video game creator but rather an easy way to make some apps. Godot is a free game development tool and engine.
I was playing around with playing audio and came up with this. I have not found too much in the way of GUI and audio beyond games so I hope this is helpful to others. This is just a working example, not a full program. I am still learning and it will likely be a lot more involved with many changes along the way. I may post all that work too. Here is the layout:

The control script is as follows (main.gd):
extends Control
# Player controls.
var audioPlayer = null
var DefaultSound = preload("res://tracks/Waves and Seagulls.wav")
func _ready():
#get_stylebox("panel", "" ).set_texture(load("res://Assets/zenbg.png"))
audioPlayer = AudioStreamPlayer.new()
self.add_child(audioPlayer)
audioPlayer.stream = DefaultSound
func _on_PlayPause_pressed():
var button = get_node("Panel/VBoxContainer/HBoxMenu/PlayPause")
if button.text == "Play":
if audioPlayer.get_stream_paused() == false:
audioPlayer.play()
else:
audioPlayer.set_stream_paused(false)
button.text = "Pause"
else:
audioPlayer.set_stream_paused(true)
button.text = "Play"
func _on_Stop_pressed():
if audioPlayer.get_stream_paused() == true:
audioPlayer.set_stream_paused(false)
audioPlayer.stop()
get_node("Panel/VBoxContainer/HBoxMenu/PlayPause").text = "Play"
func _on_ItemList_item_selected(index):
var sound = get_node("Panel/VBoxContainer/ItemList").get_item_text(index)
print("res://tracks/" + sound)
DefaultSound = load("res://tracks/" + sound)
audioPlayer.stream = DefaultSoundAnd the ItemList script (ItemList.gd):
extends ItemList
# Collect wav files and populate listbox. I will change these to ogg
# at some point. I also want each item to be a panel with multiple audio
# tracks, icon, and desc.
func _ready():
get_audio_resources("res://tracks/")
func get_audio_resources(tracks_path):
var base_dir = Directory.new()
if base_dir.open(tracks_path) == OK:
base_dir.list_dir_begin()
var file_name = base_dir.get_next()
while file_name:
print("Found file: " + file_name)
#if base_dir.current_is_dir():
# If you need to capture directories
# continue # This doesn't work for some reason.
if file_name.ends_with("wav"):
self.add_item(file_name)
file_name = base_dir.get_next()
else:
print("Unable to read resource path.")If you want to download and review or run the project it is available here.
