Як зробити аудіо автовідтворення на chrome


94

аудіозапуск аудіо працює в Mozilla, Microsoft edge і старому google chrome, але не в новому google chrome. вони заблокували автовідтворення. чи є спосіб зробити аудіовідтворення аудіо в google chrome?


7
Той факт, що Google зробив це, є абсурдом. Вони буквально просто сказали "ну ніякої музики для вашої гри, якщо користувач не натисне кнопку" Відтворити музику ". Неприйнятно. Такий злий!
Гоббс

2
@Hobbes Погодився. Принаймні, мають бути винятки. Як я вже згадував на іншому плакаті, у мене є сторінка "МУЗИКА" із посиланням на сайт "mymusic.html", на яку ви можете перейти лише за допомогою посилання / кнопки з чіткою міткою МОЯ МУЗИКА ". Досить абсурдно хтось піде туди і буде здивований або роздратований зразками музики, яка там відтворюється. Особливо з чіткою кнопкою STOP MUSIC "фіксована позиція". Ця політика є випадком надмірного реагування на образливі дії.
Ренді,

Відповіді:


104

Рішення No1

Моє рішення тут - створити iframe

<iframe src="audio/source.mp3" allow="autoplay" style="display:none" id="iframeAudio">
</iframe> 

і audioпозначте також для нехромних браузерів

<audio autoplay loop  id="playAudio">
    <source src="audio/source.mp3">
</audio>

і в моєму script

  var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
  if (!isChrome){
      $('#iframeAudio').remove()
  }
  else {
      $('#playAudio').remove() // just to make sure that it will not have 2x audio in the background 
  }

Рішення No2:

Існує також ще одне обхідне рішення для цього, за словами @Leonard

Створіть програму, iframeяка нічого не відтворює, лише щоб запустити автовідтворення при першому завантаженні.

<iframe src="silence.mp3" allow="autoplay" id="audio" style="display: none"></iframe>

хорошим джерелом для mp3-файлу silence.mp3

Тоді відтворюйте свій справжній аудіофайл з легкістю.

<audio id="player" autoplay loop>
    <source src="audio/source.mp3" type="audio/mp3">
</audio>

Особисто я віддаю перевагу рішенню №2, оскільки він є більш чистим підходом, оскільки не покладається на JavaScript.

Оновлення в серпні 2019 року

Рішення No3

Як альтернативу ми можемо використовувати <embed>

Для Firefox Здається, що автовідтворення аудіо працює, тому нам <embed>елемент не потрібен, оскільки він створить подвійний аудіозапуск.

// index.js
let audioPlaying = true,
    backgroundAudio, browser;
browser = navigator.userAgent.toLowerCase();
$('<audio class="audio1" src="audio.mp3" loop></audio>').prependTo('body');
if (!browser.indexOf('firefox') > -1) {
    $('<embed id="background-audio" src="audio.mp3" autostart="1"></embed>').prependTo('body');
    backgroundAudio = setInterval(function() {
        $("#background-audio").remove();
        $('<embed id="background-audio" src="audio.mp3"></embed>').prependTo('body');
    }, 120000); // 120000 is the duration of your audio which in this case 2 mins.
}

Крім того, якщо у вас є подія перемикання аудіо, не забудьте видалити створений <embed>елемент для аудіо.

Примітка: Після перемикання він перезапуститься з самого початку, тому <embed>що <audio>елемент уже видалено, і елемент буде відтворюватися як зазвичай зараз.

$(".toggle-audio").on('click', function(event) {
    audioPlaying = !audioPlaying;
    $("#background-audio").remove();

    clearInterval(backgroundAudio);
    if (audioPlaying){
        $(".audio1").play();
        // play audio 
    }
    else {
        $(".audio1").pause();
    }

А тепер не забудьте приховати ці елементи <audio>та <embed>елементи

audio, embed {
    position: absolute;
    z-index: -9999;
}

Примітка: diplay: noneі visibility: hiddenзмусить <embed>елемент не працювати.


Як зробити звуковий цикл?
Kwarrtz

1
Рішення 2 у мене спрацювало. Sidenote: якщо ви працюєте одночасно для Інтернету та Фонегапа, Фонегапу не потрібен цей обхідний шлях, і насправді він сприймає це досить погано. Отже, якщо у вас є загальна кодова база для Інтернету та Фонегапу, обов’язково знайдіть спосіб застосувати це обхідне рішення лише в Інтернеті.
Ігнасіо Сегура

2
Посилання на файл мовчання мертве, тому я знайшов інші файли мовчання на GitHub: github.com/anars/blank-audio . Я використовую 1-second-of-silence.mp3для свого проекту, але, мабуть, будь-який файл із цієї колекції буде працювати.
Тревіс,

13
Здається, зруйновано станом на Chrome 76.
mightyiam

3
Так, це вже не працює (якщо це спрацьовувало раніше)
Юліан

28

Існує дійсно акуратний фокус у використанні функції автоматичного відтворення звукового тегу в chrome.

Додати

<iframe src="silence.mp3" allow="autoplay" id="audio"></iframe>

тоді як silence.mp3лише 0,5 секунди мовчання.

Це

<audio id="player" autoplay controls><source src="0.mp3" type="audio/mp3"></audio>

працює згодом.

Chrome помічає, що звук відтворювався, і дає дозвіл на автоматичне відтворення в аудіо тегах.


5
Добре, хоча це працює, але також здається, що воно використовує помилку або, принаймні, ненавмисну ​​поведінку. Думаю, хтось повідомить про це Google, щоб я довго не покладався на це. Хороша знахідка!
Ніл Брайсон,

4
Трохи не в темі, але ваша тиша.mp3 досить велика - 36,7 тис. Спробуйте це (216 байт) - s3-eu-west-1.amazonaws.com/neilbryson.net.random/silence.mp3
Ніл Брайсон

3
silence.mp3 посилання мертве. Ви можете створити свій власний .
idbrii

1
@Toniq Звичайно, всі вибачення - s3-eu-west-1.amazonaws.com/omegasquadron.neilbryson.net/…
Ніл Брайсон,

1
Так, вони вже на цьому ... більше не працює ні в Firefox, ні в Chrome
Стефан Рейх,

15

З квітня 2018 року правила автоматичного відтворення Chrome змінилися:

"Політика автоматичного відтворення Chrome проста:

  • Завжди дозволяється приглушене автовідтворення.

Автоматичне відтворення зі звуком дозволено, якщо:

  • Користувач взаємодіяв з доменом (клацніть, торкніться тощо).
  • На робочому столі пороговий показник Media Engagement Index перевищений, тобто користувач раніше відтворював відео зі звуком.
  • На мобільному пристрої користувач додав сайт на свій домашній екран.

Також

  • Верхні кадри можуть делегувати дозвіл на автоматичне відтворення своїм фреймам, щоб дозволити автовідтворення зі звуком. "

На веб-сайті розробника Chrome є додаткова інформація, включаючи деякі приклади програмування, яку можна знайти тут: https://developers.google.com/web/updates/2017/09/autoplay-policy-changes


3
отже, ви говорите, що немає можливості автоматично відтворити звук у браузері chrome?
Акшай Ратход,

Крім того, у браузері Chrome в Android зараз є опція дозволів, коли користувач може вибрати, щоб дозволити звуки в автоматичному
zeta

8

Просто додайте цей невеликий сценарій, як зображено в https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio

<head>
<script>
window.onload = function() {
  var context = new AudioContext();
}
</script>
</head>

Тоді це буде працювати, як ви хочете:

<audio autoplay>
      <source src="hal_9000_sorry_dave.mp3">
</audio>

Чи можете ви надіслати мені скрипку для цієї реалізації? Це буде дуже корисно
Вікаш

5
Це вже не працює? Отримав таке повідомлення: "Запустити аудіоконтекст не можна. Його слід відновити (або створити) після жесту користувача на сторінці. Developers.google.com/web/updates/2017/09/… "
thdoan

Робота над Chrome 81.0.4044.138 на mac 👍
Мош

5

Принаймні ви можете використовувати це:

document.addEventListener('click', musicPlay);
function musicPlay() {
    document.getElementById('ID').play();
    document.removeEventListener('click', musicPlay);
}

Музика починається, коли користувач клацає в будь-якому місці сторінки.

Він також миттєво видаляє EventListener, тому, якщо ви використовуєте елементи керування звуком, користувач може його вимкнути або призупинити, і музика не запускається знову, коли він клацне десь ще ...


Я вважаю, що це на правильному шляху, дотримуючись нових правил, що вимагають ДЕЯКОЇ взаємодії користувачів для відтворення музики. Я додав це до події дотику, яку я вже додав для мобільних браузерів, і "іноді працюючої" події прокрутки. На жаль, політика "no play ()", здається, не дозволяє прокручувати коліщатко миші як взаємодію користувача, але я теж працюю над цим. Річ у тім, що моя сторінка - це МУЗИЧНА сторінка, що буквально називається "mymusic.html", до якої ви потрапляєте, слідуючи добре позначеній кнопці MUSIC. Отже, якщо коли-небудь була сторінка, яка б виправдала „гру” на навантаженні, це справді так!
Ренді

@Randy У мене дуже схожа ситуація, я працюю на музичній сторінці і хочу реалізувати автовідтворення. Додавання атрибута автовідтворення працювало дуже непослідовно - той самий код працює зрідка, але не завжди. У мене немає помилок консолі та мережі. Ви вирішили свою ситуацію?
Лазар, що сходить

@LazarusRising - Хоча все це, здавалося, починалося з телефонних браузерів, я помічаю нові версії браузерів для настільних комп'ютерів, які також відхиляють автоматичне відтворення. Треба сказати, я задоволений необхідністю, щоб подія, ініційована взаємодією користувача, запускала музику. Насправді навіть мене, як автора сторінки, починає дратувати перехід на мою сторінку та початок музики лише тому, що я торкнувся екрана. Я починаю розуміти логіку того, чому автоматичне відтворення відміняється. І оскільки це почало відбуватися повсюдно, я не відчуваю, що мій сайт єдиний, хто цього не може зробити.
Ренді

Chrome видає порушення за примусове відтворення.
Габріель Петерссон

2

Браузери змінили конфіденційність на автоматичне відтворення відео чи аудіо через рекламу, яка дратує. Тож ви можете просто обдурити код нижче.

Ви можете вставити будь-який тихий звук у фрейм.

<iframe src="youraudiofile.mp3" type="audio/mp3" allow="autoplay" id="audio" style="display:none"></iframe>
<audio autoplay>
    <source src="youraudiofile.mp3" type="audio/mp3">
</audio>

Просто додайте невидимий iframe із .mp3 як джерело та дозвольте = "autoplay" перед елементом аудіо. В результаті браузер обманюється запускати будь-який наступний аудіофайл. Або автоматично відтворити відео, яке не вимкнено.


2

Ви можете просто використовувати (.autoplay = true;) наступним чином (перевірено на Chrome Desktop):

<audio id="audioID" loop> <source src="path/audio.mp3"  type="audio/mp3"></audio>

<script>
var myaudio = document.getElementById("audioID").autoplay = true;
</script>

Якщо вам потрібно додати кнопки зупинки / відтворення:

<button onclick="play()" type="button">playbutton</button>
<button onclick="stop()" type="button">stopbutton</button>

<audio id="audioID" autoplay loop> <source src="path/audio.mp3"  type="audio/mp3"> 
</audio>

<script>
var myaudio = document.getElementById("audioID");

function play() { 
return myaudio.play(); 
};

function stop() {
return myaudio.pause(); 
};
</script>

Якщо ви хочете, щоб зупинка / відтворення були однією кнопкою:

<button onclick="PlayStop()" type="button">button</button>


<audio id="audioID" autoplay loop> <source src="path/audio.mp3"  type="audio/mp3"> 
</audio>

<script>
var myaudio = document.getElementById("audioID");

function PlayStop() { 
return myaudio.paused ? myaudio.play() : myaudio.pause();
};
</script>

Якщо ви хочете відобразити зупинку / відтворення на тій самій кнопці:

<button onclick="PlayStop()" type="button">Play</button>


<audio id="audioID" autoplay loop> <source src="path/audio.mp3"  type="audio/mp3"> 
</audio>

<script>
var myaudio = document.getElementById("audioID");

function PlayStop() { 
if (elem.innerText=="Play") {
    elem.innerText = "Stop";
}
else {
    elem.innerText = "Play";
}
return myaudio.paused ? myaudio.play() : myaudio.pause();
};`
</script>

У деяких браузерах звук може працювати некоректно, тому для хитрості спробуйте додати iframe перед кодом:

<iframe src="dummy.mp3" allow="autoplay" id="audio" style="display:none"></iframe>

<button onclick="PlayStop()" type="button">Play</button>


<audio id="audioID" autoplay loop> <source src="path/audio.mp3"  type="audio/mp3"> 
</audio>

<script>
var myaudio = document.getElementById("audioID");

function button() { 
if (elem.innerText=="Play") {
    elem.innerText = "Stop";
}
else {
    elem.innerText = "Play";
}
return myaudio.paused ? myaudio.play() : myaudio.pause();
};
</script>

Здається, не працює у версії Chrome 85.0.4183.83 (офіційна збірка) (64-розрядна
версія

1

Сьогодні я відвертався від цього, і я просто хотів додати до дискусії трохи цікавості, яку я виявив.

У всякому разі, я пішов з цього:

<iframe src="silence.mp3" allow="autoplay" id="audio" style="display:none"></iframe>
<audio id="audio" autoplay>
  <source src="helloworld.mp3">
</audio>

Це:

<audio id="myAudio" src="helloworld.mp3"></audio>
<script type="text/javascript">
  document.getElementById("myAudio").play();
</script>

І нарешті, це "рішення", яке дещо виходить за межі, якщо ви хочете просто створити власну річ (що ми і робимо):

<script src='https://code.responsivevoice.org/responsivevoice.js'></script>
<input onclick='responsiveVoice.speak("Hello World");' type='button' value='Play' />

Відкриття, яке я зробив, а також справді смішна (дивна? Дивна? Смішна?) Частина полягає в тому, що у випадку з колишніми двома, ви насправді можете перемогти систему, давши f5 належний стукіт; якщо ви повторно натиснете "оновити" дуже швидко (приблизно 5-10 разів це повинно зробити трюк), аудіо відтвориться автоматично, а потім відтвориться кілька разів після оновлення сигналу, лише щоб повернутися до злих шляхів. Фантастично!

В оголошенні від Google йдеться, що для того, щоб мультимедійні файли відтворювались «автоматично», повинна відбутися взаємодія між користувачем та сайтом. Тож найкраще «рішення», яке мені вдалося придумати дотепер, - це додати кнопку, що робить відтворення файлів менш автоматичним, але набагато стабільнішим / надійнішим.


3
Покладання на взаємодію з користувачем не є автоматичним відтворенням.
mightyiam

0

я використовував pixi.js та pixi-sound.js для автоматичного відтворення у chrome та firefox.

<script>

            PIXI.sound.Sound.from({
            url: 'audios/tuto.mp3',
            loop:true,
            preload: true,
            loaded: function(err, sound) {
                    sound.play();

            document.querySelector("#paused").addEventListener('click', function() {
            const paused = PIXI.sound.togglePauseAll();

            this.className = this.className.replace(/\b(on|off)/g, '');
            this.className += paused ? 'on' : 'off';

            });
            }
            });

</script>

HTML:

<button class="btn1 btn-lg off" id="paused">
    <span class="glyphicon glyphicon-pause off"></span>
    <span class="glyphicon glyphicon-play on"></span>
</button>

він також працює на мобільних пристроях, але користувач повинен торкнутися десь на екрані, щоб викликати звук.



0

тимчасове виправлення

$(document).on('click', "#buttonStarter", function(evt)
{
var context = new AudioContext();
document.getElementById('audioPlayer').play();
$("#buttonStarter").hide()
$("#Game").show()
});

Або скористайтеся користувацьким програвачем для запуску гри http://zohararad.github.io/audio5js/

Примітка. Автовідтворення буде відновлено 31 грудня


Це не відповідь, оскільки це не автовідтворення.
mightyiam

1
@mightyiam це обхідний шлях, оскільки немає можливості автовідтворення, оскільки chrome заблокував його
Youssef KH

0

Я додаю атрибут control занадто тег аудіо і просто приховую його в CSS. І все чудово працює в Chrome.

<audio autoplay loop controls id="playAudio">
  <source src="audio/source.mp3">
</audio>

1
Можливо, якщо ваш MEI для цього сайту дозволяє автовідтворення. В іншому випадку я не бачу причини, що це могло б спрацювати.
mightyiam

0

Минулого місяця Google змінив свою політику щодо автоматичного відтворення в Chrome. Перегляньте це оголошення .

Однак вони дозволяють автоматичне відтворення, якщо ви вставляєте відео, і воно вимкнено. Ви можете додати mutedвластивість, і це повинно дозволити відтворення відео.

<video autoplay controls muted>
  <source src="movie.mp4" type="video/mp4">
  <source src="movie.ogg" type="video/ogg">
  Your browser does not support the video tag.
</video>

4
я хочу, щоб звук відтворювався у фоновому режимі.
Акшай Ратход,

13
Автовідтворення приглушеного звуку не можна вважати відповіддю.
mightyiam

@Akshay Rathod ти знаходив рішення?
The Dead Man

0

Рішення без використання iframe або javascript:

<embed src="silence.mp3" type="audio/mp3" autostart="true" hidden="true">
        <audio id="player" autoplay controls><source src="source/audio.mp3" type="audio/mp3"></audio>

За допомогою цього рішення також уникається діалогове вікно відкриття / збереження Internet Explorer.

   <embed src="http://deinesv.cf/silence.mp3" type="audio/mp3" autostart="true" hidden="true">
        <audio id="player" autoplay controls><source src="https://freemusicarchive.org/file/music/ccCommunity/Mild_Wild/a_Alright_Okay_b_See_Through/Mild_Wild_-_Alright_Okay.mp3" type="audio/mp3"></audio>


1
Ні. Не працює у версії Chrome 85.0.4183.83 (офіційна збірка) (64-розрядна
версія

0

Відеотег може також відтворювати аудіо. Враховуючи те, що звуковий тег, здається, поводиться не так, як слід, ви можете просто використовувати відеотег для аудіо:

<video autoplay muted id="audio1" src="your.mp3" type="audio/mp3">
    Your browser does not support the <code>video</code> element.
</video>
<script>
    unmuteButton.addEventListener('click', function() 
        { 
            if ( unmuteButton.innerHTML == "unmute" )
            {
                unmuteButton.innerHTML = "mute";
                audio1.muted = false; 
            } else {
                unmuteButton.innerHTML = "unmute";
                audio1.muted = true; 
            }
        });
</script>

-2

Ви можете використовувати <iframe src="link/to/file.mp3" allow="autoplay">, якщо джерело має дозвіл на автоматичне відтворення. Більше інформації тут .


він показує елементи керування, і я нічого не хочу на сторінці. просто натисніть кнопку відтворення та паузи.
Акшай Ратход,

і як цикл аудіо?
Акшай Ратход,

1
@AkshayRathod, будь ласка, перевірте атрибут петлі HTML <audio> . Тоді як у XHTML мінімізація атрибутів заборонена, і атрибут циклу повинен бути визначений як <audio loop = "loop">.
hmd

-4

Атрибут audioавтоматичного відтворення HTML5 за замовчуванням не працює в chrome, але ви можете примусити аудіовідтворення аудіо за допомогою JavaScript. Спробуйте це:

document.getElementById('myAudio').play();

Це працює для мене.


3
справа не в тому, що автовідтворення "не працює", це в тому, що воно підпорядковується політиці, коли автовідтворення якщо не буде працювати, якщо вимоги політики не виконуються. Див. Developers.google.com/web/updates/2017/09/… . Цей код не обійде цю політику. Якщо це спрацювало для вас, це тому, що ви досягли межі та / або встановили якийсь прапор розробника. Але, як сказано на цій сторінці, ви не можете припустити, що це буде працювати для всіх.
ADyson

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