createVoiceOverCommand = (dialogNode, speakerThangType) => {
  const soundIdPromise = store.dispatch('voiceOver/preload', { dialogNode, speakerThangType })
  const voiceOverPlayCommand = new SyncFunction(() =>
    store.dispatch('voiceOver/playVoiceOver', soundIdPromise)
  )

  voiceOverPlayCommand.undoCommandFactory = () => {
    return new SyncFunction(() => {
      store.dispatch('audio/fadeTrack', { to: 0, track: 'voiceOver', duration: 100 })
    })
  }

  return voiceOverPlayCommand
}
System for orchestrating the various sound commands.
An abstraction around the `howler.js` sound library.