Как я могу сделать gapless Audio looping с помощью мобильного браузера?

кажется, я не могу достичь беззазорного цикла с мобильным телефоном. Вот что я сделал до сих пор:--1-->

https://github.com/Hivenfour/SeamlessLoop

  • создает разрыв.

http://www.schillmania.com/projects/soundmanager2/demo/api/

  • создает разрыв.

https://github.com/regosen/Gapless-5

  • создает пробел.
  • загрузок дважды одинаковый звук.

https://github.com/floatinghotpot/cordova-plugin-nativeaudio

  • создает разрыв.

HTML5 audio

  • создает разрыв.

медиа плагин Кордовы

  • создает разрыв.

WebAudio

все выше протестировано с mp3 и ogg.

EDIT:

плагин cordova SoundJS сломан и, следовательно, не работает;

https://github.com/CreateJS/SoundJS/issues/170

3 ответов


С HTML5 Если вы используете HTML5, используйте атрибут loop.

<audio controls loop>
  <source src="horse.ogg" type="audio/ogg">
  <source src="horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>

он не создает пробел, проверьте с помощью аудиофайла, большая часть аудиофайла имеет пробел в конце.

вы можете проверить это здесь, просто добавьте атрибут цикла и запустите страницу.

С JavaScript

вот также альтернатива с помощью javascript

myAudio = new Audio('someSound.ogg'); 
myAudio.addEventListener('ended', function() {
    this.currentTime = 0;
    this.play();
}, false);
myAudio.play();

здесь JavaScript создаст небольшой пробел, вы можете преодолеть его, играя цикл не когда аудио закончено, но когда аудио собирается закончить. Вот код.

вот что вы хотите.

myAudio = new Audio('http://unska.com/audio/pinknoise.ogg'); 
myAudio.ontimeupdate= function(i) {
  if((this.currentTime / this.duration)>0.9){
    this.currentTime = 0;
    this.play();
  }
};
myAudio.play();

здесь демо.


немного поздно на вечеринку здесь, но у меня есть беспомощное решение с https://github.com/floatinghotpot/cordova-plugin-nativeaudio

не самая красивая реализация, но она работает совершенно без пауз:

в JavaScript

const LOOP_INTERVAL = 5000

window.plugins.NativeAudio.preloadComplex( 'loop1', getMediaURL('media/loop.mp3'), 1, 1, 0, function(msg){
  }, function(msg){
    console.log( 'error: ' + msg );
  });

window.plugins.NativeAudio.preloadComplex( 'loop2', getMediaURL('media/loop.mp3'), 1, 1, 0, function(msg){
  }, function(msg){
    console.log( 'error: ' + msg );
  });

function startGaplessLoop () {
  var flag = false;
  setInterval(function() {
     flag = !flag
     window.plugins.NativeAudio.play(flag ? 'loop2' : 'loop1') 
     setTimeout(function() {
      window.plugins.NativeAudio.stop(flag ? 'loop1' : 'loop2')
    }, 30)
  }, LOOP_INTERVAL)

  window.plugins.NativeAudio.play('loop1')
}

startGaplessLoop()

Не забудьте остановить интервал и выгрузить звук, когда вы закончите!


попробовать SoundJS. Он включает в себя Кордова плагин.