在播放mp3时听到回音

时间:2010-09-06 13:53:29

标签: 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      = (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秒后停止。

我确定我只播放一次声音,并且回声出现在不同的浏览器中。

有没有人知道如何发生这种情况?

2 个答案:

答案 0 :(得分:0)

如果您在playSound处理程序中呼叫click,您的用户是否可以双击?在大多数浏览器中,双击会导致发生两个click事件(除dblclick事件外; example)。你可能想要建立一些滞后 - 例如,在第一次点击之后忽略第二次(第三次,第四次)点击声音500ms,这种事情。

修改:实施例:

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>");
      }
    }
}

答案 1 :(得分:0)

你应该定义case isMozilla :,因为很多浏览器都在使用UserAgent:Mozilla等...不仅仅是firefox浏览器,所以如果你使用chrome或其他类型的OS浏览器,他们可能会加载几个你的剧本。