Chromeでオーディオを自動再生する方法


94

オーディオの自動再生は、Mozilla、Microsoft Edge、古いGoogle Chromeでも機能しますが、新しいGoogleChromeでは機能しません。彼らは自動再生をブロックしました。それをグーグルクロームでオーディオ自動再生にする方法はありますか?


8
グーグルがこれをしたという事実はばかげている。彼らは文字通り「ユーザーがPlayMusicをクリックしない限り、ゲームに音楽はありません」と言っただけです。受け入れられない。とても怒っています!
ホッブズ

2
@Hobbes同意しました。少なくとも例外があるはずです。別のポスターで述べたように、サイトリンク「mymusic.html」が付いた「MUSIC」ページがあります。このページには、「MYMUSIC」という明確なラベルが付いたリンク/ボタンを使用する必要があります。そこに再生されているサンプル音楽に驚いたりイライラ特に明確な「定位置」STOPのMUSICボタンでこのポリシーは、虐待慣行への過剰反応の場合である。。。
ランディ

回答:


105

解決策#1

ここでの私の解決策は、 iframe

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

そして、audio非クロムブラウザ用タグaswell

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

解決策#2:

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

個人的には、JavaScriptにあまり依存しないためのよりクリーンなアプローチであるソリューション#2を好みます。

2019年8月更新

解決策#3

別の方法として、 <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: nonevisibility: hiddenなります<embed>要素が動作しません。


オーディオループをどのように作成しますか?
kwarrtz 2018

1
解決策2は私のために働いた。補足:WebとPhonegapで同時に作業している場合、Phonegapはこの回避策を必要とせず、実際にはかなり悪い結果になります。したがって、WebとPhonegapに共通のコードベースがある場合は、この回避策をWebのみに適用する方法を見つけてください。
イグナシオセグラ2018年

2
沈黙ファイルへのリンクが切れているので、GitHubで他の沈黙ファイルをいくつか見つけました:github.com/anars/blank-audio。私は1-second-of-silence.mp3自分のプロジェクトに使用していますが、このコレクションのどのファイルでも機能すると思います。
トラビス

14
Chrome 76の時点で
破壊さ

3
(それは、過去に仕事をした場合)うん、これはもう動作しません
Yulian

28

Chromeでオーディオタグの自動再生機能を使用するための本当に巧妙なトリックがあります。

追加

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

一方、silence.mp30.5秒の無音だけです。

この

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

後で動作します。

Chromeは、サウンドが再生されたことを認識し、オーディオタグでの自動再生を許可します。


6
OK、これは機能しますが、バグを悪用しているようにも感じます。少なくとも、意図しない動作をしているように感じます。誰かがこれをGoogleに報告するので、私はそれが長く機能することに依存しないと思います。でもいい発見!
ニールブライソン2018

5
少し話題から外れていますが、silence.mp3は36.7kとかなり大きいです。これを試してください(216バイト)-s3-eu-west-1.amazonaws.com/neilbryson.net.random/silence.mp3
Neil Bryson

3
silence.mp3リンクが無効になっています。あなたは、独自に作成することができます
idbrii 2018


2
ええ、彼らはそれに取り組んでいます... FirefoxでもChromeでももう動作しません
StefanReich20年

15

2018年4月の時点で、Chromeの自動再生ポリシーが変更されました。

「Chromeの自動再生ポリシーは単純です。

  • ミュートされた自動再生は常に許可されます。

次の場合、サウンドによる自動再生が許可されます。

  • ユーザーがドメインを操作しました(クリック、タップなど)。
  • デスクトップでは、ユーザーのメディアエンゲージメントインデックスのしきい値を超えています。これは、ユーザーが以前に音声付きの動画を再生したことを意味します。
  • モバイルでは、ユーザーは自分のホーム画面にサイトを追加しました。

また

  • 上位のフレームは、自動再生権限をiframeに委任して、音声付きの自動再生を許可できます。「」

Chromeの開発者サイトには、いくつかのプログラミング例を含む詳細情報があります。これは、https//developers.google.com/web/updates/2017/09/autoplay-policy-changesにあります。


3
つまり、Chromeブラウザでオーディオを自動再生する方法はないと言っているのですか?
Akshay Rathod 2018年

また、AndroidのChromeブラウザに権限オプションがあり、ユーザーは自動再生でサウンドを許可するように選択できます
ゼータ

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>

この実装のフィドルを送ってもらえますか?それは本当に便利になるだろう
Vikash

5
それはもう動作しませんか?このメッセージが表示されました:「AudioContextを開始することは許されなかったことは、ページ上のユーザのジェスチャ後に再開(または作成)する必要があります。。developers.google.com/web/updates/2017/09/...
thdoan

1
👍Mac上のクロム81.0.4044.138に取り組ん
モッシュFEU

5

少なくともこれを使用できます:

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

ユーザーがページの任意の場所をクリックすると、音楽が始まります。

また、EventListenerも即座に削除されるため、オーディオコントロールを使用すると、ユーザーはそれをミュートまたは一時停止でき、他の場所をクリックしても音楽は再開されません。


これは、音楽を再生するためにいくつかのユーザー操作を必要とする新しいポリシーに従うという正しい方向に進んでいると私は信じています。これを、モバイルブラウザ用にすでに追加したタッチイベントと、「時々機能する」オンスクロールイベントに追加しました。残念ながら、「no play()」ポリシーでは、マウスホイールのスクロールがユーザーインタラクションとしてカウントされないようですが、私もそれに取り組んでいます。私のページは文字通り「mymusic.html」と呼ばれるMUSICページであり、よくラベル付けされたMUSICボタンをたどることができます。したがって、「ロード時に再生」を正当化するページがあったとしても、それは本当に必要です!
ランディ

@Randy私は非常によく似た状況にあり、音楽ページで作業していて、自動再生を実装したいと思っています。自動再生属性の追加は非常に一貫性がなく機能しました。同じコードがときどき機能しますが、常に機能するとは限りません。コンソールまたはネットワークのエラーはありません。あなたはあなたの状況を解決しましたか?
ラザロライジング

@ LazarusRising-これはすべて電話ブラウザから始まったように見えたが、新しいバージョンのデスクトップブラウザも自動再生を拒否していることに気付いた。とはいえ、ユーザーインタラクションによってトリガーされるイベントで音楽を開始する必要性には満足しています。実際、ページの作成者である私でさえ、画面に触れたからといって、自分のページにアクセスして音楽を開始することにイライラし始めています。自動再生が段階的に廃止されている理由の論理がわかり始めています。そして、それが普遍的に起こり始めて以来、私は自分のサイトだけがそれを行うことができないとは感じていません。
ランディ

Chromeは強制プレイに対して違反をスローします。
GabrielPetersson20年

4

次のように(.autoplay = true;)を使用するだけです(Chromeデスクトップでテスト済み)。

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

停止/再生を1つのボタンにしたい場合:

<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ビット)では機能しないようです
MC9000 2010

2

迷惑な広告のため、ブラウザはプライバシーを自動再生ビデオまたはオーディオに変更しました。したがって、以下のコードでだますことができます。

サイレントオーディオはiframeに入れることができます。

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

ソースとして.mp3を使用し、audio要素の前にallow = "autoplay"を指定して非表示のiframeを追加するだけです。その結果、ブラウザはだまされて後続のオーディオファイルを開始します。または、ミュートされていないビデオを自動再生します。


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' />

私が行った発見と本当に面白い(奇妙な?奇妙な?ばかげた?)部分は、前の2つの場合、f5に適切なドキドキを与えることで実際にシステムを打ち負かすことができるということです。非常に高速に繰り返し更新を押すと(5〜10回程度はうまくいくはずです)、オーディオは自動再生され、その後、単一の更新時に数回再生されて、邪悪な方法に戻ります。素晴らしい!

グーグルからの発表では、メディアファイルが「自動的に」再生されるためには、ユーザーとサイトの間の相互作用が行われたに違いないと述べています。したがって、これまでに思いついた最善の「解決策」は、ボタンを追加して、ファイルの再生を自動ではなく、はるかに安定した信頼性の高いものにすることです。


3
ユーザーインタラクションに依存することは自動再生ではありません。
マイティアム

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/

注:自動再生は12月31日に有効になります


自動再生ではないため、これは答えではありません。
マイティアム

1
クロムはそれをブロックされたため、自動再生する方法がないので、これが回避策です@mightyiam
ユーセフKH

0

コントロール属性もタグオーディオに追加し、CSSで非表示にします。そして、Chromeではすべて正常に動作します。

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

1
おそらく、そのサイトのMEIで自動再生が許可されている場合です。そうでなければ、これがうまくいく理由がわかりません。
マイティアム

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
オーディオをバックグラウンドで再生したい。
Akshay Rathod 2018年

13
ミュートされたオーディオの自動再生は、答えとは見なされません。
マイティアム

@Akshay Rathodは解決策を見つけましたか?
デッドマン

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>

このソリューションでは、InternetExplorerの開く/保存ダイアログも回避されます。

   <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ビット)では機能しません
MC9000 2010

-1

ビデオタグはオーディオも再生できます。オーディオタグが正常に動作していないように見える場合は、オーディオにビデオタグを使用できます。

<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">オリジンに自動再生権限がある場合は、を使用できます。詳細はこちら


コントロールが表示されているので、ページに何も表示したくありません。ボタンを再生して一時停止するだけです。
Akshay Rathod 2018年

オーディオをループする方法は?
Akshay Rathod 2018年

1
@AkshayRathod HTML <audio>ループ属性を確認してください。一方、XHTMLでは、属性の最小化は禁止されており、ループ属性は<audio loop = "loop">として定義する必要があります。
hmd

-4

デフォルトのHTML5audio自動再生属性はChromeでは機能しませんが、JavaScriptを使用してオーディオの自動再生を強制することができます。これを試して:

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

これは私にとってはうまくいきます。


3
自動再生が「機能しない」ということではなく、ポリシー要件が満たされていない場合に自動再生が機能しないというポリシーの対象となるということです。Developers.google.com/web/updates/2017/09/…を参照してください。このコードはそのポリシーを回避しません。それがうまくいった場合、それはあなたがしきい値を満たしているか、開発者フラグを設定したためです。しかし、そのページにあるように、それがすべての人に役立つとは限りません。
ADyson

少なくともFF66では、これも機能しません。新しいポリシーは、play()がユーザーの操作によって何らかの理由でトリガーされなかった場合、それをブロックすることです。
ランディ

はい@Randy、およびWebブラウザーのコンソールに表示されるエラーメッセージは、対話せずにJSでサウンドを再生しようとすると、次のようになります。最初に文書化してください。」
Wild8x
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.