Постоянное оповещение для воспроизведения звука при обнаружении маркера - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть сайт с A-рамкой и AR.JS, где у меня воспроизводится звук при обнаружении маркера. Однако, когда маркер виден, я получаю это предупреждение, постоянно появляющееся несколько раз в консоли.

'components audio warn All the sounds are playing. If you need to play more sounds simultaneously consider increasing the size of pool with the poolSize attribute. <a-entity sound=​"src:​ #sound" autoplay=​"false">​​'

Кажется, он вызывается для каждого кадра / пары кадров. Есть идеи, как это остановить? Это кажется плохим поведением, особенно для мобильных устройств.

Для справки вот код сцены:

<a-scene embedded arjs='sourceType: webcam; debugUIEnabled: false;';>
       <a-assets>
            <audio id="sound" src="audio.mp3" preload="auto"></audio>
        </a-assets>
        <a-marker preset="custom" type="pattern" url="img/pattern-marker.patt">
        <!--<a-marker preset="hiro">-->
        <!--<a-torus-knot color="#000000" arc="180" p="2" q="7" radius="5" radius-tubular="0.1"></a-torus-knot>-->
                <a-box position='0 0.5 0' material='color: black;' soundhandler> 
                </a-box>
        </a-marker>
        <a-entity sound="src: #sound" autoplay="false"></a-entity>
        <a-entity camera></a-entity>
</a-scene>

и код, который регистрирует компонент и событие:

AFRAME.registerComponent('soundhandler', {
    tick: function () {
           var entity = document.querySelector('[sound]');
         if (document.querySelector('a-marker').object3D.visible == true) {
            entity.components.sound.playSound();
        } else {
        }

     }
});

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете использовать переменную flag и подписаться на звуковые события:

AFRAME.registerComponent('soundhandler', {
    playingSound = false, //flag vble.
    soundToHandle = document.querySelector('[sound]'),
    init: function() {
      soundToHandle.stopSound = function() {  //sound stoped event
        playingSound = false;
      };
      soundToHandle.playSound = function() { //sound played event
        playingSound = true;
      };
    },
    tick: function () {
         if ((document.querySelector('a-marker').object3D.visible == true) && (!playingSound)) {
            soundToHandle.components.sound.playSound();
        } else if ((document.querySelector('a-marker').object3D.visible == false) && (playingSound)){
             soundToHandle.components.sound.stopSound();
        }

     }
});
0 голосов
/ 30 апреля 2018

Зависит от того, что вы собираетесь:

1) Вы можете проверить, воспроизводится ли медиа-элемент HTML, проверив свойство currentTime перед воспроизведением звука. Или настройте любую логическую переменную, реагирующую на события playing и ended Audio element.

2) вы можете pause() аудио, когда маркер не виден.

Вы можете проверить это здесь , где звук будет воспроизводиться, только если он закончен / перезагружен. Подробнее о СМИ здесь .

...