Кросс-платформенный, кросс-браузерный способ воспроизведения звука из JavaScript?


Я пишу приложение dhtml, которое создает интерактивное моделирование системы. Данные для моделирования генерируются из другого инструмента, и уже существует очень большой объем устаревших данных.

некоторые шаги в моделировании требуют, чтобы мы играли "голос за кадром" клипы аудио. Я не смог найти простой способ сделать это в разных браузерах.

Soundmanager2 подходит довольно близко к тому, что мне нужно, но он будет только играть mp3-файлы и устаревшие данные могут содержать некоторые .wav-файлы, а также.

есть ли у кого-нибудь другие библиотеки, которые могли бы помочь?

9 79

9 ответов:

вы должны будете включить плагин, как реальный аудио или QuickTime для обработки .wav-файл, но это должно работать...

//======================================================================
var soundEmbed = null;
//======================================================================
function soundPlay(which)
    {
    if (!soundEmbed)
        {
        soundEmbed = document.createElement("embed");
        soundEmbed.setAttribute("src", "/snd/"+which+".wav");
        soundEmbed.setAttribute("hidden", true);
        soundEmbed.setAttribute("autostart", true);
        }
    else
        {
        document.body.removeChild(soundEmbed);
        soundEmbed.removed = true;
        soundEmbed = null;
        soundEmbed = document.createElement("embed");
        soundEmbed.setAttribute("src", "/snd/"+which+".wav");
        soundEmbed.setAttribute("hidden", true);
        soundEmbed.setAttribute("autostart", true);
        }
    soundEmbed.removed = false;
    document.body.appendChild(soundEmbed);
    }
//======================================================================

Если вы используете прототип, библиотека Scriptaculous имеет звуковой API. jQuery кажется, есть плагин тоже.

код dacracots-это чистый базовый dom, но, возможно, написанный без второй мысли? Конечно, вы сначала проверяете существование более раннего внедрения и сохраняете дубликат внедрить линии создания.

var soundEmbed = null;
//=====================================================================

function soundPlay(which)
{
    if (soundEmbed)
       document.body.removeChild(soundEmbed);
    soundEmbed = document.createElement("embed");
    soundEmbed.setAttribute("src", "/snd/"+which+".wav");
    soundEmbed.setAttribute("hidden", true);
    soundEmbed.setAttribute("autostart", true);
    document.body.appendChild(soundEmbed);
}

наткнулся на мысли здесь при сканировании для решения несколько подобной ситуации. К сожалению, мой браузер Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102814 Ubuntu/8.04 (hardy) Firefox / 3.0.15 умирает при попытке этого.

после установка последних обновлений, firefox все еще падает, opera продолжает жить.

Я считаю, что самым простым и удобным способом было бы воспроизведение звука с помощью небольшого флеш-клипа. Я ценю, что это не решение JavaScript, но это самый простой способ достичь своей цели

дополнительные ссылки из предыдущего аналогичный вопрос:

Мне понравился ответ дакракота... вот аналогичное решение в jQuery:

function Play(sound) {
    $("#sound_").remove()
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />');
}

вы можете использовать HTML5 <audio> тег.

Если вы используете Mootools, есть плагин MooSound.

<audio controls>
  <source src="horse.ogg" type="audio/ogg">
  <source src="horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>

см.http://www.w3schools.com/html/html5_audio.asp для более подробной информации.

есть гораздо более простое решение для этого, а не прибегая к плагинам. IE имеет свое собственное свойство bgsound, и есть еще один способ заставить его работать для всех других браузеров. Проверьте мой учебник здесь = http://www.andy-howard.com/how-to-play-sounds-cross-browser-including-ie/index.html