Как я могу сделать 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
- работает!
- для 1.5 мин аудио клип, время декодирования составляет > 30 считанные секунды.
- https://code.google.com/p/chromium/issues/detail?id=424174
все выше протестировано с mp3 и ogg.
EDIT:
плагин cordova SoundJS сломан и, следовательно, не работает;
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()
Не забудьте остановить интервал и выгрузить звук, когда вы закончите!