15-查找支持的音频格式
7.4.2 查找支持的音频格式
在上一节的代码能够运行之前,需要定义supportedAudioFormat()函数。由于audio对象是动态加入到HTML中的,因此没有办法像在HTML中那样定义多个
使用这些字符串找出要加载和播放的媒体类型。鉴于是示例,像在第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静态值的代码替换对应的检测代码。