Chrome'da otomatik ses çalma nasıl yapılır


94

Mozilla, Microsoft edge ve eski google chrome'da da çalışan ancak yeni google chrome'da çalışmayan otomatik ses oynatma. otomatik oynatmayı engellediler. google chrome'da sesli otomatik oynatma yapmanın bir yolu var mı?


7
Google'ın bunu yaptığı gerçeği saçmadır. Kelimenin tam anlamıyla "bir kullanıcı Müzik Çal'ı tıklamadıkça oyununuz için müzik yok" dediler. Kabul edilemez. Çok kızgın!
Hobbes

2
@Hobbes Kabul Edildi. En azından istisnalar olmalı. Başka bir posterde bahsettiğim gibi, "MÜZİĞİM" olarak açıkça etiketlenmiş bir bağlantı / düğme ile ulaşabileceğiniz "mymusic.html" site bağlantısına sahip bir "MÜZİK" sayfam var. Oldukça saçma biri oraya gidip orada çalınan örnek müzik karşısında şaşırmış veya rahatsız olmuş. Özellikle net bir "sabit pozisyon" MÜZİĞİ DURDUR düğmesi ile. Bu politika, kötüye kullanım uygulamalarına aşırı tepki verme durumudur.
Randy

Yanıtlar:


104

1.Çözüm

Buradaki çözümüm bir iframe

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

ve audioChrome olmayan tarayıcılar için de etiketleyin

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

ve benim 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.Çözüm:

@Leonard'a göre bunun için başka bir çözüm daha var

Bir Oluştur iframeilk yükte autoplay tetiklemek için sadece bir şey oynamak gelmez.

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

mp3 dosyası silence.mp3 için iyi bir kaynak

Ardından gerçek ses dosyanızı rahatça çalın.

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

Şahsen ben 2. çözümü tercih ediyorum çünkü JavaScript'e çok fazla güvenmemek için daha temiz bir yaklaşım.

Ağustos 2019 Güncellemesi

3. Çözüm

Alternatif olarak kullanabiliriz <embed>

For Firefox Biz gerekmez ses otomatik olarak oynatan çalıştığını görünüyor <embed>bu çifte ses çalışan yaratacaktır çünkü elemanı.

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

Ayrıca sesiniz için bir geçiş etkinliğiniz varsa, ses için oluşturulan <embed>öğeyi kaldırdığınızdan emin olun .

Not: Geçişinizden sonra <embed>, zaten silinmiş olduğundan baştan başlayacaktır ve <audio>öğe artık normal şekilde oynatılacaktır.

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

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

Şimdi bunları <audio>ve <embed>öğeleri gizlediğinizden emin olun

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

Not: diplay: noneve visibility: hiddenyapacak <embed>eleman yaramayacak.


Ses döngüsünü nasıl yaparsınız?
Kwarrtz

1
Çözüm 2 benim için çalıştı. Not: Aynı anda hem web hem de Phonegap için çalışıyorsanız, Phonegap bu geçici çözüme ihtiyaç duymaz ve aslında oldukça kötüdür. Dolayısıyla, web ve Phonegap için ortak bir kod tabanınız varsa, bu geçici çözümü yalnızca web'de uygulamanın bir yolunu bulduğunuzdan emin olun.
Ignacio Segura

2
Sessizlik dosyasının bağlantısı kesildi , bu yüzden GitHub'da başka sessizlik dosyaları buldum: github.com/anars/blank-audio . Projem için kullanıyorum 1-second-of-silence.mp3, ancak bu koleksiyondaki herhangi bir dosya çalışacak sanırım.
Travis

13
Chrome 76 itibariyle
bozulmuş

3
Evet, bu artık işe yaramıyor (geçmişte işe
yaradıysa

28

Kromda ses etiketinin otomatik oynatma işlevini kullanmak için gerçekten güzel bir numara var.

Ekle

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

oysa silence.mp3sadece 0,5 saniyelik sessizlik.

Bu

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

daha sonra çalışır.

Chrome, bir sesin çalındığını fark eder ve ses etiketlerinde otomatik çalma izni verir.


5
Tamam, bu işe yarasa da, aynı zamanda bir hatayı veya en azından istenmeyen bir davranışı kullanıyormuş gibi hissediyor. Birisinin bunu Google'a rapor edeceğini hayal ediyorum, böylece uzun süre çalışmasına güvenmem. Yine de güzel bul!
Neil Bryson

4
Biraz konu dışı ama silence.mp3'ünüz 36.7k ile oldukça büyük. Bunu deneyin (216 bayt) - s3-eu-west-1.amazonaws.com/neilbryson.net.random/silence.mp3
Neil Bryson

3
silence.mp3 bağlantısı öldü. Kendinizinkini yaratabilirsiniz .
idbrii


1
Evet, devam ediyorlar ... artık ne Firefox'ta ne de Chrome'da çalışmıyor
Stefan Reich

15

Nisan 2018 itibarıyla Chrome'un otomatik oynatma politikaları değişti:

"Chrome'un otomatik oynatma politikaları basittir:

  • Sessiz otomatik oynatmaya her zaman izin verilir.

Sesli otomatik oynatmaya şu durumlarda izin verilir:

  • Kullanıcı alanla etkileşim kurdu (tıklama, dokunma vb.).
  • Masaüstünde, kullanıcının Media Engagement Index eşiği aşıldı, bu da kullanıcının daha önce sesli video oynattığı anlamına geliyor.
  • Kullanıcı, mobil cihazda siteyi ana ekranına eklemiştir.

Ayrıca

  • Üst çerçeveler, sesli otomatik oynatmaya izin vermek için iç çerçevelerine otomatik oynatma izni atayabilir. "

Chrome'un geliştirici sitesinde, burada bulabileceğiniz bazı programlama örnekleri de dahil olmak üzere daha fazla bilgi vardır: https://developers.google.com/web/updates/2017/09/autoplay-policy-changes


3
Yani krom tarayıcıda sesi otomatik olarak çalmanın bir yolu olmadığını mı söylüyorsunuz?
Akshay Rathod

Ayrıca, Android'deki Chrome Tarayıcıda artık kullanıcının otomatik
zeta

8

Bu küçük komut dosyasını https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio'da gösterildiği gibi eklemeniz yeterli

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

Bundan sonra istediğiniz gibi çalışacak:

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

Bu uygulama için bana bir keman gönderir misiniz? Gerçekten yardımcı olacak
Vikash

5
Artık çalışmıyor mu? Şu mesajı aldım: "AudioContext'in başlamasına izin verilmedi. Sayfada bir kullanıcı hareketinden sonra devam
ettirilmesi

Mac'te Chrome 81.0.4044.138 üzerinde çalışma 👍
Mosh Feu

5

En azından bunu kullanabilirsin:

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

Müzik, kullanıcı sayfanın herhangi bir yerine tıkladığında başlar.

Aynı zamanda EventListener'ı da anında kaldırır, böylece ses kontrollerini kullanırsanız, kullanıcı sesi kapatabilir veya duraklatabilir ve başka bir yere tıkladığında müzik tekrar başlamaz.


Bunun, müzik çalmak için BAZI kullanıcı etkileşimini gerektiren yeni politikalara uymanın doğru yolda olduğuna inanıyorum. Bunu, mobil tarayıcılar için daha önce eklediğim dokunma etkinliğine ve "bazen çalışan" bir kaydırma etkinliğine ekledim. Maalesef "oynatma yok ()" politikası fare tekerleği kaydırmasının kullanıcı etkileşimi olarak sayılmasına izin vermiyor gibi görünüyor, ancak bunun üzerinde de çalışıyorum. Mesele şu ki, sayfam tam anlamıyla "mymusic.html" olarak adlandırılan ve iyi etiketlenmiş bir MUSIC düğmesini takip edebileceğiniz bir MUSIC sayfası. Öyleyse, 'yüklemede oynamayı' haklı çıkaracak bir sayfa varsa, bu gerçekten gerekir!
Randy

@Randy Çok benzer bir durumdayım, bir müzik sayfası üzerinde çalışıyorum ve otomatik oynatmayı uygulamak istiyorum. Otomatik oynatma özniteliğinin eklenmesi tutarsız bir şekilde çalıştı - aynı kod ara sıra çalışır, ancak her zaman değil. Konsol veya ağ hatam yok. Durumunuzu çözdünüz mü?
Lazarus Rising

@LazarusRising - Bunların hepsi telefon tarayıcılarında başlamış gibi görünse de, masaüstü tarayıcıların daha yeni sürümlerinin de otomatik oynatmayı reddettiğini fark ediyorum. Yine de söylemeliyim ki, kullanıcı etkileşimi tarafından tetiklenen bir olayın müziği başlatması ihtiyacından memnunum. Aslında sayfa yazarı olarak ben bile sayfama giderken ve ekrana dokunduğum için müziğin başlamasına kızmaya başlıyorum. Otomatik oynatmanın neden aşamalı olarak kaldırıldığının mantığını görmeye başladım. Ve evrensel olarak gerçekleşmeye başladığından beri, sitemin bunu yapamayacağını düşünmüyorum.
Randy

Chrome, oyunu zorlamak için ihlal atıyor.
Gabriel Petersson

2

Can sıkıcı Reklamlar nedeniyle tarayıcılar, gizliliklerini video veya sesi otomatik oynatacak şekilde değiştirdi. Yani aşağıdaki kodla hile yapabilirsiniz.

Herhangi bir sessiz sesi iframe'e koyabilirsiniz.

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

Yalnızca kaynağı .mp3 olan görünmez bir iframe ekleyin ve ses öğesinden önce allow = "autoplay" yazın. Sonuç olarak, tarayıcı sonraki herhangi bir ses dosyasını başlatması için kandırılır. Veya sesi kapatılmamış bir videoyu otomatik oynatın.


2

Aşağıdaki gibi (.autoplay = true;) kullanabilirsiniz (Chrome Masaüstü'nde test edilmiştir):

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

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

Durdur / oynat düğmeleri eklemeniz gerekiyorsa:

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

Durdurma / oynatmanın tek bir düğme olmasını istiyorsanız:

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

Aynı düğme üzerinde durdurma / oynatmayı görüntülemek istiyorsanız:

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

Bazı tarayıcılarda ses düzgün çalışmayabilir, bu yüzden kodunuzdan önce iframe eklemeyi deneyin:

<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 (Resmi Derleme) (64-bit)
MC9000

1

Bugün bunu beceriyordum ve tartışmaya keşfettiğim küçük bir merakı eklemek istedim.

Her neyse, bundan kurtuldum:

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

Bu:

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

Ve son olarak bu, kendi işinizi yaratmayı tercih ederseniz, biraz sınırların dışında olan bir "çözüm" (ki biz yapıyoruz):

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

Yaptığım keşif ve aynı zamanda gerçekten komik (tuhaf, tuhaf? Gülünç?) Kısmı, ilk ikisi söz konusu olduğunda, sistemi f5'e düzgün bir vuruş yaparak gerçekten yenebilirsiniz; Yenilemeye tekrar tekrar çok hızlı bir şekilde basarsanız (bazı 5-10 kez hile yapması gerekir), ses otomatik olarak çalınır ve ardından bir tek yenilemeden sonra yalnızca kötü yollarına dönmek için birkaç kez çalınır. Fantastik!

Google'dan yapılan duyuruda, medya dosyalarının "otomatik" oynatılabilmesi için kullanıcı ile site arasında bir etkileşim olması gerektiği yazıyor. Bu yüzden şimdiye kadar bulmayı başardığım en iyi "çözüm", dosyaların oynatılmasını otomatikten daha az, ancak çok daha kararlı / güvenilir hale getiren bir düğme eklemektir.


3
Bir kullanıcı etkileşimine güvenmek otomatik oynatma değildir.
mightyiam

0

Chrome ve firefox'ta otomatik oynatmayı sağlamak için pixi.js ve pixi-sound.js'yi kullandım.

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

aynı zamanda mobil cihazlarda da çalışır ancak kullanıcının sesi tetiklemek için ekranda bir yere dokunması gerekir.


0

iframeBunun yerine kullanın :

<iframe id="stream" src="YOUTSOURCEAUDIOORVIDEOHERE" frameborder="0"></iframe>

0

geçici düzeltme

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

Veya oynatmayı tetiklemek için özel bir oynatıcı kullanın http://zohararad.github.io/audio5js/

Not: Otomatik oynatma 31 Aralık'ta devre dışı bırakılacak


Bu bir cevap değil çünkü otomatik oynatma değil.
mightyiam

1
krom engellediği beri otomatik oynatmaya yolu yoktur çünkü bu geçici bir çözüm olduğunu @mightyiam
Youssef KH

0

Sesi etiketlemek için de kontrol özniteliği ekliyorum ve bunu CSS'de gizliyorum. Ve hepsi Chrome'da iyi çalışıyor.

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

1
Belki o site için MEI'niz otomatik oynatmaya izin veriyorsa. Aksi takdirde, bunun işe yaraması için bir neden göremiyorum.
mightyiam

0

Google, geçtiğimiz ay Chrome'da otomatik oynatma ile ilgili politikalarını değiştirdi. Lütfen bu duyuruya bakın .

Ancak, bir video yerleştiriyorsanız ve video sessizse otomatik oynatmaya izin verirler. mutedÖzelliği ekleyebilir ve videonun oynatılmaya başlamasına izin vermelidir.

<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
Sesin arka planda çalmasını istiyorum.
Akshay Rathod

13
Sesi kapatılmış otomatik oynatma bir yanıt olarak kabul edilemez.
mightyiam

@Akshay Rathod çözüm buldunuz mu?
Ölü Adam

0

İframe veya javascript kullanmadan çözüm:

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

Bu çözümle, Internet Explorer'ın aç / kaydet iletişim kutusu da önlenir.

   <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
Hayır! Chrome 85.0.4183.83 Sürümü (Resmi Derleme) (64 bit)
MC9000

0

Video etiketi de ses çalabilir. Ses etiketi olması gerektiği gibi davranmadığına göre, ses için video etiketini kullanabilirsiniz:

<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">Kaynak bir otomatik oynatma iznine sahipse kullanabilirsiniz . Daha fazla bilgi burada .


kontrolleri gösteriyor ve sayfada hiçbir şey istemiyorum. sadece oynat ve duraklat düğmesi.
Akshay Rathod

ve ses nasıl döngüye alınır?
Akshay Rathod

1
@AkshayRathod lütfen HTML <audio> döngü Özniteliğini kontrol edin . Oysa XHTML'de, öznitelik minimizasyonu yasaktır ve döngü niteliği <audio loop = "loop"> olarak tanımlanmalıdır.
hmd

-4

Varsayılan HTML5 audiootomatik oynatma özelliği Chrome'da çalışmıyor, ancak JavaScript kullanarak otomatik ses oynatmayı zorlayabilirsiniz. Bunu dene:

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

Bu benim için çalışıyor.


3
otomatik oynatmanın "çalışmadığı" değil, politika gereksinimleri karşılanmadığında otomatik oynatmanın çalışmayacağı bir politikaya tabi olmasıdır. Bkz developers.google.com/web/updates/2017/09/... . Bu kod, bu politikayı bozmayacaktır. Sizin için işe yaradıysa, bunun nedeni eşiği karşılamanız ve / veya bazı geliştirici bayrağı belirlemenizdir. Ancak o sayfanın dediği gibi, herkes için işe yarayacağını varsayamazsınız.
ADyson

En azından FF 66'da bu da işe yaramayacak. Yeni politika, bir kullanıcı etkileşimi tarafından bir şekilde tetiklenmemişse, oynatmayı () engellemektir.
Randy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.