Maybe made things worse here.

SoundManager sounds are not free, so the obvious thing to do is wrap them in a factory which can be executed if they actually wind up being needed.

Unfortunately, there are situations where I am displaying things about the sounds (like whether or not it's paused) but I don't want to trigger initializing the sound. So, the interface is `soundFactory`, where `soundFactory()` will initialize a sound if necessary, and `soundFactory.sound` will return the sound only if it's already initialized.

The button directive gets a `soundFactory` proper on the story page and just a `sound` in the global player. Further, the "factory" that the button receives changes over the course of browsing the site, but the object passed needs to stay the same object. For these two reasons, the directive shims whatever it is passed into this thing you're looking at. That way, we can modify the value it will resolve to (by reassigning the `sound` property on it).

An earlier implementation basically set whatever value was passed in (and $watched) as the `sound` property on this factory shim. This meant that sometimes it was a factory and sometimes it was a sound. This changed the contract of what the `sound` property of a `soundFactory` could be - sometimes it was a sound and sometimes it was another factory. At that point, I wrote loops to cover this case, but you're right it didn't feel exactly good. For this reason, I changed it so that factories would be assigned to the `factory` property instead of the `sound` property of our shim. It's important to note that setting the `factory