Javascript 播放mp3时听到回声

Javascript 播放mp3时听到回声,javascript,html,mp3,Javascript,Html,Mp3,我目前在网站上播放mp3文件时遇到问题 我正在使用以下代码播放mp3声音: function playSound(url){ var userAgent = navigator.userAgent.toLowerCase(); var appVersion = navigator.appVersion.toLowerCase(); var appName = navigator.appName.toLowerCase(); var isOpera

我目前在网站上播放mp3文件时遇到问题

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

function playSound(url){

  var userAgent    = navigator.userAgent.toLowerCase();
  var appVersion   = navigator.appVersion.toLowerCase();
  var appName      = navigator.appName.toLowerCase();
  var isOpera      = (userAgent.indexOf('opera') != -1);
  var isIE         = (appName.indexOf('internet explorer') != -1) && !isOpera;

  switch(true)
  {
    case isIE      :
      $("#soundSpan").html(" <bgsound src='"+url+"' />");
      break;
    default        :
      $("#soundSpan").html(" <embed src='"+url+"' type='audio/mpeg' autostart=true repeat=false loop=false hidden=true></embed>");
  }

}
这对我和大多数用户都适用,但有些用户抱怨听到回声。这意味着他们多次听到同一声音,超过两次。声音非常短,从1秒到6秒不等。根据一些用户的说法,回声有时非常糟糕,他们无法理解所说的内容,mp3文件是口语句子。回声通常在2-3秒后停止

我确信我只播放了一次声音,而且回声出现在不同的浏览器中

有人知道这是怎么发生的吗?

如果您在单击处理程序中调用playSound,您的用户会双击吗?在大多数浏览器上,双击会导致除dblclick事件之外发生两次单击事件。你可能想要建立一些迟滞-例如,忽略第二次,第三次,第四次点击声音500毫秒后,第一次点击,诸如此类的事情

编辑:示例:

var soundsPlayed = {};
function playSound(url){

  var userAgent    = navigator.userAgent.toLowerCase();
  var appVersion   = navigator.appVersion.toLowerCase();
  var appName      = navigator.appName.toLowerCase();
  var isOpera      = (userAgent.indexOf('opera') != -1);
  var isIE         = (appName.indexOf('internet explorer') != -1) && !isOpera;
  var soundPlayed  = soundsPlayed['p:' + url];
  var now          = new Date().getTime();

  // If we haven't played this sound, or we haven't played it in the
  // last half-second, go ahead and play it.
  if (!soundPlayed || (now - soundPlayed) > 500) {

      // Remember when we played it
      soundsPlayed['p:' + url] = now;

      // Play it
      switch(true) // true??
      {
        case isIE      :
          $("#soundSpan").html(" <bgsound src='"+url+"' />");
          break;
        default        :
          $("#soundSpan").html(" <embed src='"+url+"' type='audio/mpeg' autostart=true repeat=false loop=false hidden=true></embed>");
      }
    }
}

您应该定义case-isMozilla:因为许多浏览器都在使用UserAgent:Mozilla等等。。。不仅是firefox浏览器本身,因此如果您使用chrome或其他类型的操作系统浏览器,它们可能会从您的脚本加载多个案例。

您在哪里调用playSound?何时调用playSound函数?在哪里以及如何定义“isMozilla”?许多UserAgent包含一个“Mozilla”string@BatchyX:这是一个很好的观点,但由于它也是默认值,因此实际上并不重要-playSound大多数时间是通过计时器调用的。我删除了isMozilla行,因为它不需要。这与其说是一个答案,不如说是一个评论。而且,代码并不是没有处理isMozilla事件;事实上,默认的JavaScript,如C和C++,默认情况下从一个case块到下一个块。唯一特别的分支是伊西。我不小心删除了这一行,当我把它清理到这里后。但我猜“case isMozilla”这句话也不相干。大多数时候声音都是用定时器播放的。有时会使用click处理程序,但回音会同时出现在situations@xta:嗯。仍然值得为它添加一点处理,看看这是否会有所不同;这非常简单,我在上面添加了一个示例。我将尝试等待我的用户进行测试,因为我自己无法复制它。但这并不能解释为什么只有前几秒钟的声音在回响。@xta:啊,我没意识到我以为声音很短。是的,没有。祝你好运!