Saya memutar klip audio kecil di klik setiap tautan di navigasi saya
Kode HTML:
<audio tabindex="0" id="beep-one" controls preload="auto" >
<source src="audio/Output 1-2.mp3">
<source src="audio/Output 1-2.ogg">
</audio>
Kode JS:
$('#links a').click(function(e) {
e.preventDefault();
var beepOne = $("#beep-one")[0];
beepOne.play();
});
Sejauh ini berfungsi dengan baik.
Masalahnya adalah ketika klip suara sudah berjalan dan saya mengklik tautan apa pun tidak ada yang terjadi.
Saya mencoba menghentikan suara yang sudah diputar di klik tautan, tetapi tidak ada kejadian langsung untuk itu di Audio API HTML5
Saya mencoba mengikuti kode tetapi tidak berfungsi
$.each($('audio'), function () {
$(this).stop();
});
Ada saran?
html
html5-audio
Alok Jain
sumber
sumber
<audio>
terus memuat juga denganpreload
atribut dipaksa untuknone
dan<source>
src dilucuti.pertama-tama Anda harus menetapkan id untuk elemen audio Anda
di js Anda:
var ply = document.getElementById('player');
var oldSrc = ply.src;
// hanya untuk mengingat sumber yang lamaply.src = "";
// untuk menghentikan pemain kamu harus mengganti sumbernya dengan nolsumber
Inilah cara saya melakukan metode stop ():
Di suatu tempat dalam kode:
dan kemudian berhenti ():
Dengan cara ini kami tidak menghasilkan permintaan tambahan, yang lama dibatalkan dan elemen audio kami dalam keadaan bersih (diuji di Chrome dan FF):>
sumber
Saya mengalami masalah yang sama. Berhenti harus menghentikan aliran dan onplay pergi untuk hidup jika itu adalah radio. Semua solusi yang saya lihat memiliki kelemahan :
player.currentTime = 0
terus mengunduh aliran.player.src = ''
meningkatkanerror
acaraSolusi saya:
Dan HTML
sumber
Security Error: Content at https://localhost/url.html may not load data from blob:https://localhost/cac32534-78b0-4a62-8355-cc8f1e708d64.
] Tampaknya tidak memiliki efek negatif karena kode terus dieksekusi setelah ini (tidak seperti Pengecualian yang tidak tertangkap).Metode ini berfungsi:
Tetapi jika Anda tidak ingin harus menulis dua baris kode ini setiap kali Anda menghentikan audio Anda bisa melakukan salah satu dari dua hal ini. Yang kedua menurut saya adalah yang lebih tepat dan saya tidak yakin mengapa "para dewa standar javascript" belum membuat standar ini.
Metode pertama: buat fungsi dan berikan audio
Metode kedua (disukai): memperpanjang kelas Audio:
Saya memiliki ini dalam file javascript yang saya sebut "AudioPlus.js" yang saya sertakan dalam html saya sebelum skrip apa pun yang akan berurusan dengan audio.
Kemudian Anda dapat memanggil fungsi berhenti pada objek audio:
AKHIRNYA CHROME MASALAH DENGAN "canplaythrough":
Saya belum menguji ini di semua browser tetapi ini adalah masalah yang saya temui di Chrome. Jika Anda mencoba untuk mengatur currentTime pada audio yang memiliki pendengar acara "canplaythrough" yang terpasang padanya maka Anda akan memicu peristiwa itu lagi yang dapat menyebabkan hasil yang tidak diinginkan.
Jadi solusinya, mirip dengan semua kasus ketika Anda telah melampirkan pendengar acara yang Anda benar-benar ingin memastikan itu tidak dipicu lagi, adalah menghapus pendengar acara setelah panggilan pertama. Sesuatu seperti ini:
BONUS:
Perhatikan bahwa Anda dapat menambahkan lebih banyak metode khusus ke kelas Audio (atau kelas javascript asli apa pun dalam hal ini).
Misalnya, jika Anda menginginkan metode "mulai ulang" yang memulai kembali audio, ia akan terlihat seperti:
sumber
function stopAudio(audio) { audio.pause(); this.audioStream.src = ""; }
Melakukan hal ini pada akhirnya berhasil untuk saya dan menghapus ikon speaker di Browser Chrome yang muncul ketika audio diputar di halaman. diuji pada Versi Chrome 59.0.3071.109Dari fungsi javascript saya sendiri untuk beralih Play / Pause - karena saya menangani aliran radio, saya ingin menghapus buffer sehingga pendengar tidak akhirnya tidak sinkron dengan stasiun radio.
Ternyata, hanya menghapus currentTime tidak memotongnya di bawah Chrome, perlu menghapus sumber juga dan memuatnya kembali. Semoga ini bisa membantu.
sumber
Sebagai catatan tambahan dan karena saya baru-baru ini menggunakan metode berhenti yang disediakan dalam jawaban yang diterima, menurut tautan ini:
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events
dengan menyetel currentTime secara manual, orang dapat memunculkan event 'canplaythrough' pada elemen audio. Di tautan itu disebutkan Firefox, tapi saya mengalami peristiwa ini terjadi setelah menyetel currentTime secara manual di Chrome. Jadi, jika Anda memiliki perilaku terlampir pada acara ini, Anda mungkin berakhir di loop audio.
sumber
Kadang tidak berfungsi di chrome,
ubah saja begitu,
sumber
shamangeorge menulis:
Ini memang yang akan terjadi, dan jeda juga akan memicu
pause
acara, yang keduanya membuat teknik ini tidak cocok untuk digunakan sebagai metode "berhenti". Selain itu, pengaturansrc
seperti yang disarankan oleh zaki akan membuat pemain mencoba memuat URL halaman saat ini sebagai file media (dan gagal) jikaautoplay
diaktifkan - pengaturansrc
kenull
tidak diperbolehkan; itu akan selalu diperlakukan sebagai URL. Singkatnya menghancurkan objek pemain sepertinya tidak ada cara yang baik untuk menyediakan metode "berhenti", jadi saya sarankan hanya menjatuhkan tombol berhenti khusus dan memberikan jeda dan melompat kembali tombol sebagai gantinya - tombol berhenti tidak akan benar-benar menambah fungsionalitas apa pun .sumber
Pendekatan ini adalah "brute force", tetapi ia bekerja dengan asumsi menggunakan jQuery "diperbolehkan". Kelilingi
<audio></audio>
tag "pemain" Anda dengan div (di sini dengan id "plHolder").Maka javascript ini akan berfungsi:
sumber
#FlHolder
tampaknya salah ketik untuk#plHolder
src
atribut pemain.Saya percaya akan lebih baik untuk memeriksa apakah audio diputar dan mengatur ulang properti currentTime.
sumber
bagi saya kode itu berfungsi dengan baik. (IE10 +)
Semoga bantuan ini.
sumber
Yang ingin saya lakukan adalah menghapus kontrol sepenuhnya menggunakan Angular2 lalu dimuat ulang ketika lagu berikutnya memiliki jalur audio:
Lalu ketika saya ingin menurunkannya dalam kode saya melakukan ini:
Saat lagu berikutnya ditetapkan, kontrol akan dibuat sepenuhnya dari awal:
sumber
Cara sederhana untuk mengatasi kesalahan ini adalah dengan menangkap kesalahan.
audioElement.play () mengembalikan janji, jadi kode berikut dengan .catch () harus cukup mengelola masalah ini:
Catatan: Anda mungkin ingin mengganti fungsi panah dengan fungsi anonim untuk kompatibilitas mundur.
sumber