Warning: This answer may have a learning curve for you, but it fulfills at least most of your requirements.
You might try installing Termux on Android and then use the command-line media player called mpv on Termux (pkg install mpv). I like how even if you have a bluetooth keyboard (but it works with the screen keyboard, too), you can pause/play with the spacebar (or p), skip to the next track with enter, fast-forward/rewind with the arrow keys, q to quit, speed it up and slow it down with the brackets (and curly brackets), make the speed normal again with backspace, volume up/down with 0 and 9, and mute/unmute with the m button.
You can play m3u playlist files with mpv. Or you can play a directory the same way.
To shuffle, do mpv --shuffle myPlaylist.m3u
or mpv --shuffle myDirectory
(you can specify a filetype after that like mpv --shuffle myDirectory *.mp3
). To go back and forth in the playlist, you can use < and >.
To make the playlist repeat, use --loop-playlist. Note that when shuffling and repeating a playlist at the same time, it will reshuffle the playlist each time it repeats.
To toggle repeat 1 on/off press shift+L while it's playing (or use --loop-file). To make it so it's on by default, see this answer.
See the link below for more on loops.
Here's a help page for mpv:
https://mpv.io/manual/master/
If you want to program some Lua functions to pass in, you can do that, too! In addition to the manual above, see
https://github.com/mpv-player/mpv/blob/master/DOCS/man/lua.rst
Using a Lua script in a file named test.lua, here's an example of its contents (what this does is make it so when you pause the playback, it'll print "It worked!" to the screen; this method is adapted from the example in the github link above):
function on_pause_change(name, value)
if value == true then
print("It worked!")
end
end
mp.observe_property("pause", "bool", on_pause_change)
And here's an example of how you can pass it in (the = is necessary in this case):
mpv --script=test.lua somefile.mp3
Termux is good at staying active in the background while you do other stuff.
You'll probably want to download Termux from F-Droid if you want a recent version.
There are no ads. It's free. However, it won't show controls on the lock screen; however, you might be able to find a way to configure something to make that work with the Termux:Tasker app. I'm not sure what Tasker is, but I think it's this app.
You can use mpv on Linux, too (and use it for other things besides audio there, too, but video won't work on Termux by default).
I'm not sure what you mean by the usual albums feature (and, I don't know if mpv does that). You could probably write a script to do it, though!
Termux is a lot like a Linux command-line operating system. You'll need to know Linux command-line commands (like ls and cd).
If you want to access your Android music folder, you'll need to enable that with the command termux-setup-storage
, and then do cd ~/storage/music
to get there. ~
stands for your home directory path in Termux/Linux (so you don't have to type it out every time). cd
stands for change directory.
You can even configure audio equalizer settings, like this: "mpv -af superequalizer=1b=1:2b=1:3b=1:4b=1:5b=1:6b=1:7b=1:8b=1:9b=1:10b=1:11b=1:12b=1:13b=1:14b=1:15b=1:16b=1:17b=1:18b=1 myMusic.mp3
" (as seen here; the example I adapted from the link makes it flat).