BG Development


Страници: (3) [1] 2 3   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Проблем с Audio обект в JS
johnfound
Публикувано на: 29-03-2018, 15:52
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7038
Регистриран на: 27.05.04



Помагайте експерти по JS! icon_smile.gif

Има следния код (силно опростен, но същността му е такава):

CODE

<!DOCTYPE html>
<html lang="en">
 <head>
....
 </head>

 <body>
.....
 </body>

 <script type='text/javascript'>

  var beepOK = new Audio("/sounds/finishok.wav");

  function connect() {
     source = new EventSource("/events");
     source.addEventListener('barcode', OnBarcode);
   };

   function OnBarcode(e) {
     document.getElementById('barcode').innerHTML = e.data;
     beepOK.play();
   };
 </script>
</html>


Идеята е когато се получи от сървъра събитие (прочетен баркод) да го показва в елемента #barcode и да издава звуков сигнал.

Обработката на събитията работи и OnBarcode се вика, защото съдържанието на #barcode се актуализира правилно. Обаче свиренето се държи много странно:

1. На моя компютър всичко работи както е замислено.
2. На компютъра в производството обаче звукът се изпълнява съвършено случайно веднъж на 10..20 пъти.
3. От конзолата или от дебъгера е същото, с разликата, че веднъж като викна play() и свирне, след това известно време започва да свири нормално. Обаче като оставя машината на персонала, по някое време започва пак да свири един път на 10..20 викания.
4. Грешки в JS конзолата, няма.

Опитах заклинания от вида:

CODE

beepOK.pause();
beepOK.currentTime=0;
beepOK.play();


Без всякакъв ефект. Както се държи само с play() така се държи и с магическите поредици.

Опитах да създавам <audio> обекти в HTML-a, включително с контроли. Разликата е, че като кликна play от контролите, първия път прогрес бара се движи, но звук няма. Следващите пъти започва да плейва наистина. Но на плейването чрез beepOK.play() не влияе съвсем - там си остава случайно.

Браузъра и при мене (винаги работи) и в продакшъна (работи когато си иска) е Firefox. Операционната система е Arch Linux. Браузъра на продукшън машината използва mplayer (поне предполагам, че е той, защото друг няма инсталиран. На моята машина има инсталирани няколко, но не знам кой се използва, защото не знам как да го проверя.

Някакви идеи откъде да го подхвана?



--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
relax4o
Публикувано на: 29-03-2018, 19:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2236
Регистриран на: 04.04.07



Може нещо с буферирането да се случва и да бъгва.

Виж тази статия и тествай. https://www.html5rocks.com/en/tutorials/webaudio/intro/
или пробвай някоя библиотека https://goldfirestudios.com/blog/104/howler...ascript-Library

Другото, което е. Според мозила Аудио обекта под firefox работи напълно само под версия 3.5. Оттам нататък - магия.

П.П. Също опитай не да създаваш директно обекта в HTML-а, а така:

CODE

var audio = document.createElement('audio');
audio.src = 'sound.wav';

....
function blabla() {
  audio.play();
}


Това мнение е било редактирано от relax4o на 29-03-2018, 19:23


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
Антон Яначков
Публикувано на: 29-03-2018, 20:02
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Старо куче

Мнения: 772
Регистриран на: 27.07.16



Задай закъснение на свиркането над 100 милисекунди и всичко ще е наред. За потребителя 100 милисекунди е нищо, но за машината това е време за лятна почивка.

Използвай тази функция:
setTimeout(myFunction, 100);

PMEmail PosterUsers Website
Top
johnfound
Публикувано на: 29-03-2018, 21:09
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7038
Регистриран на: 27.05.04



@Антон Яначков, гарантирам ти, че точно за това няма да използвам таймер. Това е просто грозен хак и съвършено непрофесионално. И въобще използването на таймери винаги е грешно, дори когато си принуден поради липса на друго решение. Този случай определено не е такъв.


@relax4o: Точно така пробвах да създавам елементите, както си показал с document.createElement('audio'); За съжаление нямаше абсолютно никаква разлика. Започвам да подозирам, че наистина има някакъв бъг.

Библиотека има смисъл да се използва, ако искаш съвместимост с много браузъри. Моят браузър е абсолютно фиксиран и вероятно дори няма да се ъпдейтва.

Обаче, това, че има и друг начин за свирене - Web Audio API не го знаех. Мерси за подсказката. Явно ще трябва да почета малко, но се надявам, че няма да е толкова бъгаво като <audio>. И предварително се надявам да не е много усложнено - все пак на мене ми трябват съвсем прости звуци, не правя игра и всякакви там специални ефекти са ми безразлични.


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
johnfound
Публикувано на: 29-03-2018, 21:21
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7038
Регистриран на: 27.05.04



Интересно, четейки за Web Audio API-то попаднах на следната реплика:

QUOTE
An important point to note is that on iOS, Apple currently mutes all sound output until the first time a sound is played during a user interaction event - for example, calling playSound() inside a touch event handler. You may struggle with Web Audio on iOS "not working" unless you circumvent this - in order to avoid problems like this, just play a sound (it can even be muted by connecting to a Gain Node with zero gain) inside an early UI event - e.g. "touch here to play".


Много подобно поведение наблюдавах при мене, макар и как да кажа - малко по-хаотично. Какъв е шанса някой в Мозила да се опитва да имитира Епъл??? Ако е така, тогава имам сериозен проблем, защото аз въобще не мога да организирам "user interaction", поради липса на каквито и да било периферни устройства - мишки, клавиатури и тъч екрани... icon_sad.gif Имам само баркод четец, но с него трудно ще кликам по екрана... icon_lol.gif


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
relax4o
Публикувано на: 29-03-2018, 21:29
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2236
Регистриран на: 04.04.07



QUOTE (johnfound @ 29-03-2018, 21:21)
Интересно, четейки за Web Audio API-то попаднах на следната реплика:

QUOTE
An important point to note is that on iOS, Apple currently mutes all sound output until the first time a sound is played during a user interaction event - for example, calling playSound() inside a touch event handler. You may struggle with Web Audio on iOS "not working" unless you circumvent this - in order to avoid problems like this, just play a sound (it can even be muted by connecting to a Gain Node with zero gain) inside an early UI event - e.g. "touch here to play".


Много подобно поведение наблюдавах при мене, макар и как да кажа - малко по-хаотично. Какъв е шанса някой в Мозила да се опитва да имитира Епъл??? Ако е така, тогава имам сериозен проблем, защото аз въобще не мога да организирам "user interaction", поради липса на каквито и да било периферни устройства - мишки, клавиатури и тъч екрани... icon_sad.gif Имам само баркод четец, но с него трудно ще кликам по екрана... icon_lol.gif

Досадно е, когато трябва да се съобразиш с на всички претенциите.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
SuN
Публикувано на: 29-03-2018, 21:35
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 7399
Регистриран на: 27.01.05



Стрелям на посоки, но в киоск (ако се поддържа) режима дали има същите ограничения?

Това мнение е било редактирано от SuN на 29-03-2018, 21:35


--------------------
Копирай лесно ударено и - ѝ Ѝ
Замърсяване на въздуха в София - http://aqicn.org/city/bulgaria/sofia/druzhba/
PMEmail Poster
Top
johnfound
Публикувано на: 29-03-2018, 21:59
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7038
Регистриран на: 27.05.04



QUOTE (SuN @ 29-03-2018, 22:35)
Стрелям на посоки, но в киоск (ако се поддържа) режима дали има същите ограничения?

Ами то във Firefox-а, доколкото аз знам киоск режима се прави с някакъв плъгин, който го разширява на цял екран и блокира някои от функционалните клавиши, така че да не може да се излезе от този режим. Така че ако това са съзнателно направени ограничения (надявам се да не са) едва ли ги маха. Още повече, че в киоск режима обикновено си има тъч екран.

Но това са спекулации де. Надявам се проблема да е заради бъгавия <audio> елемент. Утре ще пробвам с другото API и тогава ще си каже.

Имам и втори опит - да опитам с хромиум или някакъв друг браузър. Също вариант, но тогава ще трябва да свързвам компютъра към интернет, за да мога да го инсталирам, пък и целия "хард" е 8GB SSD от които 6 са пълни с операционната система...

Това мнение е било редактирано от johnfound на 29-03-2018, 22:02


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 30-03-2018, 01:24
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Старо куче

Мнения: 772
Регистриран на: 27.07.16



QUOTE (johnfound @ 29-03-2018, 21:59)
Имам и втори опит - да опитам с хромиум или някакъв друг браузър.

С този проблем аз съм се сблъсквал точно при Chrome и за това ти предложих работещо решение от един ред. Но понеже проблема си е само твой, ти може и 5 АПИ-та да включиш. Сигурно ще изглежда далеч по-професионално, но в крайна сметка ще си остане само едно просто пиукане. Но ако и баш професионалното пиукане те издъни, то тогава винаги можеш да си спретнеш едно работещо непрофесионално пиукане. Всички, които са те гледали, как дни наред се мъчиш да решиш този толкова сложен проблем, ще са напълно убедени, че пиукането е най-сложният момент в програмирането и авторитетът ти здраво ще се вдигне.
PMEmail PosterUsers Website
Top
purjola
Публикувано на: 30-03-2018, 01:30
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2167
Регистриран на: 18.10.11



OBJECT OBSERVE ... Опа, то стана Proxy
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0