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

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

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

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

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

Ответ 1

Вам придется включить плагин, например Real Audio или 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);
    }
//======================================================================

Ответ 3

dacracots code - чистый базовый 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 (выносливый) Firefox/3.0.15 умирает при попытке этого.

После установки последних обновлений firefox по-прежнему падает, опера сохраняется.

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

<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.

Ответ 9

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