more gapless fixes

This commit is contained in:
ed 2021-11-14 20:25:28 +01:00
parent 51e6c4852b
commit 01714700ae

View file

@ -307,6 +307,9 @@ function set_files_html(html) {
} }
var ACtx = window.AudioContext || window.webkitAudioContext;
var mpl = (function () { var mpl = (function () {
var have_mctl = 'mediaSession' in navigator && window.MediaMetadata; var have_mctl = 'mediaSession' in navigator && window.MediaMetadata;
@ -473,8 +476,8 @@ var mpl = (function () {
}; };
r.unbuffer = function (url) { r.unbuffer = function (url) {
if (mp.au2 && (!url || mp.au2.src == url)) { if (mp.au2 && (!url || mp.au2.rsrc == url)) {
mp.au2.src = ''; mp.au2.src = mp.au2.rsrc = '';
mp.au2.load(); mp.au2.load();
} }
if (!url) if (!url)
@ -506,7 +509,7 @@ function MPlayer() {
r.id = Date.now(); r.id = Date.now();
r.au = null; r.au = null;
r.au = null; r.au = null;
r.au2 = new Audio(); r.au2 = null;
r.tracks = {}; r.tracks = {};
r.order = []; r.order = [];
@ -635,7 +638,7 @@ function MPlayer() {
}); });
mp.au2.preload = "auto"; mp.au2.preload = "auto";
mp.au2.src = url; mp.au2.src = mp.au2.rsrc = url;
}; };
} }
@ -1093,18 +1096,18 @@ var mpui = (function () {
} }
// preload next song // preload next song
if (mpl.preload && preloaded != mp.au.src) { if (mpl.preload && preloaded != mp.au.rsrc) {
var pos = mp.au.currentTime, var pos = mp.au.currentTime,
len = mp.au.duration, len = mp.au.duration,
rem = pos > 0 ? len - pos : 999, rem = pos > 0 ? len - pos : 999,
full = null; full = null;
if (rem < (is_touch && IPHONE ? 34 : (mpl.fullpre ? 7 : 20))) { if (rem < (mpl.fullpre && !(is_touch && IPHONE)) ? 7 : 20) {
preloaded = fpreloaded = mp.au.src; preloaded = fpreloaded = mp.au.rsrc;
full = false; full = false;
} }
else if (rem < 40 && mpl.fullpre && fpreloaded != mp.au.src) { else if (rem < 40 && mpl.fullpre && fpreloaded != mp.au.rsrc) {
fpreloaded = mp.au.src; fpreloaded = mp.au.rsrc;
full = true; full = true;
} }
@ -1213,11 +1216,10 @@ var audio_eq = (function () {
r.apply = function () { r.apply = function () {
r.draw(); r.draw();
var Ctx = window.AudioContext || window.webkitAudioContext; if (!ACtx)
if (!Ctx)
bcfg_set('au_eq', false); bcfg_set('au_eq', false);
if (!Ctx || !mp.au) if (!ACtx || !mp.au)
return; return;
if (!r.en && !mp.ac) if (!r.en && !mp.ac)
@ -1235,7 +1237,7 @@ var audio_eq = (function () {
mp.ac.close(); mp.ac.close();
r.last_au = mp.au; r.last_au = mp.au;
mp.ac = new Ctx(); mp.ac = new ACtx();
mp.acs = mp.ac.createMediaElementSource(mp.au); mp.acs = mp.ac.createMediaElementSource(mp.au);
} }
@ -1416,25 +1418,25 @@ function play(tid, is_ev, seek, call_depth) {
mp.au.pause(); mp.au.pause();
clmod(ebi('a' + mp.au.tid), 'act'); clmod(ebi('a' + mp.au.tid), 'act');
} }
else {
var url = mpl.acode(mp.tracks[tid]);
if (!mp.au) {
mp.au = new Audio(); mp.au = new Audio();
mp.au2 = new Audio();
mp.dummyctx = new ACtx(); // reduces .play() latency somehow
mp.au.onerror = evau_error; mp.au.onerror = evau_error;
mp.au.onprogress = pbar.drawpos; mp.au.onprogress = pbar.drawpos;
mp.au.onended = next_song; mp.au.onended = next_song;
widget.open(); widget.open();
} }
audio_eq.apply(); var url = mpl.acode(mp.tracks[tid]);
url += (url.indexOf('?') < 0 ? '?' : '&') + 'cache=987'; url += (url.indexOf('?') < 0 ? '?' : '&') + 'cache=987';
if (mp.au.src == url) if (mp.au.rsrc == url)
mp.au.currentTime = 0; mp.au.currentTime = 0;
else { else
mp.au.src = url; mp.au.src = mp.au.rsrc = url;
}
audio_eq.apply();
setTimeout(function () { setTimeout(function () {
mpl.unbuffer(url); mpl.unbuffer(url);