mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
6ea0acede5
* 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.
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
export const player = {
|
|
regionLabel: 'Musikplayer',
|
|
openFullscreen: 'Vollbild-Player öffnen',
|
|
fullscreen: 'Vollbild-Player',
|
|
closeFullscreen: 'Vollbild schließen',
|
|
closeTooltip: 'Schließen (Esc)',
|
|
noTitle: 'Kein Titel',
|
|
stop: 'Stop',
|
|
prev: 'Vorheriger Titel',
|
|
play: 'Play',
|
|
pause: 'Pause',
|
|
bufferingStream: 'Loading track from server',
|
|
previewActive: 'Vorschau läuft',
|
|
previewLabel: 'Vorschau',
|
|
delayModalTitle: 'Timer',
|
|
delayPauseSection: 'Pause nach',
|
|
delayStartSection: 'Start nach',
|
|
delayPreviewPause: 'Pause um',
|
|
delayPreviewStart: 'Start um',
|
|
delaySchedulePause: 'Pause planen',
|
|
delayScheduleStart: 'Start planen',
|
|
delayCancelPause: 'Pause-Timer abbrechen',
|
|
delayCancelStart: 'Start-Timer abbrechen',
|
|
delayInactivePause: 'Nur während der Wiedergabe verfügbar.',
|
|
delayInactiveStart: 'Nur in Pause mit geladenem Titel oder Radio.',
|
|
delayCustomMinutes: 'Eigene Dauer (Minuten)',
|
|
delayCustomPlaceholder: 'z. B. 2,5',
|
|
closeDelayModal: 'Schließen',
|
|
delayIn: 'in',
|
|
delayFmtSec: '{{n}} s',
|
|
delayFmtMin: '{{n}} Min',
|
|
delayFmtHr: '{{n}} Std',
|
|
delayCancel: 'Abbrechen',
|
|
delayApply: 'Übernehmen',
|
|
next: 'Nächster Titel',
|
|
repeat: 'Wiederholen',
|
|
repeatOff: 'Aus',
|
|
repeatAll: 'Alle',
|
|
repeatOne: 'Einen',
|
|
progress: 'Songfortschritt',
|
|
volume: 'Lautstärke',
|
|
toggleQueue: 'Warteschlange umschalten',
|
|
collapseQueueResize: 'Warteschlange einklappen, Breite ändern',
|
|
moreOptions: 'Weitere Optionen',
|
|
equalizer: 'Equalizer',
|
|
miniPlayer: 'Mini-Player',
|
|
lyrics: 'Lyrics',
|
|
fsLyricsToggle: 'Lyrics im Vollbild',
|
|
lyricsLoading: 'Lyrics werden geladen…',
|
|
lyricsNotFound: 'Keine Lyrics für diesen Titel gefunden',
|
|
lyricsSourceServer: 'Quelle: Server',
|
|
lyricsSourceLrclib: 'Quelle: LRCLIB',
|
|
lyricsSourceNetease: 'Quelle: Netease',
|
|
lyricsSourceLyricsplus: 'Quelle: YouLyPlus',
|
|
showDuration: 'Dauer anzeigen',
|
|
showRemainingTime: 'Verbleibende Zeit anzeigen',
|
|
};
|