As this is my first ever answer on here, excuse me for possible mistakes.
Data bindings in Angular work by a thing called digest cycle, which whenever called checks for differences between your view and your model. If you call a function from your view like you do with
click="testAudio()"
it's automatically wrapped in an $apply() funtion, which starts an digest cycle and updates your view. When your timeout then completes the boolean changes to false, but Angular doesn't know, so you have to either call $apply() manually or use the $timeout service angular has build in.
Maybe try this link where this topic is explained further
Understanding Angular's $apply() and $digest()[
^]