Плайеане на аудио

uphero

Registered
Правя си известия за един сайт и искам да има и звук. Е опитах всичко което намерих и нищо не работи.
Въобще възможно ли е това?
 
Най-добрите известия се получават с OneSignal. Влиза потребителя, праща му попъп за разрешаване на известията и след това вече може да пращаш известия до всички абонати/или конкретен такъв. Било то от админ панела им или през API. (Имат за php)
Аз имам готови функции, които ползвам в Argos, там е интегриран цялостно Onesignal-a. Потребителите (абонатите) се записват в датабаза и от админ панела може да пращаш до всички или до определен.
Има звук когато излиза балона в браузъра (тоест самото известия е със звук).
Ти си го виждал предполагам, то навсякъде се ползва вече почти..
Onesignal имат безплатен план, той винаги ще си остане такъв, но имат и платени. Наскоро ми пратиха емейл, че спират някои функции на апи-то, че не се ползват (беше преди дни). Хвана ме страх дали не е нещо, което съм интегрирал, но не е ... :)

https://onesignal.com/ - това е сайта, а нотификейшъните се водят Push Notifications.
Може да си сглобиш и сам такова, но ще е доста трудно... Чел съм доста и не се оправих, но ако си по-скилнат може и да ти се получи..
Като напишеш в гугъл Push notifications може да ти излязат и други алтернативи, но повечето са платени.. Ти си решаваш :)
 
Ами нали за известия, ако искаш мога да ти дам всичко мое, което съм написал за Onesignal... 2-те функции + js кода...
Може и да не съм разбрал какво точно искаш... Какви са тези известия ? Как се пращат ? Как пристигат ? Това поне обясни :)
 
Според мен има предвид известия, както са в този форум, просто при получаване да има звук. Известията real-time ли ги получаваш? Каква е цялостната ти идея?
 
Риъл тайм, ще има и алерти като този от снимката.
Push нотификации си има отделно и всеки потребител решава дали да ги получава. Проблема е точно с риъл тайм известията - може да отворен прозореца и потребителя да не кликал никъде и като дойде известието няма да има звук заради това.
Screenshot 2023-04-01 at 14.12.22.png
 
Само звукът ли не може да се изкара? Имам поне два уеб базирани системи със звук при идването на нотификации. Ще разгледам как е постигнато. Но определено има разрешаване в началото, защото звука по дефолт е забранен във всеки браузър. Форумите също ни имат, но там няма звук, явно не са видели смисъл от тях, с което бих се съгласил - досадно е. Още помня звука на оня изтръпнал Outlook при пристигането на мейл. :)
 
Дай да видим какво и как имплементираш. Само с един браузър ли тестваш или никой не възпроизвежда звук? Провери дали е забранено от настройки.

Също тествай с прост бутон да възпроизведеш звук. Ако не стане значи наистина има проблем. Ако работи, значи там, където слушаш не правиш нещата като хората.
 
Ще ти дам просто и глупаво решение, но наистина безотказно.


PHP:
if($condition) {
    echo "<audio controls autoplay style='display:none;'><source src='" . url('sounds/beep.mp3') . "' type='audio/mp3'></audio>";
}
 
Ами така няма да стане, поне в Chrome. В линка, който е в грешката, изрично се споменава, че това им е policy. Ако го сложиш да се изпълно през събитие на бутон вероятно ще стане (пробвай, за да си сигурен), или window.onload. Но се изисква потрбителя първо да е направил нещо на страницата, за да се изпълни.

Иначе може да се наложи друг подход и очевидно различните браузъри имат различен съпорт и прочие.
 
Но се изисква потрбителя първо да е направил нещо на страницата, за да се изпълни.
точно тия разсеяните искам да подсетя със звук, да им таковам полицито и на спамерите дето ни докараха до тук един обикновен звук да не може да пуснеш :D
Оставям го така, където може със звук където не.
 
Изискава се страницата да бъде заредена, за да се изпълни.

HTML:
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <script>
            let audio = new Audio("../sounds/notification.mp3");
         
            setTimeout(() => { audio.play(); }, 10000);
        </script>
    </body>
</html>

EDIT: Явно работи само при Firefox, игнорирай ми поста... или плейвай след като почнат да кликат насам натам.

JavaScript:
window.onload = function() {
    let audio = new Audio("../sounds/notification.mp3");

    window.addEventListener("click", () => {
        if (shouldPlayNotificationSound && !playing) {
            audio.play()
        }
    });
};
 
Последно редактирано:
Ако ще е да привличаш внимание докато потребител е на друг таб, то прави като фейсбук - променяй заглавието на страницата с брой известия или нещо подобно като алтернатива.

Потребителя веднъж като интерактне със страницата и е готов:

Код:
<!DOCTYPE html>
<html>
<body>
    <button id="play">Play</button>

    <script>
        window.onclick = () => { // .onload
            const context = new AudioContext();
            
            createBeepSound(context);

            context.onstatechange = () => console.log(context.state);

            const btn = document.querySelector('#play');

            btn.addEventListener('click', (e) => {
                beep(context);
            });

            setInterval(() => beep(context), 10000);
        };

        function beep(context) {
            if (context.state === "suspended") {
                context.resume().then(() => {
                    setTimeout(() => context.suspend(), 100);
                });
            }
        }

        function createBeepSound(context) {
            var oscillator = context.createOscillator();
            oscillator.type = "sine";
            oscillator.frequency.value = 800;
            oscillator.connect(context.destination);
            oscillator.start(0);
            context.suspend();
        }
    </script>
</body>
</html>

В случая може да слушаш не само за onclick, а и други събития. В случая дори onload ще е по-добре, защото в момента, в който потребителя направи каквото и да е на страницата и ще задейства интервала. Така не се налага да повтаряш за различни събития.

Естествено логиката може да се подобри доста. В случая при теб, когато страницата се отвори се очаква потребителя да направи поне едно нещо. Мисля че дори скрол се счита за интеракция. Можеш да флагнеш това и да унищожиш този аудио контекст и просто да си направиш нов след това, или да преизползваш - зависи от ситуацията.

Като цяло, както и да го погледнеш е серия от грозни хакове, но нищо не можем да направим.
 
Оставям го какво си е в №10 пост - който е цъкал ще има звук, който не е няма да има.
Списъка със задачи е толкова дълъг, че няма смисъл да губя повече време тук.
 

Back
Горе