Ok, I have used your code and it works perfectly.
However it has a drawback. I'm not an expert in ObjectAL, we should ask @Karl, but if I remember well, ALSource objects are fully stored in memory. ALSource isn't streamed as OALAudioTrack. More info here.
Some numbers from my game, using Xcode Instruments Allocations test and a 2:40 duration track:
33.57 MB (no background music)
34.04 MB (using OALAudioTrack, audio streaming)
60.70 MB (using ALSource)
Using ALSource means loading the entire audio file into memory (around 26 MB in this case). If memory consumption is not a problem for you, then your method is very handy, in my opinion.
If you're worried about memory consumption, then I suppose it's better to use two separate audio files and OALAudioTrack objects.