private void createAudioElement() {
    if (endedRegistration != null) {
      endedRegistration.removeHandler();
    }
    if (audio != null) {
      // TODO: remove, once DOM attachment no longer required to sink (bitless) events
      audio.removeFromParent();
    }
    assert Audio.isSupported();
    audio = Audio.createIfSupported();
    assert audio != null;
    AudioElement elem = audio.getAudioElement();
    assert elem != null;

    endedRegistration = audio.addEndedHandler(endedHandler);

    // TODO: remove, once DOM attachment no longer required to sink (bitless) events
    RootPanel.get().add(audio);

    if (isCrossOrigin()) {
      elem.setAttribute("crossOrigin", "anonymous");
    }
    elem.setSrc(getUrl());
  }