It's been awhile since I've set this stuff up, but that doesn't look right to me. The first part, your create event is fine, and the second part should play once, unless async events don't allow sounds to be played which they might not, but that isn't how you play sounds. I'm also pretty sure that the audiogroup_default automatically loads and you don't need to do anything with it. You only need to load in your own custom groups. You don't even 'need to' do the async event, as, in this case, it just checks to make sure the group is loaded, though you should to prevent errors. My basic set up looks like this:
Code:
/// create event of my audio controller
audio_group_load(music);
/// async event of my audio controller
if (audio_group_is_loaded(music)) {
MUSIC_LOADED = true;
}
///another object - simplified from the actual code
if (MUSIC_LOADED == true) {
room_goto(next);
}
Essentially, my music controller is created in an 'initialize room' (a blank room with a number of objects that set up some basic stuff such as music) at the start of the game and loads in all my audio groups - music group shown here as an example. The async event checks to see if it has loaded and if it has sets a global variable to true. My main controller object is checking a variety of things (in this case simplified to just music) and when they are all true, it goes to the next room which is the start of the game. And I don't play any sounds in my initialize room. Once the group is loaded, you can just call play sound whenever you want.
EDIT: Just checked, async will play sounds however, it does not fire for loading the default audio group. Only custom audio groups. Mostly likely because you don't need to, and maybe even can't, load the default audio group yourself.