检查声音文件是否存在javascript

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

我有一个HTML5文件,用javascript来加载声音。声音可能位于以下两个位置之一:

../../Apps/ app name / sounds 要么 ../../Shared/Sounds

应该发生的是,当调用函数getSound时,它首先检查声音的第一个位置,如果该文件不存在,则转到第二个位置。我之前尝试了几件事但没有成功。

N.B变量blink存储字符串“../../Apps/ app name”

function getSound(s){
   var url = blink + "sounds/" + s;

   var testSound = new Audio(url);
   if ( isNan(testSound.duration) ){
       url = "../../Shared/Sounds";
   }
   return new Audio(url);
};

这不起作用,因为显然持续时间在它开始播放之前仍然是NaN,所以isNan函数总是返回true。

我也尝试过在网上找到的fileExists功能:

function fileExists(url){
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

所以我要问的是,有没有办法检查声音文件是否存在使用javascript,或者你是否可以检查声音文件是否实际加载到你正在使用的变量。

javascript html5 audio
3个回答
3
投票

使用

var sound = new Audio("sample_src");
if(isNaN(sound.duration)) alert("Do something");

编辑:播放音频后播放。更好的选择:

var sound = new Audio("sample_src");
$(sound).on("canplay",function(){
//Do something if works
});

1
投票

如果该文件不存在,则会触发错误事件

mySound = new Audio(); 
mySound.onerror = function(){ alert("error");}; 
mySound.src = "xxxx";

问题是这不是同步的。


0
投票

你说的话在我看来很复杂。当音频对象加载文件时,如果未找到该文件,则浏览器会导致错误。如果要检查音频对象是否存在,只需检查服务器返回浏览器的文件时间。

这是正确的功能......

function audiovideoExist(ObjectAV){
    var exist = (Number.isFinite(ObjectAV.duration))? true: false;
    return exist;
}

因此,如果浏览器找到了一个源,则返回true,否则返回false。持续时间值将始终存在于有效的音频或视频对象中。

© www.soinside.com 2019 - 2024. All rights reserved.