fadeTrack ({ state, dispatch }, { track, from, to, duration }) {
      const trackData = state.tracks[track]
      if (!trackData) {
        throw new Error('Invalid track specified')
      }

      const fades = Array.from(trackData.keys())
        .map(id => dispatch('fadeSound', { id, from, to, duration }))

      return Promise.all(fades)
    }
Fades a track between two volumes.

@param opts {object}
@param opts.track {string} track to fade
@param opts.from {number|undefined} start volume between 0 and 1
@param opts.to {number} finish volume between 0 and 1
@param opts.duration {number} duration of fade in milliseconds

@return Array of sound IDs that were faded

@throws {Error} when invalid track specified