使用javascript以不同格式提供音频文件

问题描述 投票:3回答:1

我正在使用以下代码播放声音文件:

var audio = new Audio();
audio.src = 'somePath/filename.ogg';
audio.volume = 10;
audio.autoPlay = false;
audio.preLoad = true;
// ...
audio.play();

它运作良好。但是,有些浏览器可能不支持ogg格式,所以我想添加mp3格式作为替代。我怎么能用javascript做到这一点?

作为参考,当您提供多种格式时,这就是纯HTML5中的样子:

<audio volume="10" preload="auto">
  <source src="filename.ogg" type="audio/ogg">
  <source src="filename.mp3" type="audio/mpeg">
</audio>

所以,基本上不是设置audio.src我需要将<source>元素添加到Audio对象。我怎么做呢?在javascript中有什么像new Source()的东西,我需要在这里使用,我可以以某种方式添加到audio

奖金问题:如果浏览器不支持任何提供的源格式,我可以以某种方式执行一些自定义代码,比如向用户打印消息,说他们的浏览器很糟糕吗? :)

javascript html5 html5-audio
1个回答
1
投票

也许不完全是你的想法,但你可以通过DOM API实现这一点?

// Create audio instance with different source times by means of the DOM API
function createAudio(sourceData) {

  const audio = document.createElement('audio')
  // audio.preload = 'auto', Redundant as source children are dynamically created
  audio.volume = 10
  audio.style.display = 'none'

  // Iterate each sourceInfo of input sourceData array
  for(var sourceInfo of sourceData) {

    const source = document.createElement('source')
    source.src = sourceInfo.src
    source.type = sourceInfo.type

    // Append each source to audio instance
    audio.appendChild(source)
  }

  document.appendChild(audio)

  // Update, forgot this - thanks @Kaiido!
  audio.load()

  return audio
}

// Usage
createAudio([
  { src : 'filename.ogg', type : 'audio/ogg' },
  { src : 'filename.mp3', type : 'audio/mpeg' },
])
© www.soinside.com 2019 - 2024. All rights reserved.