The registration of a listener, also known as the Observer Pattern, is a common method used in event-based programming. It works well in small programs, but when a program becomes big and complex, it suffers scalability problems for several reasons. Erlang's actor model can improve the situation but doesn't fundamentally solve the problem.
(Functional) Reactive Programming is an alternative to both Observer and Actor, that removes barriers to scalability through its property of compositionality. Reactive programming can and should replace Observer wherever it is used.
There are many excellent reactive libraries available. Stephen Blackheath is the author of one of them - Sodium - available currently for Haskell, C++ and Java.
Note: There is a small gap where we lost audio completely (pizza guy called the phone that was recording audio and a short while later the camera battery ran out).