From fff38f484dd529d7bce09f434414ac302ff62add Mon Sep 17 00:00:00 2001 From: ed Date: Sat, 25 Jan 2025 14:27:34 +0000 Subject: [PATCH] prefer opus-caf due to iOS bugs --- README.md | 7 ++++++- copyparty/web/browser.js | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 60e449fb..8d080670 100644 --- a/README.md +++ b/README.md @@ -353,14 +353,19 @@ same order here too * iPhones: the volume control doesn't work because [apple doesn't want it to](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11) * `AudioContext` will probably never be a viable workaround as apple introduces new issues faster than they fix current ones +* iPhones: music volume goes on a rollercoaster during song changes + * nothing I can do about it because `AudioContext` is still broken in safari + * iPhones: the preload feature (in the media-player-options tab) can cause a tiny audio glitch 20sec before the end of each song, but disabling it may cause worse iOS bugs to appear instead * just a hunch, but disabling preloading may cause playback to stop entirely, or possibly mess with bluetooth speakers * tried to add a tooltip regarding this but looks like apple broke my tooltips * iPhones: preloaded awo files make safari log MEDIA_ERR_NETWORK errors as playback starts, but the song plays just fine so eh whatever - * awo, opus-weba, is apple's new take on opus support, replacing opus-caf which was technically limited to cbr opus +* iPhones: preloading another awo file may cause playback to stop + * can be somewhat mitigated with `mp.au.play()` in `mp.onpreload` but that can hit a race condition in safari that starts playing the same audio object twice in parallel... + * Windows: folders cannot be accessed if the name ends with `.` * python or windows bug diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 78ee7973..f981236f 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -294,6 +294,7 @@ var Ls = { "mt_c2ok": "nice, good choice", "mt_c2nd": "that's not the recommended output format for your device, but that's fine", "mt_c2ng": "your device does not seem to support this output format, but let's try anyways", + "mt_xowa": "there are bugs in iOS preventing background playback using this format; please use caf or mp3 instead", "mt_tint": "background level (0-100) on the seekbar$Nto make buffering less distracting", "mt_eq": "enables the equalizer and gain control;$N$Nboost <code>0</code> = standard 100% volume (unmodified)$N$Nwidth <code>1  </code> = standard stereo (unmodified)$Nwidth <code>0.5</code> = 50% left-right crossfeed$Nwidth <code>0  </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = vocal removal :^)$N$Nenabling the equalizer makes gapless albums fully gapless, so leave it on with all the values at zero (except width = 1) if you care about that", "mt_drc": "enables the dynamic range compressor (volume flattener / brickwaller); will also enable EQ to balance the spaghetti, so set all EQ fields except for 'width' to 0 if you don't want it$N$Nlowers the volume of audio above THRESHOLD dB; for every RATIO dB past THRESHOLD there is 1 dB of output, so default values of tresh -24 and ratio 12 means it should never get louder than -22 dB and it is safe to increase the equalizer boost to 0.8, or even 1.8 with ATK 0 and a huge RLS like 90 (only works in firefox; RLS is max 1 in other browsers)$N$N(see wikipedia, they explain it much better)", @@ -891,6 +892,7 @@ var Ls = { "mt_c2ok": "bra valg!", "mt_c2nd": "ikke det foretrukne valget for din enhet, men funker sikkert greit", "mt_c2ng": "ser virkelig ikke ut som enheten din takler dette formatet... men ok, vi prøver", + "mt_xowa": "iOS har fortsatt problemer med avspilling av owa-musikk i bakgrunnen. Bruk caf eller mp3 istedenfor", "mt_tint": "nivå av bakgrunnsfarge på søkestripa (0-100),$Ngjør oppdateringer mindre distraherende", "mt_eq": "aktiver tonekontroll og forsterker;$N$Nboost <code>0</code> = normal volumskala$N$Nwidth <code>1  </code> = normal stereo$Nwidth <code>0.5</code> = 50% blanding venstre-høyre$Nwidth <code>0  </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = instrumental :^)$N$Nreduserer også dødtid imellom sangfiler", "mt_drc": "aktiver volum-utjevning (dynamic range compressor); vil også aktivere tonejustering, så sett alle EQ-feltene bortsett fra 'width' til 0 hvis du ikke vil ha noe EQ$N$Nfilteret vil dempe volumet på alt som er høyere enn TRESH dB; for hver RATIO dB over grensen er det 1dB som treffer høyttalerne, så standardverdiene tresh -24 og ratio 12 skal bety at volumet ikke går høyere enn -22 dB, slik at man trygt kan øke boost-verdien i equalizer'n til rundt 0.8, eller 1.8 kombinert med ATK 0 og RLS 90 (bare mulig i firefox; andre nettlesere tar ikke høyere RLS enn 1)$N$Nwikipedia forklarer dette mye bedre forresten", @@ -1488,6 +1490,7 @@ var Ls = { "mt_c2ok": "不错的选择!", //m "mt_c2nd": "这不是您的设备推荐的输出格式,但应该没问题。", //m "mt_c2ng": "您的设备似乎不支持此输出格式,不过我们还是试试看吧。", //m + "mt_xowa": "iOS 系统仍存在无法后台播放 owa 音乐的错误,请改用 caf 或 mp3 格式。", //m "mt_tint": "在进度条上设置背景级别(0-100)", "mt_eq": "启用均衡器和增益控制;$N$Nboost <code>0</code> = 标准 100% 音量(默认)$N$Nwidth <code>1  </code> = 标准立体声(默认)$Nwidth <code>0.5</code> = 50% 左右交叉反馈$Nwidth <code>0  </code> = 单声道$N$Nboost <code>-0.8</code> & width <code>10</code> = 人声移除 )$N$N启用均衡器使无缝专辑完全无缝,所以如果你在乎这一点,请保持启用,所有值设为零(除了宽度 = 1)", "mt_drc": "启用动态范围压缩器(音量平滑器 / 限幅器);还会启用均衡器以平衡音频,因此如果你不想要它,请将均衡器字段除了 '宽度' 外的所有字段设置为 0$N$N降低 THRESHOLD dB 以上的音频的音量;每超过 THRESHOLD dB 的 RATIO 会有 1 dB 输出,所以默认值 tresh -24 和 ratio 12 意味着它的音量不应超过 -22 dB,可以安全地将均衡器增益提高到 0.8,甚至在 ATK 0 和 RLS 如 90 的情况下提高到 1.8(仅在 Firefox 中有效;其他浏览器中 RLS 最大为 1)$N$N(见维基百科,他们解释得更好)", @@ -2422,7 +2425,7 @@ var mpl = (function () { }; r.init_ac2 = function (v) { - var dv = can_ogg ? 'opus' : can_owa ? 'owa' : can_caf ? 'caf' : 'mp3', + var dv = can_ogg ? 'opus' : can_caf ? 'caf' : 'mp3', fmts = ['opus', 'owa', 'caf', 'mp3'], btns = []; @@ -2436,6 +2439,9 @@ var mpl = (function () { (v == 'owa' && !can_owa)) toast.warn(15, L.mt_c2ng); + if (v == 'owa' && IPHONE) + toast.err(30, L.mt_xowa); + for (var a = 0; a < fmts.length; a++) { var btn = ebi('ac2' + fmts[a]); btn.onclick = r.set_ac2;