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

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

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

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

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

Ответы [ 9 ]

62 голосов
/ 09 октября 2008

Вам нужно будет подключить плагин, такой как 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);
    }
//======================================================================
10 голосов
/ 09 октября 2008

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

9 голосов
/ 20 декабря 2009

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

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 сохраняет работоспособность.

8 голосов
/ 09 октября 2008

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

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

6 голосов
/ 14 октября 2011

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

function Play(sound) {
    $("#sound_").remove()
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />');
}
5 голосов
/ 08 октября 2010

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

4 голосов
/ 09 октября 2008

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

3 голосов
/ 10 декабря 2012
<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.

1 голос
/ 13 мая 2014

Существует гораздо более простое решение, чем использование плагинов. В IE есть собственное свойство bgsound, и есть еще один способ заставить его работать для всех других браузеров. Посмотрите мой учебник здесь = http://www.andy -howard.com / как проигрывать звуки-кросс-браузер-включая-т.е. / index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...