Услышав эхо во время воспроизведения mp3 - PullRequest
0 голосов
/ 06 сентября 2010

В настоящее время у меня возникают проблемы при воспроизведении 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 голосов
/ 06 сентября 2010

Вы должны определить case isMozilla :, так как многие браузеры используют UserAgent: Mozilla и т. Д ... Не только браузер Firefox сам по себе, поэтому, если вы используете браузер Chrome или другой вид ОС, они могут загрузить несколько сценариев из вашего скрипта.

0 голосов
/ 06 сентября 2010

Если вы звоните playSound в обработчике click, могут ли ваши пользователи дважды щелкнуть мышью?В большинстве браузеров двойной щелчок вызывает два события click (в дополнение к событию 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>");
      }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...