当前位置:嗨网首页>书籍在线阅读

15-查找支持的音频格式

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.4.2 查找支持的音频格式

在上一节的代码能够运行之前,需要定义supportedAudioFormat()函数。由于audio对象是动态加入到HTML中的,因此没有办法像在HTML中那样定义多个标签。替代办法是,可以利用audio对象的canPlayType()函数得知可以加载何种音频文件格式。第6章已经介绍了canPlayType()方法,这里回顾一下。canPlayType()只有一个参数——MIME类型。函数返回3个文本字符串之一:maybe、probably或""(空字符串)。

使用这些字符串找出要加载和播放的媒体类型。鉴于是示例,像在第6章那样,假设maybe和probably都等价于yes,即可以播放。如果3种MIME类型中的任意一种(audio/ogg,、audio/wav、audio/mp3)能被支持,就返回该MIME类型对应的文件扩展名,这样就可以加载并播放声音了。

提示

下面的函数在本质上和第6章中处理视频类型的函数功能一样。这里明显的变化是改为了音频的MIME类型。

在下面的函数中,audio代表HTMLAudioElement的实例,程序将对其进行检测。变量returnExtension表示一个合法的扩展名,对应第一个找到的返回maybe或probably的MIME类型。

function supportedAudioFormat(audio){
  var returnExtension = "";
  if (audio.canPlayType("audio/ogg")=="probably" ||  
     audio.canPlayType("audio/ogg")== "maybe"){
      returnExtension = "ogg";
  } else if(audio.canPlayType("audio/wav")=="probably" ||   
    audio.canPlayType("audio/wav")== "maybe"){
      returnExtension = "wav";
  } else if(audio.canPlayType("audio/mp3")== "probably" ||   
    audio.canPlayType("audio/mp3")== "maybe"){
      returnExtension = "mp3";
  }
  return returnExtension;
}

注意,这里没有检查以下情况:未找到有效音频格式返回""空字符串。如果出现这种情况,那么函数中需要添加代码捕获这种情况并更改程序运行的方式。采用上一节描述的方法实现:检测返回值并使用alert()弹出消息。

提示

如果要在函数中检测无有效返回值的错误情况,仅需要在MIME类型中加一个额外字符(例如audio/oggx),就可以确保总能返回一个空字符串了。

或者,可以使用Modernizr来检测音频支持类型。如果在HTML页面中包含了Modernizr的JavaScript库(就像之前写的每个程序那样),则可以通过访问Modernizr.audio.ogg、Modernizr.audio.wav和Modernizr.audio.mp3的静态值来检测这些类型的有效性。这些值都不是布尔值,而是与调用canPlayType()函数一样,返回probably、maybe和空字符串。如果读者觉得Modernizr用起来更舒服,可以使用检测Modernizr静态值的代码替换对应的检测代码。