Autor | Zpráva | ||
---|---|---|---|
JardaB Profil |
Zdravím, vytvořil jsem si jednoduchou hru, kde se mi ve smyčce spouští zvuk. Na webu vše jede, ale v mobilu ticho.. Poradí někdo proč? Nebo jak na to aby to i v mobilu šlapalo?
testoval jsem audio.canPlayType("audio/mpeg"); kousek mého kodu: var audioPipak = new Audio("wav/alarm.mp3"); audioPipak.loop = true; audioPipak.volume = 0.5; if(typeof audioPipak != 'undefined') { audioPipak.play(); } tak to testuji na holé stránce a funguje... problém bude někde v kodu jinde.. divné ale že v pc přes prohlížeč ok ale mobil nic. V prohlížeči si mohu zapnout konzoli a vidím chyby, v mobilu nevím zda tohle nějak jde |
||
weroro Profil |
#2 · Zasláno: 11. 1. 2018, 10:38:45
Ja v práci debugujem takto: developers.google.com/web/tools/chrome-devtools/remote-debugging
Podobne sa to robí aj pre iOS. |
||
JardaB Profil |
Tohle je na mě už moc složité.. :D ale asi mi nic jiného nezbude..
Nalezl jsem zdroj problému, ale jelikož v JS dělám chvíli, nevím jak to řešit.. následující funguje i v mobilu: <script> var audio = new Audio("wav/alarm.mp3"); audio.loop = true; audio.volume = 0.5; </script> <a href="#" onclick="audio.play();">Play</a> | <a href="#" onclick="audio.pause();">Stop</a> ale když chci zvuk spustit rovnou a ne kliknutím, tak již v mobilu nejde <script> var audio = new Audio("wav/alarm.mp3"); audio.loop = true; audio.volume = 0.5; audio.play(); </script> <a href="#" onclick="audio.pause();">Stop</a> |
||
Keeehi Profil |
Zkus toto:
<script> var audio = new Audio("wav/alarm.mp3"); audio.loop = true; audio.volume = 0.5; audio.addEventListener("canplay", function() { audio.play(); }); </script> <a href="#" onclick="audio.pause();">Stop</a> Je teoreticky ale možné, že automatické přehrávání mobilní prohlížeče aktivně blokují, jelikož to bývá velmi otravné. |
||
JardaB Profil |
#5 · Zasláno: 11. 1. 2018, 12:35:38
To mě taky napadlo, ale asi to nebude ten problém.. Vyzkoušel jsem a nefunguje ani tvé řešení. Audio má pár kb, v prohlížeči zvuk jede v mobilu ne.. testováno na více zařízeních.
tvoje řešení sem dal sem, pokud chce někdo otestovat z mobilu myfish.cz/vr/audio.php |
||
weroro Profil |
Skúšal si to pomocou značky
<audio> ? Nie je to elegantné ale čisto teoreticky by to mohlo fungovať ak nastavíš značke atribút autoplay.
Môžeš túto značku generovať pomocou JS. |
||
JardaB Profil |
#7 · Zasláno: 11. 1. 2018, 13:14:14
nezobrazí náhodou tag <audio> i panel přehrávání? Nezkoušel jsem, ale měl jsem právě zato, že tohle je určeno na trochu jiný charakter přehrávání..
|
||
weroro Profil |
#8 · Zasláno: 11. 1. 2018, 13:18:32
Controls je možné vypnúť.
|
||
JardaB Profil |
#9 · Zasláno: 11. 1. 2018, 13:24:45
vyzkoušeno, vytvořil jsem následovně:
<script> var audio = document.createElement('audio'); audio.src = 'wav/tuk.wav'; audio.play(); </script> také nefunguje, jen v prohlížeči ano :D Přijde mi jako by nějak mobil podporu tohoto vypínal přčemž audio.canPlayType("audio/mpeg"); |
||
weroro Profil |
Skús to takto. Vycucal som si to z prsta ale možno motyka vystrelí. :-)
var MobilePlay = function () { /** @type {MobilePlay} */ var self = this; /** @type {null} */ this.source = null; /** @type {AudioContext|webkitAudioContext|null} */ this.context = null; /** * @param {String} file * @returns {void} */ var loadFile = function (file) { var soundXhr = new XMLHttpRequest(); soundXhr.open('GET', file); soundXhr.responseType = 'arraybuffer'; soundXhr.addEventListener('load', function (r) { self.context.decodeAudioData( soundXhr.response, function (buffer) { self.source.buffer = buffer; self.source.connect(self.context.destination); self.source.loop = false; }); self.play(); }); soundXhr.send(); }; /** * @returns {void} */ this.play = function () { this.source.start(0); }; /** * @param {String} file * @returns {void} */ this.init = function (file) { this.context = new (window.AudioContext || window.webkitAudioContext)(); this.source = this.context.createBufferSource(); loadFile(file); }; }; (new MobilePlay()).init('wav/tuk.wav'); |
||
JardaB Profil |
Mno paráda, takhle bych potřeboval cucat taky.. Tohle jede... jen v tom kodu se ve všem nevyznám, proto nevím jak k tomu dodělat pauzu..
V čem je tedy pro vysvětlení základní problém u toho mého kodu? Přehlédl jsem tvou poslední pozn. za sciptem.. zkusím se v tom trochu pohrabat.. díky |
||
weroro Profil |
Tvoje riešenie nefungovalo preto lebo už ako spomenul Keeehi, mobilné zariadenia defaultne blokujú automatické spúšťanie zvuku.
Moje riešenie (Web Audio API) je iba akési obídenie tejto reštrikcie a ak robíš hru, nie je toto riešenie vhodné. Pri vývoji hier sa používajú iné techniky Audio for Web games |
||
JardaB Profil |
#13 · Zasláno: 11. 1. 2018, 14:37:07
To by mě opravdu nenapadlo, že mobilní zařízení budou blokovat automatické spouštění hudby.. Neprogramuji vyloženě složitou hru, ale jistá oznamovací akce vyžadovala spuštění alarmu a tato akce má být náhodná, tedy ji nespouští uživatel kliknutím např., což asi bude právě tento problém. Mrknu později na ten článek a kouknu jak se to řeší i když tvé řešení funguje...
Jelikož na začátek toho mám s JS až nad hlavu, položím ještě jednu otázku, nelze opravdu nějak v JS nasimulovat akci ( např. kliknutí) a poté spustit ten zvuk? |
||
Keeehi Profil |
#14 · Zasláno: 11. 1. 2018, 15:25:58
JardaB:
„nelze opravdu nějak v JS nasimulovat akci“ Samotnou akci JS vyvolat jde. Ale jsem si téměř jistý, že tvůrci mobilních prohlížečů na toto mysleli a ověřují, zda akce vycházela od uživatele, nebo ji vyvolal JS. |
||
JardaB Profil |
#15 · Zasláno: 11. 1. 2018, 15:51:53
rozumím to mi taky došlo, že to nelze... Prozatím použiju kod, který funguje, jen prosím o radu, jak zvuk stopnout, když v kodu nastavím
self.source.loop = true;
Chápu zatím jen část toho kodu, tak nechci nadmíru experimentovat... Děkuji |
||
JardaB Profil |
#16 · Zasláno: 11. 1. 2018, 19:50:03
Vyřešeno kompromisem, což mi stačí... z prohlížeče běží alarm dokud klient nevypne nebo neuběhne požadovaná doba a při detekci mobilního zařízení zazní jen tón, který není ve smyčce.
Sem se v tom scriptu babral dlouho a pak mi došlo, nevím tedy zda správně, že pokud spustím zvuk ve smyčce viz. var MobilePlay = function () , tak jej už není jak zastavit uživatelem
|
||
Časová prodleva: 17 dní
|
|||
JardaB Profil |
#17 · Zasláno: 28. 1. 2018, 17:13:30
weroro, JardaB:
Zdravím, kód který jste tu napsal sice funguje, ale velice často způsobí v mobilu ukončení běhu JS. Netušíte možnou příčinu? Bohužel u mobilu si neodkážu vypsat případné chybové hlášení. |
||
weroro Profil |
JardaB:
Zobrazenie chybového hlásenia (debug mobilu) som už spomenul v [#2] |
||
Časová prodleva: 6 let
|
0