feat(autodj): smooth skip and interrupt blend transitions (#1128)

This commit is contained in:
cucadmuh
2026-06-19 04:52:15 +03:00
committed by GitHub
parent d50c9c444d
commit 4225146a16
50 changed files with 1118 additions and 208 deletions
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Vorheriger Titel',
play: 'Play',
pause: 'Pause',
autoDjMixing: 'AutoDJ — Mischen',
autoDjPreparing: 'AutoDJ — nächster Titel wird vorbereitet',
bufferingStream: 'Loading track from server',
previewActive: 'Vorschau läuft',
previewLabel: 'Vorschau',
+2
View File
@@ -571,6 +571,8 @@ export const settings = {
crossfadeSecs: '{{n}} s',
autoDj: 'AutoDJ',
autoDjDesc: 'Keine feste Dauer — AutoDJ richtet sich nach dem tatsächlichen Klang und überlappt echte Aus- und Einblendungen statt einer festen Sekundenzahl. Für zuverlässige Ergebnisse den Hot-Playback-Cache aktivieren.',
autodjSmoothSkip: 'Weicher Skip',
autodjSmoothSkipDesc: 'Beim Wechsel zum nächsten oder vorherigen Titel während der Wiedergabe blendet der aktuelle Song kurz aus, statt abrupt abgeschnitten zu werden.',
gapless: 'Nahtlose Wiedergabe',
transitionsTitle: 'Übergänge zwischen Tracks',
transitionsDesc: 'Wie aufeinanderfolgende Tracks ineinander übergehen. Es kann immer nur ein Modus aktiv sein.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Previous Track',
play: 'Play',
pause: 'Pause',
autoDjMixing: 'AutoDJ — mixing',
autoDjPreparing: 'AutoDJ — preparing next track',
bufferingStream: 'Loading track from server',
previewActive: 'Preview playing',
previewLabel: 'Preview',
+2
View File
@@ -638,6 +638,8 @@ export const settings = {
crossfadeSecs: '{{n}} s',
autoDj: 'AutoDJ',
autoDjDesc: 'No fixed duration — AutoDJ follows the actual audio, blending real fade-outs and intros instead of a set number of seconds. For reliable results, enable the Hot playback cache.',
autodjSmoothSkip: 'Smooth skip',
autodjSmoothSkipDesc: 'When you skip to the next or previous track while playing, blend into it with the same AutoDJ rules (overlap length, intro trim) from your current position instead of an abrupt cut. Works best when the next track is already buffered.',
gapless: 'Gapless Playback',
transitionsTitle: 'Track transitions',
transitionsDesc: 'How consecutive tracks blend together. Only one mode can be active at a time.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Pista Anterior',
play: 'Reproducir',
pause: 'Pausa',
autoDjMixing: 'AutoDJ — mezclando',
autoDjPreparing: 'AutoDJ — preparando la siguiente pista',
bufferingStream: 'Loading track from server',
previewActive: 'Vista previa activa',
previewLabel: 'Vista previa',
+2
View File
@@ -570,6 +570,8 @@ export const settings = {
crossfadeSecs: '{{n}} s',
autoDj: 'AutoDJ',
autoDjDesc: 'Sin duración fija: AutoDJ se adapta al audio real y se solapa con los fundidos e introducciones reales en lugar de un número fijo de segundos. Para resultados fiables, activa la Caché de reproducción activa.',
autodjSmoothSkip: 'Salto suave',
autodjSmoothSkipDesc: 'Al pasar a la siguiente o anterior pista mientras suena una canción, esta se desvanece brevemente en lugar de cortarse de golpe.',
gapless: 'Reproducción Gapless',
transitionsTitle: 'Transiciones entre pistas',
transitionsDesc: 'Cómo se enlazan las pistas consecutivas. Solo un modo puede estar activo a la vez.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Piste précédente',
play: 'Lecture',
pause: 'Pause',
autoDjMixing: 'AutoDJ — mixage',
autoDjPreparing: 'AutoDJ — préparation de la piste suivante',
bufferingStream: 'Loading track from server',
previewActive: 'Aperçu en cours',
previewLabel: 'Aperçu',
+2
View File
@@ -558,6 +558,8 @@ export const settings = {
crossfadeSecs: '{{n}} s',
autoDj: 'AutoDJ',
autoDjDesc: 'Sans durée fixe : AutoDJ suit laudio réel et se superpose aux vrais fondus et intros plutôt qu’à un nombre fixe de secondes. Pour un résultat fiable, activez le Cache de lecture à chaud.',
autodjSmoothSkip: 'Passage en fondu',
autodjSmoothSkipDesc: 'Lors dun passage à la piste suivante ou précédente pendant la lecture, la piste en cours sestompe brièvement au lieu d’être coupée net.',
gapless: 'Lecture sans blanc',
transitionsTitle: 'Transitions entre pistes',
transitionsDesc: 'Comment les pistes consécutives senchaînent. Un seul mode peut être actif à la fois.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Forrige spor',
play: 'Spill av',
pause: 'Pause',
autoDjMixing: 'AutoDJ — mikser',
autoDjPreparing: 'AutoDJ — forbereder neste spor',
bufferingStream: 'Loading track from server',
previewActive: 'Forhåndsvisning spilles av',
previewLabel: 'Forhåndsvisning',
+2
View File
@@ -557,6 +557,8 @@ export const settings = {
crossfadeSecs: '{{n}}s',
autoDj: 'AutoDJ',
autoDjDesc: 'Ingen fast varighet — AutoDJ følger selve lyden og overlapper ekte inn-/uttoninger i stedet for et fast antall sekunder. For pålitelige resultater bør du aktivere Varm avspillingsbuffer.',
autodjSmoothSkip: 'Myk hopp',
autodjSmoothSkipDesc: 'Når du hopper til neste eller forrige spor under avspilling, toner det pågående sporet kort ut i stedet for å kuttes brått.',
gapless: 'Gapless avspilling',
transitionsTitle: 'Overganger mellom spor',
transitionsDesc: 'Hvordan etterfølgende spor går over i hverandre. Bare én modus kan være aktiv om gangen.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Vorig nummer',
play: 'Afspelen',
pause: 'Pauzeren',
autoDjMixing: 'AutoDJ — mixen',
autoDjPreparing: 'AutoDJ — volgend nummer voorbereiden',
bufferingStream: 'Loading track from server',
previewActive: 'Voorbeeld speelt af',
previewLabel: 'Voorbeeld',
+2
View File
@@ -558,6 +558,8 @@ export const settings = {
crossfadeSecs: '{{n}} s',
autoDj: 'AutoDJ',
autoDjDesc: 'Geen vaste duur — AutoDJ volgt de werkelijke audio en overlapt echte fades en intros in plaats van een vast aantal seconden. Schakel voor betrouwbare resultaten de Warme afspeelcache in.',
autodjSmoothSkip: 'Zacht overslaan',
autodjSmoothSkipDesc: 'Bij overslaan naar het volgende of vorige nummer tijdens het afspelen fadet het huidige nummer kort uit in plaats van abrupt te stoppen.',
gapless: 'Naadloos afspelen',
transitionsTitle: 'Overgangen tussen nummers',
transitionsDesc: 'Hoe opeenvolgende nummers in elkaar overvloeien. Er kan maar één modus tegelijk actief zijn.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Piesa anterioară',
play: 'Redă',
pause: 'Pauză',
autoDjMixing: 'AutoDJ — mixare',
autoDjPreparing: 'AutoDJ — se pregătește următoarea piesă',
bufferingStream: 'Loading track from server',
previewActive: 'Previzualizează redarea',
previewLabel: 'Previzualizare',
+2
View File
@@ -573,6 +573,8 @@ export const settings = {
crossfadeSecs: '{{n}} s',
autoDj: 'AutoDJ',
autoDjDesc: 'Fără durată fixă — AutoDJ urmează sunetul real și se suprapune peste estompările și introducerile reale, în loc de un număr fix de secunde. Pentru rezultate fiabile, activează Cache-ul hot playback.',
autodjSmoothSkip: 'Salt lin',
autodjSmoothSkipDesc: 'La trecerea la piesa următoare sau anterioară în timpul redării, piesa curentă se estompează scurt în loc să fie tăiată brusc.',
gapless: 'Playback Gapless',
transitionsTitle: 'Tranziții între piese',
transitionsDesc: 'Cum se îmbină piesele consecutive. Doar un mod poate fi activ la un moment dat.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: 'Предыдущий трек',
play: 'Играть',
pause: 'Пауза',
autoDjMixing: 'AutoDJ — микширование',
autoDjPreparing: 'AutoDJ — подготовка следующего трека',
bufferingStream: 'Загрузка трека с сервера',
previewActive: 'Превью воспроизводится',
previewLabel: 'Превью',
+2
View File
@@ -658,6 +658,8 @@ export const settings = {
crossfadeSecs: '{{n}} с',
autoDj: 'AutoDJ',
autoDjDesc: 'Без фиксированной длительности — AutoDJ подстраивается под само звучание, накладываясь на реальные затухания и вступления, а не на заданное число секунд. Для надёжной работы включите «Горячий кэш воспроизведения».',
autodjSmoothSkip: 'Плавный пропуск',
autodjSmoothSkipDesc: 'При переходе на следующий или предыдущий трек во время воспроизведения склеивает его по тем же правилам AutoDJ (длина наложения, обрезка вступления) с текущей позиции, а не резким обрывом. Надёжнее, когда следующий трек уже в буфере.',
gapless: 'Без пауз между треками',
transitionsTitle: 'Переходы между треками',
transitionsDesc: 'Как соединяются идущие подряд треки. Одновременно может быть активен только один режим.',
+2
View File
@@ -9,6 +9,8 @@ export const player = {
prev: '上一首',
play: '播放',
pause: '暂停',
autoDjMixing: 'AutoDJ — 混音中',
autoDjPreparing: 'AutoDJ — 正在准备下一首',
bufferingStream: 'Loading track from server',
previewActive: '正在试听',
previewLabel: '试听',
+2
View File
@@ -557,6 +557,8 @@ export const settings = {
crossfadeSecs: '{{n}} 秒',
autoDj: 'AutoDJ',
autoDjDesc: '没有固定时长——AutoDJ 跟随实际音频,叠加在真实的淡入淡出上,而不是固定的秒数。为获得稳定效果,请启用「热播放缓存」。',
autodjSmoothSkip: '平滑跳过',
autodjSmoothSkipDesc: '播放中跳到下一首或上一首时,当前歌曲会短暂淡出,而不是突然切断。',
gapless: '无缝播放',
transitionsTitle: '曲目间过渡',
transitionsDesc: '连续曲目之间如何衔接。同一时间只能启用一种模式。',