setTrack (trackId) {
    const
      t = this,
      radios = t.captionsButton.querySelectorAll('input[type="radio"]'),
      captions = t.captionsButton.querySelectorAll(`.${t.options.classPrefix}captions-selected`),
      track = t.captionsButton.querySelector(`input[value="${trackId}"]`)
    ;

    for (let i = 0; i < radios.length; i++) {
      radios[i].checked = false;
    }

    for (let i = 0; i < captions.length; i++) {
      removeClass(captions[i], `${t.options.classPrefix}captions-selected`);
    }

    track.checked = true;
    const labels = siblings(track, (el) => hasClass(el, `${t.options.classPrefix}captions-selector-label`));
    for (let i = 0; i < labels.length; i++) {
      addClass(labels[i], `${t.options.classPrefix}captions-selected`)
    }

    if (trackId === 'none') {
      t.selectedTrack = null;
      removeClass(t.captionsButton, `${t.options.classPrefix}captions-enabled`);
      t.deactivateVideoTracks();
    } else {
      const track = t.getTrackById(trackId);
      if (track) {
        if (t.selectedTrack === null) {
          addClass(t.captionsButton, `${t.options.classPrefix}captions-enabled`);
        }
        t.selectedTrack = track;
        t.activateVideoTrack(t.selectedTrack.srclang);
      }
    }

    const event = createEvent('captionschange', t.media);
    event.detail.caption = t.selectedTrack;
    t.media.dispatchEvent(event);
  }
@param {String} trackId, or "none" to disable captions