Pico
I came to the same conclusion.
If you set pinMode after Begin its ok. I.e SPI doesn’t seem to clash with using the pin as GPIO.
However begin() is also called in setDivider() and setBitOrder as all thse functions basically have to configure the SPI control reg.
So the quick and dirty fix is to set PA4 to OUTPUT at the end of the begin() function.
we need to handle SPI2 and on some boards also SPI3. But we can put in a switch() to handle this.
But, I’m a bit concerned about the code putting pins into OUTPUT , in case for some bizarre reason, someone had for example decided to use PA4 as an input for flow control, like the Data Req line on the VS1003. As in that case, it would potentially damage some hardware.
So..
I think the best option is to write some code to get the pinMode of the relevant NSS pin before setting the SPI control reg, and then set the pinMode back to the saved state after setting the SPI control reg.
I know this will marginally slow things down, but SPI begin() is not normally called in time critical locations in the code.
@sheepdoll
Thanks for the info on the other File System code.
Using SD is a pain, as it only allows one file handle open at a time 
So I can even get a directory list, and then play the files one by one, because the directory list needs a file handle.
I did try writing a work around for the directory list stuff ( as I didnt need recursion into directories, I just stored how many files in the directory, that the MP3 player had played, then started each directory listing from the beginning and skipped over N files to get to the next one to play; but its all a bit hacky) I did consider a linked list for my files list, but malloc is likely to allocate loads of mem for a 8 + 3 file name string, so gave up on that idea.
I think in the longer term we should be able to get the latest version of SdFat working, as it somehow works for Victor.