mp3splt works well. How well depends on what you have to start with and what you expect for results. More inputs = more outputs. If you know the number of songs contained in the large mp3 files, this helps to tell you the number of output files is correct. You MUST have silence sections between your songs in the large mp3 file. The key for mp3splt is to find the correct value for "th". If "th" is too low, you may have too many outputs, so all your songs are fragmented. If too high, your songs will not be split, and you may may have more than 1 song per split. Let's assume you have a large file and nothing else: eg no index for titles or times.
My large file is named "artist.ogg"
Here is the command I used:
mp3splt -s -p th=-40 artist.ogg
This resulted in 34 songs split correctly, each named serially as artist_silence_01.ogg -xx.ogg etc.
Again, if you have too many splits, try "th=-48". If too few, try "th=-36".
From these output files, you will need now to rename them into the song titles you want and add labels to the file properties. [I know of no macro for this, so must be a manual process].
hope this helps.
update PS.
So far, mp3splt works for mp3 and ogg files. I have no success yet for m4a files.
.cue
file to load this and play each track individually is another option.