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


78

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

Деякі етапи моделювання вимагають, щоб ми відтворювали аудіокліпи із замовкою. Я не зміг знайти простий спосіб досягти цього в багатьох браузерах.

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

Хтось має інші бібліотеки, які можуть допомогти?


5
Радий, що ви знайшли своє рішення, але незалежно від цього, ви можете розглянути можливість перетворення цих файлів .wav у файли .mp3. Якщо трохи знизити якість звуку, ви зможете зменшити розмір файлу від 1/3 до 1/10 розміру файлу хвилі. Може зробити речі трохи більш чуйними під час відтворення звуків.
infocyde

Відповіді:


61

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

15
Я ніколи не розумію голосів проти. Це працює. Я його розгорнув у своєму додатку. Чому це заслуговує на голосування проти?
dacracot

2
Я не знаю, чому за вас проголосували, можливо, за вживання слів "справжнє аудіо" або "швидкий час" .. ?? Можливо, людина, яка проголосувала за вас, не мала уявлення про те, як це було зроблено? Як на мене, +1, ваш код приблизно такий самий, як той, що використовується у плагіні jQuery, зазначеному в найбільш прийнятій відповіді ...
koni

1
Іноді я думаю, що це тому, що я написав код, а не називав поточний популярний API, який, як ви вже сказали, робить точно те саме.
dacracot

1
чудове рішення і моєї проблеми. +1.
mauris

3
однак, схоже, він не відтворює звуковий файл у FF3.0. працює в Chrome 3, IE7.
mauris

9

Якщо ви використовуєте Prototype, бібліотека Scriptaculous має звуковий API . Здається, jQuery також має плагін .


5
На посилання плагіна jQuery відповідає 403.
Аріон

Друге посилання у відповіді мертве - "Цей сайт недоступний" .
Панг

@Pang Кожна відповідь на це питання на даний момент давно застаріла. У наші дні ви хотіли б використовувати універсально підтримувані аудіо API HTML5. Я закрив це запитання як копію більш сучасного.
ceejayoz

8

код 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 продовжує працювати.


7

Я вважаю, що найпростішим та найзручнішим способом буде відтворення звуку за допомогою невеликого флеш-кліпу. Я розумію, що це не рішення JavaScript, але це найпростіший спосіб досягти своєї мети

Деякі додаткові посилання з попереднього подібного запитання :


1
Але я не можу знайти флеш-рішень для відтворення WAV-файлів. Здається, флеш підтримує лише MP3. Я розгляну плагін scriptaculous, але я ненавиджу включати цілу додаткову бібліотеку для цієї єдиної функції.
Джейк Стівенсон,

5

Ви можете використовувати <audio>тег HTML5 .


Питання конкретно задавало рішення "Кроссплатформенний, крос-браузерний". HTML5 <audio>тег не працює в IE8-, Android 2.2-, IOS Safari 3.2-або Opera Mini: caniuse.com/#feat=audio
Jasdeep Халса

NB у 2018 році HTML5 Audio підтримується всіма, крім Opera.
Ейдан Коннеллі,

5

Мені сподобалась відповідь dacracot ... ось подібне рішення в jQuery:

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



1

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


Ваше рішення виглядає цікаво, я спробую. Зауважте, на сторінці, на яку ви посилаєтесь, є коментар, який свідчить, що в IE11 аудіо працює в нескінченному циклі. Це все ще проблема? Чи є спосіб уникнути цього?
Кевін Феган

0

Для крос-браузерного рішення з файлами wav я б запропонував зробити <audio>тег за замовчуванням, а потім перейти до <embed>рішення, яке @dacracot запропонував раніше тут, якщо користувач перебуває в IE, ви можете легко це перевірити, трохи пошукавши тут, у SO.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.