The sound card interrupts would be analogous to the audio stream events that we emit when the steam needs to be refilled. For a music player, you're more likely to be using an ALLEGRO_AUDIO_STREAM. You could check the status when you get an ALLEGRO_EVENT_AUDIO_STREAM_FRAGMENT, to save polling more than necessary. I think it should work even if you use al_load_audio_stream, which is a stream driven by an hidden thread instead of by the user.
We could also generate events for when a sample instance reaches one of the end points (to generalise it to looping samples), but we currently don't.