What are you initially setting the variable BackgroundColour to? Just setting up blocks the same as what you have above, I am unable to replicate the issue with the sound not stopping upon clicking the button.
One thing to change is to put the set variable and navigate to blocks inside the “then do” section of the call sound block. Because those function call blocks do not pause the code. So when you stack them on top of each other like you’ve done, the set variable block happens essentially at the same time as the call sound block and then the navigate block fires immediately after that. To force those two blocks to fire after the sound stops, put them in the “then do” section.