Files
Psychotoxical-psysonic/src/locales/nl/player.ts
T
cucadmuh 6ea0acede5 feat(playback): stream buffering UI, M4A moov-at-end streaming, hot-cache spill (#737)
* feat(playback): stream buffering UI, ranged M4A tail prefetch, demuxer fix

Defer seekbar/progress until HTTP stream is armed for both legacy and
RangedHttpSource; show buffering overlay on cover art. Add MP4 tail
prefetch and Symphonia isomp4 bounded-mdat/moov-at-EOF probing so
moov-at-end M4A can start without reading the full mdat.

* feat(hot-cache): spill large ranged streams to disk for promote

When a ranged HTTP download completes above the 64 MiB RAM promote cap,
write the existing buffer once to app-data stream-spill/ and register it
for hot-cache promote (rename) and replay via fetch_data. Analysis seeds
from the spill file up to the local-file cap (512 MiB).

* fix(ui): stream buffering — grayscale cover and static clock icon

Desaturate player and queue cover art while isPlaybackBuffering; keep a
non-animated clock overlay for visibility without the spinning animation.

* fix(playback): review follow-up — tests, i18n, spill cleanup, changelog

Clippy and test layout fixes; stream spill orphan cleanup on startup;
buffering flag guard in progress handler; bufferingStream in all player
locales; CHANGELOG and contributor credits for stream/M4A work.

* docs: attribute stream buffering and M4A streaming to PR #737

* test(audio): avoid create_engine in stream spill unit test

CI runners have no audio output device; test spill take/consume via
the Mutex slot only, matching install_stream_completed_spill tests.
2026-05-16 22:56:47 +03:00

58 lines
1.9 KiB
TypeScript

export const player = {
regionLabel: 'Muziekspeler',
openFullscreen: 'Volledig-schermspeler openen',
fullscreen: 'Volledig-schermspeler',
closeFullscreen: 'Volledig scherm sluiten',
closeTooltip: 'Sluiten (Escape)',
noTitle: 'Geen titel',
stop: 'Stoppen',
prev: 'Vorig nummer',
play: 'Afspelen',
pause: 'Pauzeren',
bufferingStream: 'Loading track from server',
previewActive: 'Voorbeeld speelt af',
previewLabel: 'Voorbeeld',
delayModalTitle: 'Timer',
delayPauseSection: 'Pauzeren na',
delayStartSection: 'Starten na',
delayPreviewPause: 'Pauze om',
delayPreviewStart: 'Start om',
delaySchedulePause: 'Pauze plannen',
delayScheduleStart: 'Start plannen',
delayCancelPause: 'Pauze-timer annuleren',
delayCancelStart: 'Start-timer annuleren',
delayInactivePause: 'Alleen beschikbaar tijdens afspelen.',
delayInactiveStart: 'Alleen in pauze met een geladen nummer of radio.',
delayCustomMinutes: 'Aangepaste vertraging (minuten)',
delayCustomPlaceholder: 'bijv. 2,5',
closeDelayModal: 'Sluiten',
delayIn: 'over',
delayFmtSec: '{{n}} s',
delayFmtMin: '{{n}} min',
delayFmtHr: '{{n}} u',
delayCancel: 'Annuleren',
delayApply: 'Toepassen',
next: 'Volgend nummer',
repeat: 'Herhalen',
repeatOff: 'Uit',
repeatAll: 'Alles',
repeatOne: 'Één',
progress: 'Nummervoortgang',
volume: 'Volume',
toggleQueue: 'Wachtrij in-/uitschakelen',
collapseQueueResize: 'Wachtrij inklappen, breedte wijzigen',
moreOptions: 'Meer opties',
equalizer: 'Equalizer',
miniPlayer: 'Minispeler',
lyrics: 'Songtekst',
fsLyricsToggle: 'Songtekst in volledig scherm',
lyricsLoading: 'Songtekst laden…',
lyricsNotFound: 'Geen songtekst gevonden voor dit nummer',
lyricsSourceServer: 'Bron: Server',
lyricsSourceLrclib: 'Bron: LRCLIB',
lyricsSourceNetease: 'Bron: Netease',
lyricsSourceLyricsplus: 'Bron: YouLyPlus',
showDuration: 'Toon duur',
showRemainingTime: 'Toon resterende tijd',
};