I tested wav/mp3 playback on a STM32F411.
First I made a simple WAV player, outputting the signal using filtered PWM, which gave a suprising good sound for 8-bit resolution. The quality drop was as much more noticeable when lowering sample rate.
Later, I enhanced it to MP3 decoding, sending the samples to a PCM5102A I2S DAC. The sound was absolutely fantastic, without noises, very crisp.
Both use a similar method, using DMA in circular buffer mode.
Half transfer/full transfer DMA interrupts makes it work like double buffering, so you all you need is to keep filling the corresponding half with samples from the USB drive.
PWM uses a timer to drive the DMA request at the audio the sample frequency. I2S uses its own PLL and drives DMA directly.
Wav PWM player is
here.
Wav/Mp3 I2S player is
here.
But the basic approach is there. Make a buffer with your samples and start the DMA. If the whole wave fits into your buffer, the you don't need any cpu operation, it will keep sending the samples in a loop.